Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Image Create Frage (https://www.delphipraxis.net/17294-image-create-frage.html)

CReber 2. Mär 2004 18:22


Image Create Frage
 
Hi ;)

Habe folgendes Problem / Frage !

Hiermit erstelle ich in einem Zufallsintervall Images...

Delphi-Quellcode:

with TImage.create(self) do
    begin
      Parent := Self;
      if Seite=1 then Left:=-15 else Left:=Form1.Width+15;
      height:=15;
      width:=36;
      Picture.LoadFromFile('wolke.bmp');
      name:='Wolke'+IntToStr(b);
    end;
b ist in einer Ini Datei gespeichert so dass die Bilder die Namen Wolke1, Wolke2, Wolke3 etc. haben...

Nun möchte ich in einer anderen Prozedur ALLE diese Bilder bewegen und habe es so versucht:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
  var b,i:integer;
      Wolke:TImage;
begin
// Bewegt alle Wolken
  ini:=TIniFile.Create('temp.ini');
  b:=ini.ReadInteger('Wolken','Anzahl',0);
  if b=0 then exit;
  for i:=1 to b do
    begin
      Wolke[i].Left:=Wolke[i]+1;
    end;
end;
Ich weiß das ist grad ein sehr großer depp Fehler aber ich komm grad echt nich auf die Lösung ;))

Matze 2. Mär 2004 18:28

Re: Image Create Frage
 
Delphi-Quellcode:
ini:=TIniFile.Create('temp.ini');
Das geht schonmal nicht.

Du kannst nicht jedesmal diese Ini erstellen, ohne sie wieder freizugeben.


Entweder, du erstellst sie einmal (OnCreate oder so) und gibst sie im OnClose/OnDestroy etc. wieder frei mittels:

Delphi-Quellcode:
ini.Free;

oder du gibst sie am Ender der Timer-Prozedur wieder frei.

Markus K. 2. Mär 2004 18:28

Re: Image Create Frage
 
Hi hOnkibOnk,
müsste das nicht Wolke[i].Left:=Wolke[i].Left+1; heißen?

Tschüß Markus

Matze 2. Mär 2004 18:30

Re: Image Create Frage
 
Ich weiß, ehrlich gesagt, nicht, ob man das so machen kann:

Delphi-Quellcode:
Wolke[i].Left:=Wolke[i]+1;
Es kann sein, dass du FindComponent benutzen musst.

CReber 2. Mär 2004 18:36

Re: Image Create Frage
 
Zitat:

Zitat von Matze
Delphi-Quellcode:
ini:=TIniFile.Create('temp.ini');
Das geht schonmal nicht.

Du kannst nicht jedesmal diese Ini erstellen, ohne sie wieder freizugeben.


Entweder, du erstellst sie einmal (OnCreate oder so) und gibst sie im OnClose/OnDestroy etc. wieder frei mittels:

Delphi-Quellcode:
ini.Free;

oder du gibst sie am Ender der Timer-Prozedur wieder frei.

Blablabla ;)) Darum gehts mir gar nicht ;)

Will nur wissen wie ich das alle bewege... FindComponent hab ich noch nie mit gearbeitet... Das es so nicht funktioniert weiß ich selber. Nur brauch nen Lösungsvorschlag.

Matze 2. Mär 2004 18:41

Re: Image Create Frage
 
Achso :angle2:

Vielleicht geht's so:

Delphi-Quellcode:
  for i:=1 to b do
    with TImage(FindComponent('Wolke'+IntToStr(i))) do
    begin
      Left := Left + 1;
    end;

SirThornberry 2. Mär 2004 18:56

Re: Image Create Frage
 
geht das ganze überhaupt zu kompilieren?? ich denk mal nicht.
Nur weil irgend ne Komponente den Namen "Wolke" hat kannst du die noch lange nicht über "wolke" ansprechen. Du musst den variablen namen verwenden, und da du keinen vergeben hast geht das auch nicht.

du solltest die ganzen images eventuell mal in nem array oder Tlist speichern. Also anstelle von
Delphi-Quellcode:
with TImage.create(self) do
begin
  Parent := Self;
  if Seite=1 then Left:=-15 else Left:=Form1.Width+15;
  height:=15;
  width:=36;
  Picture.LoadFromFile('wolke.bmp');
  name:='Wolke'+IntToStr(b);
end;
eher
Delphi-Quellcode:
myimagearray: Array of TImage;
[...]
setlength(myimagearray, length(myimagearray) + 1);
myimagearray[length(myimagearray)-1] := TImage.create(self);
with myimagearray[length(myimagearray)-1] do
begin
  Parent := Self;
  if Seite=1 then Left:=-15 else Left:=Form1.Width+15;
  height:=15;
  width:=36;
  Picture.LoadFromFile('wolke.bmp');
  name:='Wolke'+IntToStr(b);
end;
So kannst du dann später über
Delphi-Quellcode:
myimagearray[i]
auf die Images zugreifen. Und sie auch ordentlich bei Programmende wieder freigeben

CReber 2. Mär 2004 19:24

Re: Image Create Frage
 
argh löschen mein fehler ^^


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