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 Timagelist -> Timage (https://www.delphipraxis.net/70777-timagelist-timage.html)

danku 4. Jun 2006 17:11


Timagelist -> Timage
 
hi. ich will sobald ein bestimmtes ereignis eintrifft eine animation in form von einer timagelist starten. in der imagelist sind logischerweise mehrere bilder für die animation.
ich wollt die imagelist in ein "normales" image laden.
Delphi-Quellcode:
image1.Canvas.assign(imagelist2);
der compiler streikt. warum?

mkinzler 4. Jun 2006 17:18

Re: Timagelist -> Timage
 
Du kannst auch nicht eine ImageList mit einem Image gleichsetzen.

danku 4. Jun 2006 17:25

Re: Timagelist -> Timage
 
hm und welche andere alternative habe ich das ich timagelist anzeigen kann?

mkinzler 4. Jun 2006 17:27

Re: Timagelist -> Timage
 
Du kannst keine ImageList anzeigen, du kannst höchstens die Bilder in der ImageList anzeigen. Schau mal z.B. nach ImageList.GetImages

danku 14. Jun 2006 13:28

Re: Timagelist -> Timage
 
und wie kann ich die bilder von der imagelist in einem timage anzeigen?

Hawkeye219 14. Jun 2006 13:36

Re: Timagelist -> Timage
 
Zitat:

Zitat von mkinzler
Schau mal z.B. nach ImageList.GetImages

Also ist der folgende Code ein guter Anfang:

Delphi-Quellcode:
ImageList1.GetBitmap(0, Image1.Picture.Bitmap);
Gruß Hawkeye

danku 14. Jun 2006 13:45

Re: Timagelist -> Timage
 
ich hab im forum mal geschaut aber das problem war immer
das nur ein bild ausgewählt werden konnte..

genauso ist es bei
ImageList1.GetBitmap(0, Image1.Picture.Bitmap);

Hawkeye219 14. Jun 2006 14:09

Re: Timagelist -> Timage
 
Ok, hier noch ein Versuch:

Delphi-Quellcode:
var
  i : Integer;
begin
  with ImageList1 do
    begin
      Image1.Width := Count * Width;
      Image1.Height := Height;
      for i := 0 to Count - 1 do
        Draw (Image1.Canvas, i * Width, 0, i);
    end;
end;
Gruß Hawkeye

Evian 14. Jun 2006 14:30

Re: Timagelist -> Timage
 
ich würd noch nen Sleep reinmachen, oder gleich nen Timer nutzen. Sonst sieht man nähmlich nicht wirklich was.

Hawkeye219 14. Jun 2006 14:44

Re: Timagelist -> Timage
 
Zitat:

Zitat von Evian
ich würd noch nen Sleep reinmachen, oder gleich nen Timer nutzen. Sonst sieht man nähmlich nicht wirklich was.

Mit meinem Code wollte ich Daniel nur die Richtung aufzeigen, das eigentliche Problem möchte er sicher selbst lösen. Wenn du dir den 2. Parameter des Draw-Aufrufs anschaust, wirst du feststellen, daß ein Sleep an dieser Stelle nicht notwendig ist.

Gruß Hawkeye

danku 14. Jun 2006 15:03

Re: Timagelist -> Timage
 
mit dem sleep hatte ich auch schon getestet nur war da nicht wirklich eine veränderung

danku 14. Jun 2006 17:43

Re: Timagelist -> Timage
 
Zitat:

Zitat von Hawkeye219
Ok, hier noch ein Versuch:

Delphi-Quellcode:
var
  i : Integer;
begin
  with ImageList1 do
    begin
      Image1.Width := Count * Width;
      Image1.Height := Height;
      for i := 0 to Count - 1 do
        Draw (Image1.Canvas, i * Width, 0, i);
    end;
end;
Gruß Hawkeye

was hat das für einen sinn wenn nebeneinander die bilder angeordnet werden?
kennst du nicht das prinzip einer imagelist?
ist doch vom prinzip her wie ein animiertes gif.
(okay ist weit hergeholt aber dient zum verstehen des sachverhaltes)

TheAn00bis 14. Jun 2006 17:51

Re: Timagelist -> Timage
 
Zitat:

Zitat von Hawkeye219
Ok, hier noch ein Versuch:

Delphi-Quellcode:
var
  i : Integer;
begin
  with ImageList1 do
    begin
      Image1.Width := Count * Width;
      Image1.Height := Height;
      for i := 0 to Count - 1 do
        Draw (Image1.Canvas, i * Width, 0, i);
    end;
end;
Gruß Hawkeye

Inwiefern das ein animiertes Gif wiederspiegelt verstehe ich ehrlich gesagt auch nicht.

Ich würde einfach folgenden Code in einen Timer packen:

Delphi-Quellcode:
    ImageList1.GetBitmap(i, Image1.Picture.Bitmap);
    if i<ImageList1.count then inc(i)
    else i:=0;

danku 14. Jun 2006 17:56

Re: Timagelist -> Timage
 
passt net. habs mehrmals getestet
vor allem getbitmap von imagelist??
das picture soll doch ein bitmap bekommen!

Hawkeye219 14. Jun 2006 18:08

Re: Timagelist -> Timage
 
Hallo Daniel,

mir ist die Arbeitsweise einer ImageList sehr wohl bekannt, dir offensichtlich nicht. Falls doch, dann verstehe ich deine Fragen in diesem Thread nicht.

In Beitrag #5 wolltest du wissen, wie man die Bilder einer ImageList in einem TImage anzeigen kann. Genau dies habe ich dir mit meinem Code zeigen wollen. Mit den Hinweisen der anderen Teilnehmer hast du nun eigentlich alle Informationen, um dein Problem zu lösen.

Gruß Hawkeye

TheAn00bis 14. Jun 2006 18:32

Re: Timagelist -> Timage
 
Bei mir funktioniert das so wunderbar:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Image1.Picture.Assign(nil);
    ImageList1.GetBitmap(i, Image1.Picture.Bitmap);
    if i<ImageList1.count-1 then inc(i)
        else i:=0;
end;
Einfach einen Timer, eine gefüllte Imagelist und ein TImage auf die Form und den Code ins OnTimer des Timers packen.
Der Timer sollte nicht zu schnell eingestellt werden. ;)

