![]() |
Unterschied zwischen Cast bei verschieben von Komponente zur Laufzeit
Hallo miteinander
Einen kürzeren Titel für diesen Beitrag ist mir nicht eingefallen... :-) Ich habe zwei verschiedene Verhaltensweisen für den von mir aus gleichen Code... könnt ihr mir den Unterschied erklären? Ich verschiebe den Code anhand dieses Beispieles: ![]() Die Prozedur sieht halboriginal folgend aus (ich verschiebe ein Control nur auf der Y-Achse):
Delphi-Quellcode:
Funktioniert einwandfrei. Nun habe ich die "with"-Verschachtelung entfernt, da mir diese grundsätzlich unsymphatisch sind :)
procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin if FDragging then begin with Sender as TControl do begin Top := Y - FDownY + Top; end; end; end;
Delphi-Quellcode:
Das Ergebnis: Verschiebe ich das Control wird es während dem verschieben nicht oder nur flackernd angezeigt und ist am schluss an einem anderen Ort als es sein sollte...
procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var ct: TControl; begin if FDragging then begin ct:= Sender as TControl; ct.Top:= Y - FDownY + Top; // --ODER-- TControl( Sender ).Top:= Y - FDownY + Top; end; end; Worin liegt hier der unterschied zwischen dem "with-cast" und den anderen beiden? Vielen Dank! RedOne |
AW: Unterschied zwischen Cast bei verschieben von Komponente zur Laufzeit
Kommt davon wenn man einfach ein With entfernt:
Delphi-Quellcode:
Na was fehlt da? Richtig: Das ct. vor dem letzten Top :-D
ct.Top:= Y - FDownY + Top;
|
AW: Unterschied zwischen Cast bei verschieben von Komponente zur Laufzeit
Wobei ich mich schon frage, woher Delphi in einer regulären Prozedur das Top kennt. Also entweder ist das in Wirklichkeit eine Methode oder es gibt eine globale Variable o.ä. namens Top. Ansonsten hätte nämlich der Compiler meckern müssen, und das Problem wäre gar nicht aufgetreten.
|
AW: Unterschied zwischen Cast bei verschieben von Komponente zur Laufzeit
Kopf -> Tisch -> Stuhl...
Danke! Das hat mir den Tag gerettet ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz