Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Alle Ereignisse eines unbestimmten Controls löschen?
trm - Do 19.04.12 18:14
Titel: Alle Ereignisse eines unbestimmten Controls löschen?
Huhu.
gibt es eine Möglichkeit, wenn man alle Controls einer Form durchläuft, die Ereignisse des Controls zu löschen, ohne dass man weiss, welchem Typ das Control entspringt?
Bsp: Timer hat ja andere Ereignisse als ein Button. Normalerweise müsste ich prüfen, ob das aktuelle Control ein Button ist, dann alle Ereignisse auf nil setzen.
Geht das eleganter mit einer generischen Zuweisung?
bummi - Do 19.04.12 18:34
Ob das so ganz sauber ist weiß ich nicht ....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm2.Button2Click(Sender: TObject); var x,y: Word; pl: PPropList; m:TMethod; begin m.Code := nil; m.Data := nil; y := GetPropList(Self, pl); for x := 0 to y - 1 do begin if Copy(pl[x].Name, 1, 2) <> 'On' then Continue; if GetMethodProp(Self, pl[x].Name).Code <> nil then begin Memo1.Lines.Add(Self.Name + ' - ' + pl[x].Name); SetMethodProp(Self, pl[x].Name,m); end; end; end; |
oder gekapselt ....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| Procedure RemoveEvents(O:TObject); var x,y: Word; pl: PPropList; m:TMethod; begin m.Code := nil; m.Data := nil; y := GetPropList(o, pl); for x := 0 to y - 1 do begin if Copy(pl[x].Name, 1, 2) <> 'On' then Continue; if GetMethodProp(o, pl[x].Name).Code <> nil then begin SetMethodProp(o, pl[x].Name,m); end; end; end; |
trm - Do 19.04.12 20:06
Danke bummi, Deine Procedure war sehr hilfreich.
Wie kommt man auf so ein Konstrukt?
bummi - Do 19.04.12 23:05
@trm
von selbst sicher nicht ;-)
Da muss erst jemand mit so seltsamen Anforderungen kommen. (just kidding)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!