Zdarzenie OnClick z DLL wykonuje się samodzielnie

0

Witam!

Mam problem w Delphi. Użyłem debuggera i okazało się, że zdarzenie OnClick w TMenuItem wykonuje się bez mojej wiedzy przy uruchamianiu programu, przez co tracę nad nim kontrolę :| Funkcję do OnClick ładuję z DLL'a. Wygląda to następująco:

Deklaracja w DLL'u:

function s1(Edicik:TEdit;Labelek1:TLabel;Labelek2:TLabel;Labelek3:Tlabel;ListBox:TListBox;Timer:TTimer;Panel:TPanel):TNotifyEvent; stdcall;
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'ulubione.ini');
  try
    Edicik.Text := INI.ReadString('Ulubione', 'Adres1', '');
    sprawdz(Edicik,Labelek1,Labelek2,Labelek3,ListBox,Timer,Panel);
    Labelek1.Caption := INI.ReadString('Ulubione','Nazwa1','');
  finally
    INI.Free;
  end;
end;

Deklaracja funkcji w programie:

function s1(Edicik:TEdit;Labelek1:TLabel;Labelek2:TLabel;Labelek3:Tlabel;ListBox:TListBox;Timer:TTimer;Panel:TPanel):TNotifyEvent; stdcall external 'biblioteki/Funkcje.dll' name 's1';

Wywołanie funkcji z kawałkiem kodu:

    if not (INI.ReadString('Ulubione', 'Nazwa1', '') = '') then begin
    Form2.N11.Caption := INI.ReadString('Ulubione','Nazwa1','');
    Form2.N11.OnClick := s1(Form2.Edit1,Form2.Label1,Form2.Label2,Form2.Label3,Form2.ListBox1,Form2.Timer1,Form2.Panel1);
    Form2.N11.Visible := True;
    end else begin
    Form2.N11.Caption := '1';
    Form2.N11.Visible := False;
    end;

Nie mam pojęcia, dlaczego samoczynnie OnClick wzbudza się i rozpoczyna działanie 😢 Najgorsze jest to, że program w ogóle się nie wyświetla tylko wykonuje zdarzenie.
Kiedy mam tą procedurę w programie to nic się nie dzieje. Podkreśliłem procedurę, ponieważ z DLL'a żąda funkcji, bo chce zwrócić TNotifyEvent, nie mam pojęcia dlaczego.

Proszę o pomoc

0

O_o
przeciez ta Twoja funkcja s1 tylko zwraca ci TNotifyEvent! OnClick potrzebuje NotifyEvent wiec jest oczywiste ze zeby go dostac musi sie wykonac i zwrocic rezultat..

Jak juz tego chcesz tak używać to stworz procedure z parametrem Sender: TObject w neij wykonaj S1 i te świeżo stworzoną procedurę podepnij pod OnClick

pod ten onclick akurat podpina sie TNotifyEvent dlatego nie mozesz skompilowac aplikacji jesli s1 zwraca coś innego i nie jest procedurą.. deklaracja tej metody musiałaby wygladac tak: procedure s1(Sender: TObject);

0

Dobrze, ale co powoduje problem automatycznego wykonywania OnClick?

Przyczynę braku opanowania chyba znalazłem ;]

0

no jakto co.. nie podepniesz S1 pod onclick bo sie nieda! s1 sie wykonuje zeby otrzymac w wyniku to co zostanie podpiete podonclick.. w rezultacie nie podpina sie nic bo metoda sama w sobie nic nie zwraca..
błąd polega na Twoim błędzie w rozumowaniu działania Eventów..

1 użytkowników online, w tym zalogowanych: 0, gości: 1