Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zugriff auf Array of Bitmap


Tony-S - Sa 26.06.10 21:49
Titel: Zugriff auf Array of Bitmap
Hallo Forum ich weiße einem Bitmap-Array verschiedene Bildschirminhalte zu und möchte über einen Klick auf eine ListBox mir die unterschiedlichen Ausschnitte anzeigen:


Delphi-Quelltext
1:
var frames: array [0..10000of tbitmap;                    



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TfrmCounter.Timer2Timer(Sender: TObject);
var i: integer;
begin
            begin
            frames[counter] := tbitmap.create;

            frmIMG.ListBox1.Items.Add(IntToStr(counter));
            //in der Form frmIMG möchte ich dann auf die Ausschnitte zugreifen
   
                  try
                  ScreenShot(DesktopBitmap);
                  finally
                  DesktopBitmap.FreeImage;

                  lBitmap.canvas.draw(-min(X1,y1),-min(x2,y2),desktopbitmap);
                  frames[counter].assign (lBitmap);
                  inc (counter);
                  end;
            if counter = 10 then
            begin
            timer2.enabled := false;
            counter := 0;
            frmIMG.Show;
          
            end;
end;
end;


wenn ich dann auf frmIMG folgendes versuche:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfrmIMG.ListBox1Click(Sender: TObject);
var
i: Integer;
begin
  for i:=0 to high(frames)-1 do image1.picture.bitmap.assign (frames[i]);
end;


bekomm ich garnichts angezeigt, das Bild bleibt leer,

wenn ich mir direkt eins raussuche ungefähr so:


Delphi-Quelltext
1:
frmIMG.image1.picture.bitmap.assign(frames[5]);                    


klappt das aber. Was mach ich denn falsch? Muss ich das anders als über eine Schleife lösen?
Vielen Dank schon mal für eure Tips :).


jaenicke - Sa 26.06.10 22:37

Ich sehe ohnehin keinen Sinn darin in der Schleife nacheinander die Bilder zuzuweisen ohne diese überhaupt anzuzeigen. :nixweiss:

Denn solange deine Schleife läuft passiert ja nix anderes in deinem Programm, auch kein Zeichnen.


Tony-S - Sa 26.06.10 22:39

Sorry aber, ich hab überhaupt keine Ahnung, was du mir damit sagen möchtest.


elundril - Sa 26.06.10 22:52

Das durch die schleife das bild nie gezeichnet wird, weil das Programm dazu keine Zeit hat. ;)


Tony-S - Sa 26.06.10 22:58

Ah achso okay, macht Sinn :D naja dann wohl so:


Delphi-Quelltext
1:
Image1.Picture.Bitmap.Assign(frames[ListBox1.itemindex]);                    


elundril - Sa 26.06.10 23:03

Solange du es in der Schleife ausführst wird es nix ändern welche Integer-Variable du verwendest.


jaenicke - Sa 26.06.10 23:03

Und ganz wichtig ist noch zu prüfen ob der ItemIndex auch einen gültigen Wert hat. ;-)

Delphi-Quelltext
1:
2:
if ListBox1.ItemIndex >= 0 then
  ...


Tony-S - Sa 26.06.10 23:14

Jo.. danke :D, manchmal hab ich wohl n Brett vorm Kopf ;)