Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Warum zum Teufel ist TControl.LocalToAbsolute public, aber .LocalToScreen protected!? (https://www.delphipraxis.net/210564-warum-zum-teufel-ist-tcontrol-localtoabsolute-public-aber-localtoscreen-protected.html)

Medium 11. Mai 2022 22:03

Warum zum Teufel ist TControl.LocalToAbsolute public, aber .LocalToScreen protected!?
 
Es geht um FMX, passte leider nicht mehr in den Titel, und ein Präfix dafür haben wir leider nicht.

Ich bin gerade dabei, eine (Desktop-)Anwendung zu entwickeln, die intensiv Scaling verwendet. Dabei möchte ich gelegentlich Fenster an bestimmten Stellen aufpoppen lassen, die über die Position von Controls in einem Frame, in einem Panel, in einem Form bestimmt sind.

TControl.LocalToAbsolute liegt hier leider ziemlich daneben wenn mein Programm skaliert, nicht fullscreen und nicht in der oberen linken Ecke ausgeführt wird. TControl.LocalToScreen dagegen macht das gewünschte. Das ist aber leider protected, und kann daher nicht ohne Umwege außerhalb des Controls genutzt werden, für das ich es aufrufen möchte.
Wer kam bitte auf die ... ähm, "seltsame" (man soll ja nett sein) Idee, diese zwei sehr sehr artverwandten Methoden unterschiedlich zu deklarieren? Warum nicht beide public? Der Person würde ich gern ein kleines Schimpfwörtchen übermitteln.

Kann ich das noch irgendwie lösen, ohne weite Teile meines bereits recht großen Programms anfassen zu müssen?

peterbelow 11. Mai 2022 22:15

AW: Warum zum Teufel ist TControl.LocalToAbsolute public, aber .LocalToScreen protect
 
Um an protected members einer anderen Klasse zu kommen kann man entweder einen class helper oder eine interposer-Klasse verwenden.

jaenicke 12. Mai 2022 08:41

AW: Warum zum Teufel ist TControl.LocalToAbsolute public, aber .LocalToScreen protect
 
Hier lässt sich die Funktionalität ja ganz einfach selbst umsetzen, entweder extern oder als class helper, denn es geht ja nur um die zusätzliche Übersetzung über Scene, wenn denn eine da ist, wie man im Quelltext sieht.

Je nachdem wie oft dies benötigt wird, lohnt sich ggf. ein class helper, aber wenn es nur um eine bestimmte Stelle geht, kann man die paar Zeilen natürlich auch einfach so nutzen.

Dass das protected ist, ist leider übliche Vorgehensweise bei Delphi. Ich musste schon oft ganze Units kopieren oder im Speicher ein paar Jumps hinzufügen, nur weil Sachen absichtlich versteckt oder hardcoded gemacht wurden... ohne Not... verstehen tue ich das auch nicht, dass man den Entwicklern so das Leben schwer macht. (Entsprechende Tickets, dass es Sinn macht, etwas zu veröffentlichen, werden immer wieder auch geschlossen. Probieren sollte man es natürlich dennoch...)

Medium 12. Mai 2022 11:55

AW: Warum zum Teufel ist TControl.LocalToAbsolute public, aber .LocalToScreen protect
 
Dann habe ich das mit den helpern jetzt auch endlich mal gemacht :)

Funktioniert sogar! Danke euch!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz