AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Imagearry wird direkt ausgegeben

Ein Thema von Janninger · begonnen am 3. Dez 2018 · letzter Beitrag vom 4. Dez 2018
Antwort Antwort
Seite 1 von 3  1 23   
Janninger

Registriert seit: 31. Jul 2017
Ort: HN
15 Beiträge
 
Delphi XE7 Professional
 
#1

Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 17:22
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 17:56
PatBildAr[].Visible := true; vielleicht überdenken?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#3

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:00
Vielleicht solltest du auch an Ressourcenschutzblöcke denken.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#4

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:11
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 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.
  Mit Zitat antworten Zitat
Janninger

Registriert seit: 31. Jul 2017
Ort: HN
15 Beiträge
 
Delphi XE7 Professional
 
#5

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:16
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.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#6

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:18
Ist es so nicht korrekter oder irgendwie besser?
Delphi-Quellcode:
 for i := high(PatBildAr) downto low(PatBildAr) do
  PatBildAr[i].Free;
 
 SetLength(PatBildAr, 0);
  Mit Zitat antworten Zitat
Janninger

Registriert seit: 31. Jul 2017
Ort: HN
15 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:21
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#8

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:24
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?
  Mit Zitat antworten Zitat
Janninger

Registriert seit: 31. Jul 2017
Ort: HN
15 Beiträge
 
Delphi XE7 Professional
 
#9

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:30
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?
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#10

AW: Imagearry wird direkt ausgegeben

  Alt 3. Dez 2018, 18:32
Denk an die Ressourenschutzblöcke

Vielleicht so? img.Picture.Graphic := PatBildAr[x]; Habe aber keine Ahnung. Nur eine Vermutung.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:09 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