Autor Beitrag
vogael
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 13.09.05 23:56 
Guten Tag,

ich bräuchte mal einen Tipp, wie man das hinkriegt, dass 4 Bilder an einer Stelle nacheinander angezeigt werden. Also mit einem timer.

Also, wenn der Timer aktiviert ist, soll in dem angegeben Intervall immer das Bild gewechselt werden, wenn alle 4 durch sind soll's wieder von vorne anfangen.... und ich hab kein Plan wie das geht, bin absolut neu in Delphi.....

Ich sag dann schonmal danke
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 14.09.05 06:32 
Dafür nimmst du eine globale Variable, die sich einspeichert welches Bild gerade dran ist. Wenn der Timmer dann wieder "zuschlägt" erhöhst du die Variable wieder auf die nächste Bildnummer und zeigst dann das zu der Nummer gehörigem Bild an.

PS: Ob der kleine Hinweis dir etwas bringt weiß ich nicht, denn du hast nicht gesagt woran du scheiterst (also bitte präziser beschreiben ;) ), denn es kann ja sein, das du schon am Anzeigen des Bildes scheiterst.
vogael Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.09.05 06:41 
moin,
also ich krieg's zwar hin, ein Bild anzuzeigen, aber dass dieses sich ändert nicht.

So, das mit ner globalen Variable hört sich doch gut an , denn sowas mit hochzählen hab ich schonmal gemacht, nur eben mit zahlen.
Und wie mach ich das dann?
Muss dann eine Variable als "global" deklariert werden?
Sollen die Bilder dann in eine ImageList oder macht man das anders? Wenn ja, dann wie sag ich dem, dass er Bild 0, 1 usw... oder so aus der Imagelist nehmen soll?
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 14.09.05 07:11 
user profile iconvogael hat folgendes geschrieben:
moin,
also ich krieg's zwar hin, ein Bild anzuzeigen, aber dass dieses sich ändert nicht.

Wie es sich anhört hast du bestimmt die Komponente TImage genutzt, oder?

user profile iconvogael hat folgendes geschrieben:
So, das mit ner globalen Variable hört sich doch gut an , denn sowas mit hochzählen hab ich schonmal gemacht, nur eben mit zahlen.

Sollst du hier ja auch machen ;)

user profile iconvogael hat folgendes geschrieben:
Und wie mach ich das dann?

ausblenden Delphi-Quelltext
1:
2:
BildZaehleer:=BildZaehleer+1//kürzer und schneller: inc(BildZaehleer);
 if BildZaehleer=5 then BildZaehleer:=0;



user profile iconvogael hat folgendes geschrieben:
Muss dann eine Variable als "global" deklariert werden?

Bei dem Programm ja, denn wenn du diese lokal definieren würdest, würde das Programm nach dem Ende der Prozedur, wo die deklariert ist, den Inhalt "vergessen". Wenn sie dagegen global ist, speichert sich das Programm diese, bis das Programm beendet wird.

user profile iconvogael hat folgendes geschrieben:
Sollen die Bilder dann in eine ImageList oder macht man das anders? Wenn ja, dann wie sag ich dem, dass er Bild 0, 1 usw... oder so aus der Imagelist nehmen soll?

Das bleibt dir überlassen. Die ImageList bietet Performancevorteile und so. Vor allem werden die Bilder mit in die Exe compiliert. Man kann aber auch das Bild aus einem Ordner jedesmal laden, wodurch dein Programm variabel wird ;).
@Bild aus ImgaeList:
ImageList1.GetBitmap(BildZaehleer, Image1.Picture.Bitmap); Das steht aber auch in der Delphi-Hilfe ;).
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 14.09.05 08:55 
Eine andere Art eine Variable zu definieren wäre sie als Member des Fenster zu deklarieren. Stichwort Objektorientiert! Ist alle mal besser als Global.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  TForm1 = class(TForm)
  private
    fImageIndex: Integer;
  public
    { Public-Deklarationen }
  end;

Dann kann man ganz normal darauf zugreifen. Und falls man noch eine Instanze des Forms anlegen möchte, kommen sich die Variablen nicht in den Weg, da jedes Form seine eigenen Variablen besitzt. Wenn sie von einem anderen Form änderbar sein müssen, dann müsstest du die Variablen im Public teil ansiedeln.

