Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Imagearry wird direkt ausgegeben (https://www.delphipraxis.net/198830-imagearry-wird-direkt-ausgegeben.html)

Janninger 3. Dez 2018 16:22

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:
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;
Vielen Dank im voraus.

Grüße vom Janninger

KodeZwerg 3. Dez 2018 16:56

AW: Imagearry wird direkt ausgegeben
 
PatBildAr[].Visible := true; vielleicht überdenken?

DieDolly 3. Dez 2018 17:00

AW: Imagearry wird direkt ausgegeben
 
Vielleicht solltest du auch an Ressourcenschutzblöcke denken.

Delphi.Narium 3. Dez 2018 17:11

AW: Imagearry wird direkt ausgegeben
 
Delphi-Quellcode:
  PatBildAr[i] := timage.Create(self); // Damit wird das Image auf Self (ermutlich ein Formular?)
  PatBildAr[i].Parent := PanelTop; // und das PanelTop gelegt.
eventuell:
Delphi-Quellcode:
  PatBildAr[i] := timage.Create(nil);
  PatBildAr[i].Parent := nil;
In dem Fall darf aber (zu einem späteren Zeitpunkt, bei Programmende ...) die Freigabe der Bilder im Array nicht vergessen werden.

Eventuell aber auch
Delphi-Quellcode:
PatBildAr[i].Visible := false;
Visible erst dann auf True setzen, wenn die Anzeige erfolgen soll und wieder auf False, wenn keine Anzeige mehr erfolgen soll.

Janninger 3. Dez 2018 17:16

AW: Imagearry wird direkt ausgegeben
 
Das array gebe ich über Form.Destroy frei.

Delphi-Quellcode:
procedure TForm6.FormDestroy(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to high(PatBildAr) do
    PatBildAr[i].Free;
  SetLength(PatBildAr, 0);
end;
Mein Gedanke war, das die Images nur ins Array geladen werden und bei Bedarf von dort über assign wieder geladen werden.
Deshalb wunderte ich mich über das direkte erstellen auf dem PanelTop.

DieDolly 3. Dez 2018 17:18

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);

Janninger 3. Dez 2018 17:21

AW: Imagearry wird direkt ausgegeben
 
Zitat:

Zitat von DieDolly (Beitrag 1420002)
Ist es so nicht korrekter oder irgendwie besser?
Delphi-Quellcode:
 for i := high(PatBildAr) downto low(PatBildAr) do
  PatBildAr[i].Free;
 
 SetLength(PatBildAr, 0);

Definitiv besser.

Delphi.Narium 3. Dez 2018 17:24

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?

Janninger 3. Dez 2018 17:30

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?

DieDolly 3. Dez 2018 17:32

AW: Imagearry wird direkt ausgegeben
 
Denk an die Ressourenschutzblöcke :thumb:

Vielleicht so?
Delphi-Quellcode:
img.Picture.Graphic := PatBildAr[x];
Habe aber keine Ahnung. Nur eine Vermutung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
Seite 1 von 3  1 23      

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