Edit:

Zitat:

Zitat von danku
vor allem getbitmap von imagelist??
das picture soll doch ein bitmap bekommen!

Die Mühe eine Methode in der Hilfe nachzusehen machst du dir aber nicht?

danku 17. Jun 2006 17:36

Re: Timagelist -> Timage
 
über den letzten kommentar von dir sage ich mal nix...

im bezug auf den timer: das habe ich probiert mit einem interval von 100000. ;)
funzt trotzdem nicht.

Delphi-Quellcode:
 ...
                  i:=0;
                  Image1.Picture.Assign(nil);
                  ImageList2.GetBitmap(i, Image1.Picture.Bitmap);
                  if i<ImageList2.count then inc(i)
                  else i:=0;

//Das steht im Timer:
var i:byte;
begin
I:=0;
Image1.Picture.Assign(nil);
    ImageList2.GetBitmap(i, Image1.Picture.Bitmap);
    if i<ImageList2.count-1 then inc(i)
        else i:=0;

3_of_8 17. Jun 2006 17:42

Re: Timagelist -> Timage
 
Eine ImageList stellt kein GIF dar.

Eine ImageList ist nichts anderes als eine Klasse, die mehrere Bilder verwaltet. Wie das intern gelöst ist (Array, Liste, Binärbaum) weiß ich nicht, das ist allerdings auch egal.

Eine ImageList kann man für animierte Bilder nutzen. Allerdings ist sie nicht (bzw. nicht ausschließlich) dafür gedacht. Man kann darin prima auch eine Art DiaShow basteln (so hatte ich deine Frage auch zuerst verstanden). Oder beispielsweise sämtliche Sprites für ein 2D-Spiel speichern.

TheAn00bis 17. Jun 2006 17:54

Re: Timagelist -> Timage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von danku
über den letzten kommentar von dir sage ich mal nix...

im bezug auf den timer: das habe ich probiert mit einem interval von 100000. ;)
funzt trotzdem nicht.

Beispiel gefällig? Siehe Anhang.

Edit: Dein Fehler ist, dass du i jedesmal wieder auf Null setzt und, dass i eine lokale Variable ist.


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