Thema: Delphi Problem mit TNotifyEvent

Einzelnen Beitrag anzeigen

Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit TNotifyEvent

  Alt 31. Mär 2005, 14:32
Hallo,

ich möchte, wenn ich auf eine CheckBox klicke, dann wenn sie angehakt wird, eine Form2 öfnnen.
Ob die Checkbox angeklickt ist oder nicht, speichere ich in einer Ini-Datei. Damit wird der Zustand der Checkbox beim Aktivieren der Form1, auf der die CheckBox liegt, wiederhergestellt. Da ich aber nicht möchte, dass die Form2, die durch Klicken auf die Checkbox geöffnet werden soll, jedesmal geöffnet wird wenn ich die Form1 auf der die Checkbox liegt öffne, (das passiert, wenn der Defaultwert der Checkbox von dem aus der Ini-Datei abweicht, weil dann ein OnClick-Ereignis ausgelöst wird), lege ich das OnClick-Ereignis der Checkbox temporär auf eine Variable vom Typ TNotifyEvent (foo), und weise der CheckBox den Wert aus der Ini-Datei zu:

Auszug aus der OnActivate-Procedur von Form1

Delphi-Quellcode:
foo := ChkBox1.OnClick;
ChkBox1.OnClick := nil;
ChkBox1.Checked:= ini.IniCheckBox1Value;
ChkBox1.OnClick := foo;
das funzt auch.

wenn ich aber weiter im OnActivate-Ereignis der Form1 eine Procedur aufrufe, die ebenfalls ein Ereignis temporär auf ein TNotifyEvent legt, hier aber die Variable foo lokal benutzt, bekomme ich eine Speicherschutzverletzung.

Delphi-Quellcode:
procedure TFormSettings.setIP_Values(AddressField: TJvIPAddress; IP_String: String; var val: array of String);
var foo : TNotifyEvent;
begin
  foo := AddressField.OnChange;
  AddressField.OnChange := nil;
  for i:= 1 to length(val) do
  begin
    ...
  end;
  AddressField.OnChange := foo;
end;

Warum das? Lege ich die Variable foo als globale Variable der Klasse an, funzt auch alles.

Gruß

Gambit
  Mit Zitat antworten Zitat