![]() |
Pointer auf Objekt setzen und verwenden
Hallo!
Ich fange gerade mit Pointern an... Also, ich habe mehrer zur Laufzeit erzeugte TTreeview. Wird auf eines geklickt, so soll sich die Farbe verändern und ein Pointer darauf gesetzt werden, während das, auf das der Pointer davor gesetzt war, wieder die ursprüngliche Farbe annehmen soll. Das ganze habe ich jetzt so versucht:
Delphi-Quellcode:
Leider funktioniert das ganze nicht...
procedure TMainForm.TreeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if (g_Objekt<>nil) then begin TTreeView(g_Objekt^).Color:=clWindow; end; g_Objekt:=@Sender; TTreeview(g_Objekt^).Color:=clAqua; end; g_Objekt ist eine globale Variable (g_Objekt:Pointer). Das jeweils angeklickte ändert die Farbe, aber das vorherige bleibt wie es ist. Was mache ich Falsch? |
Re: Pointer auf Objekt setzen und verwenden
Beim Parameter Semder handelt es sich schon um eine Referenz(Zeiger)!
Delphi-Quellcode:
(Sender as TTreeView).Color:=clWindow;
|
Re: Pointer auf Objekt setzen und verwenden
D.h. wenn ich g_Objekt statt als Pointer als TTreeview verwende, dann ist das auch ein Zeiger, oder?
Damit funktionierts... |
Re: Pointer auf Objekt setzen und verwenden
Was ist g_Objekt?
|
Re: Pointer auf Objekt setzen und verwenden
nicht so ganz. also pointer an sich sind zeiger auf einen speicherplatz(!)
wenn du ein objekt übergibt, dann übergibst du eine instanz von diesem. so kannst du z.b. aus einer procedure ein objekt irgendwohin übergeben und dann irgendwo speichern. nicht aber bei pointern. bsp:
Delphi-Quellcode:
procedure saveObjPointer(obj:Pointer);
begin self.addToList(obj); end; und procedure saveObj(obj:Tobj); begin self.objArr[2]:=obj; end; so. jetzt liegt der trick im aufruf: procedure aufruf(); var obj:Tobj; begin obj:=TobjCreate(...); saveObjPointer(@obj); //1. funktiniert nicht, weil das eigentliche obj. nur solange lebt, wie die procedur, die ihn erstellt hat. saveObj(obj); end; procedure test(); var obj:^Tobj; begin obj:=self.list[i]; obj^.GibName; //BOOM! Fehler! Das Ding ist nicht mehr da, weil die proc "aufruf" schon längst tot ist. self.objArr[2].gibName; //klappt end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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 by Thomas Breitkreuz