![]() |
TImage-Instanz wieder freigeben
Hallo, ich möchte folgendes realisieren:
Ich erzeuge ein Image und möchte dieses entweder durch darauf klicken oder durch Fokuswechsel wieder freigeben. Mein bisheriger Quellcode:
Delphi-Quellcode:
Sobald ich nun aber auf das erzeugte Bild klicke und meine Procedure "myclick" aufgerufen wird, erhalte ich den Fehler "Abstract Error". Was mache ich falsch? Wenn ich nämlich einen zweiten Button einfüge, der das gleiche tut funktioniert dies ohne Probleme. So möchte ich es aber eben nicht haben:
var myimage:TImage;
... procedure TForm1.myclick(Sender: TObject); begin myimage.Free; myimage.Destroy; end; procedure TForm1.Button1Click(Sender: TObject); begin myimage:=Timage.create(nil); With myimage Do Begin parent := Form1; autosize:=true; OnClick:=myclick; myimage.Picture.LoadFromFile('C:\bild.jpg'); End; end;
Delphi-Quellcode:
Und zur anderen Sache: Gibt es dann noch eine Möglichkeit, wenn ich den Focus von meinem Bild entferne, dieses dann ebenfalls freizugeben? Ein "OnFocusChange" o.ä. finde ich nicht...
procedure TForm1.Button1Click(Sender: TObject);
begin myimage.Free; myimage.Destroy; end; Vielen Dank schon einmal, Thorsten |
Re: TImage-Instanz wieder freigeben
versuchs mal ohne:
Delphi-Quellcode:
myimage.Destroy;
|
Re: TImage-Instanz wieder freigeben
Das habe ich schon versucht. Selbst wenn ich es ohne
Delphi-Quellcode:
versuche, führt das zum gleichen Fehler.
myimage.Free;
Liegt es vielleicht daran, dass man eine Instanz nicht freigeben kann, während man eine ihrer Methoden ausführt? Andererseits macht man so etwas doch ständig, oder nicht? Hm... |
Re: TImage-Instanz wieder freigeben
Zitat:
Zitat:
Lösung des problems: Timer aufs Form, Interval auf 500 und im OnClick aufs Image den Timer enablen. Im OnTimer-Event dann einfach das Image freigeben, fertig. (Bitte nicht vergessen, beim Timer Enabled auf False zu setzen, sobald du ihn aufs Form ziehst, sonst knallts etwas früher ;)) Greetz alcaeus |
Re: TImage-Instanz wieder freigeben
Ich finde es eleganter, im OnClick des Images eine Userdefined Message an das Formular zu schicken, das darauf reagiert und das Image freigibt. Ein Timer in diesem Zusammenhang gefällt mir nicht so.
Gruß, teebee EDIT: Ganz wichtig: PostMessage verwenden! |
Re: TImage-Instanz wieder freigeben
Könntest Du oder jemand anders mir verraten, wie dieser Befehl richtig aussehen müsste?
Delphi-Quellcode:
Wenn ich das aufrufe, dann wird natürlich das Form geschlossen... Und ist "WM_Close" überhaupt richtig, um eine Instanz freizugeben?
PostMessage(Handle, WM_CLOSE, 0, 0); // diese Richtung etwa ?
|
Re: TImage-Instanz wieder freigeben
Lies mal:
![]() Dort wird erklärt, wie man Controls zur Laufzeit löschen kann. (mit windows Messages, wie von teebee angedeutet) PS: wäre es nicht geschickter das Image bestehen zu lassen und nur den Bildinhalt zu löschen??? Image1.Picture := nil; |
Re: TImage-Instanz wieder freigeben
Alles klar. Werde ich mir mal zu Gemühte ziehen.
Die Idee mit "Image1.Picture := nil;" ist natürlich auch nett. So wird ebenfalls Speicherplatz freigegeben, die Instanz selbst existiert noch und muss nicht wieder erzeugt werden, sondern kann sofort wieder genutzt werden. Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 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