Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage dynamisch auf TImage erstellen... (https://www.delphipraxis.net/92149-timage-dynamisch-auf-timage-erstellen.html)

NetSonic 15. Mai 2007 11:20


TImage dynamisch auf TImage erstellen...
 
Folgende Problemstellung:

Ich habe eine MDI-Child-Form auf der sich eine TImage-Komponente befindet, die einen Lageplan in Form einer JPG-Datei enthält.
Wenn ich nun mit der linken Maustaste auf diese Image-Kompo klicke, soll mir das Programm eine weiteres TImage mit einer anderen Grafik an den Mauskoordinaten erstellen und über dem Lageplan anzeigen. Das ganze sieht bisher so aus:

Delphi-Quellcode:
procedure TfrmLageplan.imgLageplanMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
   imgDecoder: TImage;
begin
     //Decoder an Mauskoordinaten erstellen
     imgDecoder := TImage.Create(Self);
     with imgDecoder do
     begin
          name   := 'Standort';
          Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + '\img\' + 'aktiv.bmp');
          autosize := true;
          visible := true;
          left    := X;
          top   := Y;
     end;
end;
Die Komponente wird auch erstellt, denn wenn ich ein weiteres Mal klicke, meldet er, dass eine Komponente mit dem Namen "Standort" bereits existiert. Allerdings zeigt er mir die dynamisch erzeugte TImage-Komponente nicht an? Denkfehler? Was mach ich falsch?

Tormentor32 15. Mai 2007 11:22

Re: TImage dynamisch auf TImage erstellen...
 
Parent setzen oder .Show aufrufen? (Weiß nicht, probiers mal)

CCRDude 15. Mai 2007 11:26

Re: TImage dynamisch auf TImage erstellen...
 
Die Meldung daß bereits eine solche existiert ist ja auch richtig. Besser einmal anlegen und wiederverwenden als für jeden Mausklick extra Speicher verquasen und nicht wieder freigeben.

NetSonic 15. Mai 2007 11:29

Re: TImage dynamisch auf TImage erstellen...
 
Danke Tormentor32 für den Tipp mit Parent... hab ich total übersehen! :wall:
Jetzt funzt es perfekt!

Delphi-Quellcode:
procedure TfrmLageplan.imgLageplanMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
   imgDecoder: TImage;
begin
     //Decoder an Mauskoordinaten erstellen
     imgDecoder := TImage.Create(Self);
     with imgDecoder do
     begin
          name   := 'Standort';
          parent := self;
          Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + '\img\' + 'aktiv.bmp');
          autosize := true;
          visible := true;
          left    := X;
          top   := Y;
     end;
end;

CCRDude 15. Mai 2007 11:36

Re: TImage dynamisch auf TImage erstellen...
 
Siehe Hinweis weiter oben, das ist sehr weit weg von "perfekt", das ist immer noch ein Speicherloch!

NetSonic 15. Mai 2007 11:39

Re: TImage dynamisch auf TImage erstellen...
 
Ich muss das so oder so noch überarbeiten, weil ich auf dem "Lageplan" bis 255 "Standorte" anlegen können muss... Die bekommen dann im Namen fortlaufende Nummern.

SirThornberry 15. Mai 2007 11:54

Re: TImage dynamisch auf TImage erstellen...
 
eigentlich brauchen sie gar keinen Namen denn um die Standortbilder wieder frei geben zu können musst du sie ja in ein Array oder eine Liste hängen und somit kannst du sie darüber jederzeit ansprechen (für Freigaben etc.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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