Für den Fall, dass du die Bilder zur Laufzeit laden möchtest, dann würde sich ein Array anbieten. In das könntest du deine Bilder packen und sie bei Bedarf herrausholen.

ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Bilder erstellen und Laden
  fAnimation[0] := TPicture.Create;
  fAnimation[0].LoadFromFile('Image1.bmp');

  fAnimation[1] := TPicture.Create;
  fAnimation[1].LoadFromFile('Image2.bmp');

  fAnimation[2] := TPicture.Create;
  fAnimation[2].LoadFromFile('Image3.bmp');

  fAnimation[3] := TPicture.Create;
  fAnimation[3].LoadFromFile('Image4.bmp');
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Wieder freigeben
  FreeAndNil(fAnimation[0]);
  FreeAndNil(fAnimation[1]);
  FreeAndNil(fAnimation[2]);
  FreeAndNil(fAnimation[3]);

  // Alternativ ginge auch
  // fAnimation[0].Free;
  // da dann aber dennoch die Adresse der ehemaligen Bilder im Array gespeichert wären,
  // könnte dies zu Problemen führen falls man dann darauf zugreifen möchte
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(fImageIndex);
  if fImageIndex = 4
    then fImageIndex := 0;

  Image1.Picture.Assign(fAnimation[fImageIndex]);
end;

Und so könntest du dann die Bilder in deinem Image darstellen. Die Bilder wären aber bei dieser Methode nicht in der Exe gespeichert. Was aber mitunter auch gewünscht sein kann.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
vogael Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.09.05 14:35 
so, danke erstmal ;)

die Methode mit der Imagelist ist die die ich suche. Ich hab das nun wie folgt gemacht, jedoch bleibt da immer das gleiche Bild, in der imagelist sind 3. und die variable wird auch hochgezählt, also müsste das doch eigentlich gehen.... wo ist nur der Fehler??

ausblenden 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:
var
  Form1: TForm1;
  Bild: integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
     timer1.enabled:=true
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
bild:=0
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     inc(Bild);
     imagelist1.getbitmap(Bild, image1.picture.Bitmap);
     if Bild=3 then Bild:=0         ;
     panel1.caption:=inttostr(bild); //nur zum testen ob die variable auch hochgezählt wird...

end;
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 14.09.05 15:14 
Ich sehe jetzt auf Anhieb kein Fehler. Am besten Stelle dien Programm, inklusive der Bilder, als Anhang hoch. Vlt. liegt ja der Fehler woanders ;).
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 14.09.05 15:34 
Hallo,

setz in die Timer-Procedur am Ende Image1.Refresh; ein.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 14.09.05 15:40 
user profile iconvogael hat folgendes geschrieben:
so, danke erstmal ;)

die Methode mit der Imagelist ist die die ich suche. Ich hab das nun wie folgt gemacht, jedoch bleibt da immer das gleiche Bild, in der imagelist sind 3. und die variable wird auch hochgezählt, also müsste das doch eigentlich gehen.... wo ist nur der Fehler??

ausblenden 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:
var
  Form1: TForm1;
  Bild: integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
     timer1.enabled:=true
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
bild:=0
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     inc(Bild);
     imagelist1.getbitmap(Bild, image1.picture.Bitmap);
     if Bild=4 then Bild:=0         ;     panel1.caption:=inttostr(bild); //nur zum testen ob die variable auch hochgezählt wird...
  image1.refresh;
end;


sollte so gehen ;)
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 14.09.05 15:40 
user profile iconLannes hat folgendes geschrieben:
Hallo,

setz in die Timer-Procedur am Ende Image1.Refresh; ein.


Macht er es nicht eigentlich automatisch? :gruebel: (Ich nehme die Komponente nie, da ich direkt auf das Formular zeichne ;) )
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 14.09.05 15:45 
user profile iconHeiko hat folgendes geschrieben:
user profile iconLannes hat folgendes geschrieben:
Hallo,

setz in die Timer-Procedur am Ende Image1.Refresh; ein.


Macht er es nicht eigentlich automatisch? :gruebel: (Ich nehme die Komponente nie, da ich direkt auf das Formular zeichne ;) )

bei getbitmap glaube ich net
vogael Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.09.05 16:10 
geilo, es geht, ihr habt mir echt geholfen, danke!!!!!
Jonas1405
Hält's aus hier
Beiträge: 14

Win 95, Win XP Home
D3 Prof, D4 Prof, D6 Pers
BeitragVerfasst: Mi 14.09.05 16:12 
user profile iconvogael hat folgendes geschrieben:
Guten Tag,

