Entwickler-Ecke
Multimedia / Grafik - Image-Array?
Beliar - Mi 25.02.04 20:31
Titel: Image-Array?
Ich suche eine Möglichkeit, viele Images automatisch zu erstellen (sollen gleiche Eigenschaften haben).
Geht das mit nem normalen Feld?
Darüber hinaus will ich jedes dieser vielen Images, die sich nur in Namen und Position unterscheiden sollen, mit nur einem OnClick-Ereignis ansprechen, da ich nicht 50 OnClick-Ereignisse für 50 Images schreiben will.
Ich hoffe ihr könnt mir helfen.
Urba - Mi 25.02.04 22:36
Wenn du bei deiner ersten Frage etwas spezifischer wirst, dann kann dir bestimmt geholfen werden.
Zum zweiten kannst du ein allgemeines OnClick-Ereigniss schreiben (die gleichen Parameter) und diese dann den Images per @OnClick := @DeineProzedur zuordnen
Gruss
Urba
Christian S. - Mi 25.02.04 22:54
Hallo!
zur 1.Frage: in meinem Array-Tutorial hier im Forum gibt es auch einen Abschnitt zu Komponentenarrays
zur 2.Frage: Du schreibst Dir eine Member-Prozedur von Deiner Form, die einen Parameter Sender vom Typ TObject hat. Diese kannst Du dann einfach dem OnClick-Ereignis jedes Images zuweisen:
Delphi-Quelltext
1:
| myImage.OnClick := myProz; |
Wenn Du herausfinden möchtest, welches Image das Ereignis ausgelöst hat, kannst Du das z.B. über die Tag-Eigenschaften machen. Diese ist aber bei TObject nicht verfügbar, so dass Du den Sender erst einmal nach TImage casten musst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| prcoedure TForm1.myProz(Sender : TObject); var bildNummer : Integer; begin if Sender is TImage then bildnummer := TImage(Sender).Tag; end; |
Die Tag-Eigenschaft setzt Du am Besten für jedes Bild direkt beim Erstellen der Bilder.
MfG
Peter
Beliar - Fr 27.02.04 11:31
Danke für dein Tutorial Peter, das hat mir wirklich weitergeholfen. Ich kann jetzt viele Images in einem Array erstellen.
Die Member-Prozedur hab ich auch hinbekommen und das mit der Tag-Eigenschaft verstehe ich auch.
Das ist bis jetzt dabei herausgekommen:
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:
| procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=1 to 14 do begin Weiss[i]:=timage.create(self); with Weiss[i] do begin parent:=form1; name:='Weiss'+inttostr(i); autosize:=true; transparent:=true; Weiss[i].Picture.LoadFromFile('.\WBall.bmp'); weiss[i].tag:=i;
if i<=5 then begin left:=205+i*50; top:=148; end;
if (i>5) and (i<=11) then begin left:=-70+i*50; top:=192; end;
if i>11 then begin left:=-295+i*50; top:=236; end;
end; |
Die Memberprozedur:
Delphi-Quelltext
1: 2:
| procedure Kugelpfeile(Sender: TObject; Shift: TShiftState; X, Y: Integer); |
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.KugelPfeile(Sender: TObject; Shift: TShiftState; X,Y: Integer); var bildnummer:integer; begin if sender is timage then bildnummer:=timage(sender).Tag; end; |
Das einzige, was ich jetzt noch nicht hinbekomme ist, die OnClick-Prozeduren der Memberprozedur zuzuweisen.
Wo schreibe ich diese Zuweisung rein? In eine neue Prozedur? Wie deklariere ich die
OnClick(oder OnMouseMove)-Prozeduren? Kann ich alle diese OnClick-Prozeduren in eine schleife packen, um weniger schreiben zu müssen?
Ganz schön viele fragen... ich hoffe ihr habt den Nerv, sie mir zu beantworten - Danke!
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
Phantom1 - Fr 27.02.04 12:38
Jo das geht, füge einfach diesen befehl in deine schon vorhande Schleife:
Delphi-Quelltext
1:
| OnMouseMove:=KugelPfeile; |
Christian S. - Fr 27.02.04 12:45
Phantom1 hat es schon gesagt, aber um es nochmal deutlicher zu machen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Weiss[i]:=timage.create(self); with Weiss[i] do begin parent:=form1; OnMouseMove := KugelPfeile; end; |
Ich finde Deine Einrückung übrigens etwas gewöhnungsbedürftig. :-)
MfG
Peter
Beliar - Fr 27.02.04 20:32
Und es funktioniert :shock: - toll.
Wenn meine Einrückung so verkehrt ist, werd ich mal versuchen sie zu ändern :?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!