Announcement

Collapse
No announcement yet.

Kann ich auf ein TImage zugreifen das zur Laufzeit erstellt wurde?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kann ich auf ein TImage zugreifen das zur Laufzeit erstellt wurde?

    Zum testen wie isometrische Grafik funzt habe ich eine Schleife geschrieben die auf Knopfdruck 150 Bilder (10*15) (je 1kb transparentes gif) erzeugt was recht heftig zuckt.

    Um flackern beim scrollen zu vermeiden dachte ich mir, es wäre vielleicht besser die jetzt vorhandenen Bilder nach Bedarf neu zu füllen statt alles jedesmal neu zu zeichnen, also nur image.picture.loadfromfile() machen.
    (Würde das überhaupt etwas bringen?)

    Das klappt aber natürlich nicht, der Compiler sagt mir jedesmal "undefinierter Bezeichner" weil es ja zu dem Zeitpunkt noch kein TImage mit dem Namen gibt...

    Habe dann testweise folgendes versucht:

    Code:
    procedure TForm1.KarteBewegen;
    const bild = 'img17';
    begin
    TImage(FindComponent(bild)).Picture.loadfromfile('../testgras.gif');
    end;
    Das nimmt der Compiler an, aber beim drücken der Scrolltaste bekomme ich dann ein "Access violation"

    Meine "Erzeugungsschleife" :

    Code:
    procedure TForm1.KarteZeichnen;
    var img: array[1..150] of TImage; i,x,xa,y,count1,count2 : Integer;
    begin
    x  := -38;
    xa := -38;
    y  := -15;
    count1 := 1;
    count2 := 1;
    
    for i := 1 to 150 do
    begin
    img[i] := TImage.Create(Form1.Panel1);
    img[i].Name := 'img'+inttostr(i); // Test
    img[i].Transparent := True;
    img[i].Parent := Form1.Panel1;
    
      if count1 < 11 then begin
      xa := xa+46;
      end
      else begin
      Inc(count2, 1);
      if count2=3 then count2:=1;
      xa := x+46+(count2*23-23);
      y := y+23;
      count1 := 1;
      end;
    
    img[i].Top := y;
    img[i].Left := xa;
    img[i].AutoSize := True;
    img[i].Picture.LoadFromFile('../testgras.gif');
    Inc(count1, 1);
    end;
    
    lbl_test.caption := img[17].Name; // Test
    
    img[17].Picture.LoadFromFile('../testbaum.gif'); // Test
    
    end;

  • #2
    Leg dein var img: array[1..150] of TImage doch als Member deiner Form an und greif doch direkt drauf zu und vergiss den Umweg über FindComponent sowie die Zuweisung img[i].Name.

    Übrigens: Du hast als Owner Panel1 angegeben. Dann solltest du auch über Panel1.FindComponent suchen ...

    Comment


    • #3
      Danke schön für die schnelle Hilfe und den Tip.

      Hat beides geklappt, habe das array jetzt im form deklariert.

      Manchmal sitzt man echt wie der Ochs vorm Wald

      Thorsten

      Comment

      Working...
      X