Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Eine Prizedur für viele Felder


McFarlane - Do 25.01.07 15:18
Titel: Eine Prizedur für viele Felder
Hallo,
ich habe hier ein Form mit ganzt vielen TShapes drauf.
Nun soll sich ein Shape bei ONMouseDown färben und bei nochmaligem klicken zurückfärben.
Bis hier hin kein Problem, doch kann ich irgendwie eine Prozedur für alle erstellen, oder muss ichs für jedes einzeln machen?

Danke im Vorraus, McFarlane


Saubäär - Do 25.01.07 15:22
Titel: Re: Eine Prizedur für viele Felder
Hi Mcfarlane,


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure einfaerben(Shape: TShape);
begin
 Shape.Pen.Color := clRed;
 Shape.Brush.Color := clRed;
end;


procedure TForm1.Button1Click(Sender: TObject); // z.B.
begin
 einfaerben(Shape1);
end;


Gruß

Saubäär


jakobwenzel - Do 25.01.07 15:25

Wieso so kompliziert? In Sender wird das Aufrufende Objekt übergeben, nur weiß Delphi nicht, dass es ein Shape ist, und deshalb musst du erst sagen "ich will das als Shape ansprechen". So siehts dann aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject); // z.B.
begin
(sender as TShape).Pen.Color := clRed;
(sender as TShape).Brush.Color := clRed;
end;

Dann musste nur noch allen Shapes diese Ereignisbehandlung zuweisen.


JoelH - Do 25.01.07 15:26

nein brauchst du nicht,

du brauchst den Event nur einmal und hängst diese an jedes Shape an

ungefähr so

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TShape(sender).Brush.Color := clred;
end;
]

Wichtig ist der "Sender" denn der gibt Delphi die Information weiter welcher TShape geklickt wurde.n

Edit: Mist zu langsam.


McFarlane - Do 25.01.07 15:26

Perfekt!
Vielen Dank.