Autor Beitrag
qwertzuiopü
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Mo 26.02.07 23:19 
Hallo zusammen,

ich habe ein Programm mit so um die 500 Einzel Elementen, die alle fast das gleiche tun sollen. Ich möchte nicht jedem Objekt einzeln sagen lassen, was es tun soll. Ich dachte, das ich alle Objekte, die gleiche Prozedur aufrufen lasse. doch in dieser Prozedur wird dann der Objektname gebraucht. Wie kann ich feststellen, von welchem Objekt diese Prozedur aufgerufen wurde?
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Mo 26.02.07 23:25 
In der Regeln wird in den entsprechenden Events der Sender als TObject übernehmen. Wenn du nun weist, um was für einen Typ es sich dabei handelt, kannst du einfach einen TypeCast bemühen, um dann ganz normal mit dem Objekt zu arbeiten.

Gruss, rob

_________________
erare humanum est
qwertzuiopü Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Mo 26.02.07 23:38 
ich habe mit so etwas noch nicht gearbeitet, weiss zwar was du meinst, doch ich kann es nicht an wennden, sagen wir mal ich hätte drei Button und möchte alle Button die selbe Prozedur aufrufen lassen bei OnClick. Innerhalb der Prozedur soll dann von dem entsprächendem Button Caption geändert werden. könnte mir das irgendwie jemand erklären? ich schau da noch nicht so ganz durch, vielleicht benutze ich den Sender auch nicht richtig, oder so
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Mo 26.02.07 23:43 
joar,

ausblenden Delphi-Quelltext
1:
2:
3:
4:
with TButton(Sender) do //TypeCast
begin
  Caption := 'MeineCaption'//Caption ändern
end;


gruss, rob

_________________
erare humanum est
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 27.02.07 10:49 
Bevor du so etwas machst, solltest du aber prüfen ob der Sender auch tButton in seinem Stambaum hat bzw. tButton ist.

Es sollte also so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.AnyButtonClick(Sender: TObject);
begin
   if (sender is tButton) then begin
      tButton(sender).Caption := 'MeineCaption';
   end;
end;


oder wie bei user profile iconRobinator mit with:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.AnyButtonClick(Sender: TObject);
begin
   if (sender is tButton) then begin
      with TButton(Sender) do //TypeCast
begin
  Caption := 'MeineCaption'//Caption ändern
end;
   end;
end;


Was auch hilfreich ist wenn du in längeren Methoden mehrfach drauf zugreifen muss und wenn du nicht ständig Typecasten willst, ist dir einfach eine Hilfsvariable zu definieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.AnyButtonClick(Sender: TObject);
   var
      ThisButton : tButton;
begin
   if (sender is tButton) then begin
      ThisButton := tButton(sender)
      ThisButton.Caption := 'MeineCaption';
   end;
end;


Hier kannst du dann im Laufe der procedure immer wieder über die Variable ThisButton auf deinen Knopf zugreifen.

Gruß
Klabautermann