ich bräuchte mal einen Tipp, wie man das hinkriegt, dass 4 Bilder an einer Stelle nacheinander angezeigt werden. Also mit einem timer.

Also, wenn der Timer aktiviert ist, soll in dem angegeben Intervall immer das Bild gewechselt werden, wenn alle 4 durch sind soll's wieder von vorne anfangen.... und ich hab kein Plan wie das geht, bin absolut neu in Delphi.....

Ich sag dann schonmal danke


Hey ho!!
Also wenn du neu bist- hier ist eine suupereinfache Sache: Du nimmst dir eine Image Komponente (Symbol ist so ein Bild) die nimmst du 4 Mal machst sie alle gleich groß und schiebst sie übereinander. In jedes lädst du eines der 4 Bilder (im Objektinspektor gibt es unter Eigenschaften den Punkt Picture oder so- da kannst du in einem Extrafenster ein Bild auswählen, das angezeigt werden soll (ich weiß halt nicht wie "neu" du bei Delphi bist- desshalb schreibe ich das so sicher wie möglich :D :D :D )). Dann guckst du im Objektinspector ncohmal unter EIgenschaften auf einen Punkt, der heißt visible. Der gibt an ob bei laufen des Programmes ide Komponente zu sehen ist oder nicht. Dann stellst du einfach alle Komponenten bei visible auf false (Bis auf die Komponente, in der dein Startbild angezeigt wird), sodass du nachher bei Sart nur dein erstes Bild siehst. Dann programmierst du den Timer so, dass das zweite Bild (die zweite Image Komponenten) bei Visible auf true gestellt wird und die erste "ausgeschaltet" wird, indem du da die Visible Eigenschaft auf fals stellst und immer so weiter bis es wieder von vorne anfängt.

Das ist eine einfach aber nicht so elegante Lösung- die aber funktionieren sollte =) wenn ich nochmal den Quelltext aufschreiben soll sag mal Bescheid (ich weiß halt wie gesagt nicht wie neu du unter Delphi bist!!)

Gruß Jonas
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 14.09.05 16:16 
user profile iconJonas1405 hat folgendes geschrieben:
user profile iconvogael hat folgendes geschrieben:
Guten Tag,

ich bräuchte mal einen Tipp, wie man das hinkriegt, dass 4 Bilder an einer Stelle nacheinander angezeigt werden. Also mit einem timer.

Also, wenn der Timer aktiviert ist, soll in dem angegeben Intervall immer das Bild gewechselt werden, wenn alle 4 durch sind soll's wieder von vorne anfangen.... und ich hab kein Plan wie das geht, bin absolut neu in Delphi.....

Ich sag dann schonmal danke


Hey ho!!
Also wenn du neu bist- hier ist eine suupereinfache Sache: Du nimmst dir eine Image Komponente (Symbol ist so ein Bild) die nimmst du 4 Mal machst sie alle gleich groß und schiebst sie übereinander. In jedes lädst du eines der 4 Bilder (im Objektinspektor gibt es unter Eigenschaften den Punkt Picture oder so- da kannst du in einem Extrafenster ein Bild auswählen, das angezeigt werden soll (ich weiß halt nicht wie "neu" du bei Delphi bist- desshalb schreibe ich das so sicher wie möglich :D :D :D )). Dann guckst du im Objektinspector ncohmal unter EIgenschaften auf einen Punkt, der heißt visible. Der gibt an ob bei laufen des Programmes ide Komponente zu sehen ist oder nicht. Dann stellst du einfach alle Komponenten bei visible auf false (Bis auf die Komponente, in der dein Startbild angezeigt wird), sodass du nachher bei Sart nur dein erstes Bild siehst. Dann programmierst du den Timer so, dass das zweite Bild (die zweite Image Komponenten) bei Visible auf true gestellt wird und die erste "ausgeschaltet" wird, indem du da die Visible Eigenschaft auf fals stellst und immer so weiter bis es wieder von vorne anfängt.

Das ist eine einfach aber nicht so elegante Lösung- die aber funktionieren sollte =) wenn ich nochmal den Quelltext aufschreiben soll sag mal Bescheid (ich weiß halt wie gesagt nicht wie neu du unter Delphi bist!!)

Gruß Jonas

man kann auch einfach bringtofront nehmen, aber er hats ja schon