![]() |
Re: erzeugts IImage Löschen?
Zitat:
Gruß Heike |
Re: erzeugts IImage Löschen?
Du könntest das Image im .onClick nur markieren bzw deren Index wegschreiben und dann aüßerhalb des Images freigeben.
|
Re: erzeugts IImage Löschen?
Hallo,
die Freigabe einer visuellen Komponente im OnClick() ist für sich genommen kein Problem. Vielleicht liegt der Fehler an einer anderen Stelle? Freundliche Grüße |
Re: erzeugts IImage Löschen?
Hallo,
Zitat:
Delphi-Quellcode:
Gruß
procedure TControl.Click; (vereinfacht)
begin if Assigned(FOnClick) then FOnClick(Self); // OnClick aufrufen, Self wird freigegeben // Jetzt sind wir hier, in einem nicht mehr existirenden Objekt. Irgendwie blöd, oder? end; // Zurück nach TControl.WMLButtonUp -> Upps, AV! xaromz |
Re: erzeugts IImage Löschen?
Hallo Martin,
es wird nichts passieren, solange kein Zugriff auf Daten des freigegebenen Objektes erfolgt. Ziehe TImage-Komponenten auf eine Form und verwende diesen gemeinsamen event handler:
Delphi-Quellcode:
Es funktioniert, aber Borland (D7 VCL) warnt pauschal vor einer solchen Vorgehensweise.
procedure TDemoForm.ImageClick(Sender: TObject);
begin with Sender as TComponent do Free; end; Um auch einmal dieses wundervolle Wort zu verwenden: Grundsätzlich würde ich es ganz anders machen. Ich habe schon mit der von Markus erwähnten Vormerkung gearbeitet und im Event OnIdle() die Komponenten freigegeben, aber besser noch gefällt mir der Ansatz über eine eigene application message (PostMessage) und einen speziellen message handler. Freundliche Grüße |
Re: erzeugts IImage Löschen?
Hallo,
Zitat:
Versuche mal folgendes:
Delphi-Quellcode:
Das ist jetzt zwar konstruiert, aber wenn zufälllig ein neues Objekt erzeugt wird, das den Speicher des zerstörten verwendet (moderne Speichermanager machen sowas gerne), dann hast Du ein Problem.
procedure TForm1.Image1Click(Sender: TObject);
var P: Pointer; begin P := Pointer(Sender); TControl(Sender).Free; FillChar(P^, 4, 0); // Objektspeicher überschreiben end; Zitat:
Gruß xaromz |
Re: erzeugts IImage Löschen?
Hi xaromz!
Zitat:
Gruß Heike |
Re: erzeugts IImage Löschen?
Hallo Heike,
in ![]() Gruß Hawkeye |
Re: erzeugts IImage Löschen?
Zitat:
Klappt wunderbar und vorallen ohne Fehler ;-) Gruß Heike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 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