AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TImage-Instanz wieder freigeben

Ein Thema von ThorZten · begonnen am 28. Feb 2005 · letzter Beitrag vom 28. Feb 2005
Antwort Antwort
ThorZten
(Gast)

n/a Beiträge
 
#1

TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 02:34
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:
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;
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:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  myimage.Free;
  myimage.Destroy;
end;
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...

Vielen Dank schon einmal,
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#2

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 05:25
versuchs mal ohne:

myimage.Destroy;
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
ThorZten
(Gast)

n/a Beiträge
 
#3

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 08:43
Das habe ich schon versucht. Selbst wenn ich es ohne myimage.Free; versuche, führt das zum gleichen Fehler.
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...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 08:48
Zitat von ThorZten:
Liegt es vielleicht daran, dass man eine Instanz nicht freigeben kann, während man eine ihrer Methoden ausführt?
Du sagst es


Zitat von ThorZten:
Andererseits macht man so etwas doch ständig, oder nicht? Hm...
Also ich hab noch nie ein Image in einem OnClick-Handler freigegeben

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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#5

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 08:54
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!
  Mit Zitat antworten Zitat
ThorZten
(Gast)

n/a Beiträge
 
#6

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 10:32
Könntest Du oder jemand anders mir verraten, wie dieser Befehl richtig aussehen müsste?

PostMessage(Handle, WM_CLOSE, 0, 0); // diese Richtung etwa ? Wenn ich das aufrufe, dann wird natürlich das Form geschlossen... Und ist "WM_Close" überhaupt richtig, um eine Instanz freizugeben?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 10:52
Lies mal:
http://www.delphipraxis.net/internal...ct.php?t=29732
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;
Andreas
  Mit Zitat antworten Zitat
ThorZten
(Gast)

n/a Beiträge
 
#8

Re: TImage-Instanz wieder freigeben

  Alt 28. Feb 2005, 23:42
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 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