Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - OnClick zur Laufzeit variabel zuweisen - Fehler


Hendrik - Mi 26.09.12 18:45
Titel: OnClick zur Laufzeit variabel zuweisen - Fehler
Hallo,

ich möchte gerne über eine Procedure einer Komponente eine Procedure für das OnClick-Ereignis zuweisen. Folgende Procedure habe ich geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure setonclick(value:string;cont:TComponent);
 var
 ev:TNotifyevent;
begin
  value:=lowercase(value);

  if value='p1' then
  ev:=buttonp1Click;
  if value='p2' then
  ev:=buttonp2Click;

  if cont is TButton then begin
     (cont as TButton).onclick:=ev;
  end;

  if cont is TMenuitem then begin
    (cont as TMenuitem).OnClick:=ev;
  end;
end;


Leider kommt beim OnClick auf den Button immer eine Zugriffsverletzung. Hat jemand eine Idee?


Nersgatt - Mi 26.09.12 19:54

Die Zugriffsverletzung kommt erst, wenn man auf den Button klickt? Dann wäre der Fehler in Buttonp1Click bzw. Buttonp2Click zu suchen und nicht in dem Quellcode, den Du hier gespostet hast.


glotzer - Mi 26.09.12 21:18

[quote="user profile iconHendrik"(668133)

Delphi-Quelltext
1:
2:
3:
4:
procedure setonclick(value:string;cont:TComponent);
 var
 ev:TNotifyevent;
begin


hast du "ev" keinen Wert zugewiesen? Falls nicht ist es standardmäsig nil, d.h. Zugriffsverletzung.


bummi - Mi 26.09.12 22:28

nil gäbe keine Zugriffsverletzung, aber Du hast trotzdem Recht, weil ev dann einen beliebigen Stackwert als Adressen darstellen würde, wen value weder p1 noch p2 wären ... und das gäbe ziemlich sicher eine Zugriffsveretzung.


Hendrik - Do 27.09.12 14:24

Das von euch genannte Problem hatte ich nicht bedacht, das wars. Danke!