Wykrycie klikniecia buttona.

0

Witam.
Mam dosyć spory problem (jak dla mnie).
Otóż, bez zbędnego gadania przejde do rzeczy.

Mam program, który na podstawie danych z pliku tworzy przycisk na pulpicie..Procedura wyglada tak:
najpierw wczytuje dane do poszczególnych zmiennych a potem:

CreateWindow('BUTTON', pchar(name), WS_CHILD or WS_VISIBLE, p1, p2, r1, r2, GetDesktopListViewHandle, nr, hInstance, nil);

zmienna name to "caption", p1, p2, r1, r2, to pozycje i rozmiar, i nr..to ten numerek co sie podaje (kurde zapomnialem jak to sie nazywa) w kazdym razie wiecie o co chodzi.

no i dobra..mam sobie jeszcze:

Const
  BCLC = WM_USER + 102;

i w case uMsg of mam :

  BCLC:
    begin
      messagebox(wnd, 'aa', 'aa', mb_iconinformation);
    end;

zeby pokazalo wiadomosc gdy ktos kliknie na stworzony przycisk...

Teraz moja DLL'ka:
oczywiscie ma:

Const
  BCLC = WM_USER + 102;

która jest wysyłana przy kliknięciu na button.

jak na razie wszystko ok.

wracając do pliku z danymi....mam w nim te wszystkie dane (name, p1, p2, r1, r2, nr) itp. i mam nr 100. (na 100% sprawdzone przy odczytywaniu w programie)...
i moja dll :

Function SysMsgProc(nCode: integer; wParam: WPARAM; lParam: LPARAM): lresult; stdcall;
begin
  pcws := PCWPSTRUCT(lparam);
  case pcws.message of
    WM_COMMAND:
      begin
        if HIWORD(pcws.wParam) = BN_CLICKED then
          case LOWORD(pcws.wParam) of
          99:    //przycisk exit
            begin
              PostMessage(FindWindow('MojProgram', nil), WM_DESTROY, 0, 0);
            end;
          100:    //stworzony przycisk o "numerku" 100
            begin
              PostMessage(FindWindow('MojProgram', nil), BCLC, 0, 0);
            end;

        end;
  end else
  Result := CallNextHookEx(Hok, nCode, wParam, lParam);
 end;
end;

i tu jest (chyba) coś nie tak...odpalam program
wszystko ok, tworzy przycisk na podstawie danych z pliku...
i przy kliknieciu powinien wyswietlic 'aa'...ale zamiast tego po kliknieciu wszystko sie zaczyna sypać, explorer.exe, nawet taskmgr.exe sie sypie jak odpalam....0_o

W czym tkwi problem ? Prosze o pomoc.

0

A to case uMsg of to masz w procedurze jakiego okna?

0
function WndProc(Wnd: HWND; uMsg: UINT; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall;
begin
Result := 0;

case uMsg of

głownego okna programu...jedynego.

ale nie w tym tkwi problem...poniewaz WM_DESTROY dziala prawidlowo...

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