![]() |
Delphi-Version: 5
Imagearry wird direkt ausgegeben
Hallo zusammen,
folgende Zeilen sollten eigentlich nur mein array befüllen, aber die Bilder werden direkt im PanelTop angezeigt, ohne das ich auf das array zugreife. Wo liegt dort mein Denkfehler?
Delphi-Quellcode:
Vielen Dank im voraus.
var
i: integer; jpg: tjpegimage; ms: tmemorystream; ... for i := 0 to 19 do begin jpg := tjpegimage.Create; ms := tmemorystream.Create; TBLobfield(FDQuery1.FieldByName('Bild' + inttostr(i))).SaveToStream(ms); ms.Position := 0; jpg.LoadFromStream(ms); if ms.Position > 50 then begin SetLength(PatBildAr, length(PatBildAr) + 1); PatBildAr[i] := timage.Create(self); PatBildAr[i].Parent := PanelTop; PatBildAr[i].Align := alClient; PatBildAr[i].Center := true; PatBildAr[i].Proportional := true; PatBildAr[i].Stretch := true; PatBildAr[i].Visible := true; PatBildAr[i].Picture.Assign(jpg); jpg.Free; ms.Free; end; end; Grüße vom Janninger |
AW: Imagearry wird direkt ausgegeben
PatBildAr[].Visible := true; vielleicht überdenken?
|
AW: Imagearry wird direkt ausgegeben
Vielleicht solltest du auch an Ressourcenschutzblöcke denken.
|
AW: Imagearry wird direkt ausgegeben
Delphi-Quellcode:
eventuell:
PatBildAr[i] := timage.Create(self); // Damit wird das Image auf Self (ermutlich ein Formular?)
PatBildAr[i].Parent := PanelTop; // und das PanelTop gelegt.
Delphi-Quellcode:
In dem Fall darf aber (zu einem späteren Zeitpunkt, bei Programmende ...) die Freigabe der Bilder im Array nicht vergessen werden.
PatBildAr[i] := timage.Create(nil);
PatBildAr[i].Parent := nil; Eventuell aber auch
Delphi-Quellcode:
Visible erst dann auf True setzen, wenn die Anzeige erfolgen soll und wieder auf False, wenn keine Anzeige mehr erfolgen soll.
PatBildAr[i].Visible := false;
|
AW: Imagearry wird direkt ausgegeben
Das array gebe ich über Form.Destroy frei.
Delphi-Quellcode:
Mein Gedanke war, das die Images nur ins Array geladen werden und bei Bedarf von dort über assign wieder geladen werden.
procedure TForm6.FormDestroy(Sender: TObject);
var i: integer; begin for i := 0 to high(PatBildAr) do PatBildAr[i].Free; SetLength(PatBildAr, 0); end; Deshalb wunderte ich mich über das direkte erstellen auf dem PanelTop. |
AW: Imagearry wird direkt ausgegeben
Ist es so nicht korrekter oder irgendwie besser?
Delphi-Quellcode:
for i := high(PatBildAr) downto low(PatBildAr) do
PatBildAr[i].Free; SetLength(PatBildAr, 0); |
AW: Imagearry wird direkt ausgegeben
Zitat:
|
AW: Imagearry wird direkt ausgegeben
Du erstellst Bilder mit Self im Create als Parameter und setzt das PanelTop als Parent, sowie Visible := True;
Das heißt schlicht und einfach: Die Bilder sollen auf dem PanelTop angezeigt werden. Ob Du da jetzt x einzelne TImages auf das PanelTop setzt oder sie in 'nem Array verwaltest, ist dabei egal. Sollen sie nur ins Array, dann darfst Du ihnen keinen Parent zuweisen. Was passiert denn, wenn Du die von mir weiter oben gemachten Änderungen umsetzt? |
AW: Imagearry wird direkt ausgegeben
Nil war die Lösung, vielen Dank!
Auch für den Hinweis mit dem freigeben. Das bild bekomme ich dann mit img.Picture.Assign(PatBildAr[x]) wieder aus dem array mit den vorher gespeichtern settings? |
AW: Imagearry wird direkt ausgegeben
Denk an die Ressourenschutzblöcke :thumb:
Vielleicht so?
Delphi-Quellcode:
Habe aber keine Ahnung. Nur eine Vermutung.
img.Picture.Graphic := PatBildAr[x];
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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