Autor Beitrag
Beliar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mi 25.02.04 20:31 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47



BeitragVerfasst: 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

_________________
Es gibt keine blöden Fragen, nur blöde Antworten :)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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.
ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Beliar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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:
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:
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>5and (i<=11then
    begin
    left:=-70+i*50;
    top:=192;
    end;

   if i>11 then
    begin
    left:=-295+i*50;
    top:=236;
    end;

  end;


Die Memberprozedur:
ausblenden Delphi-Quelltext
1:
2:
procedure Kugelpfeile(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);


ausblenden 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 user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Fr 27.02.04 12:38 
Jo das geht, füge einfach diesen befehl in deine schon vorhande Schleife:

ausblenden Delphi-Quelltext
1:
OnMouseMove:=KugelPfeile;					
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 27.02.04 12:45 
Phantom1 hat es schon gesagt, aber um es nochmal deutlicher zu machen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Weiss[i]:=timage.create(self);
with Weiss[i] do
begin
  parent:=form1;
  OnMouseMove := KugelPfeile; //<-- Da steht es!
  {...}
end;


Ich finde Deine Einrückung übrigens etwas gewöhnungsbedürftig. :-)

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Beliar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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 :?