Thema: Delphi Problem mit Message

Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 6. Mai 2003, 19:25
Ich wäre da mal ganz vorsichtig, wenn du behauptest, dass Assarbad fehlerhafte Tutorials veröffentlicht. Ich habe sein Tutoriasl nicht mehr im Kopf - lang, lang ist's her - aber es läuft wahrscheinlich nicht, weil du es verschlimmbessert hast.
Kuck dir mal im PSDK oder alternativ in meinen Tutorials an, was im loword vom wParam von WM_COMMAND steht: Die ID des Controlls. Diese hast du beim Erzeugen des Buttons mit 0 angegeben und testest im WM_COMMAND Zweig testaber auf das Handle vom Button.

Mach mal das: Als Konstante führst du IDOK mit 100 ein.
  IDOK = 100; Dann in WM_CREATE:
Delphi-Quellcode:
function WNDProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM;
                  lParam: LPARAM): LRESULT; stdcall;
var
  hButton: Cardinal;
Das Erzeugen vom Button:
Delphi-Quellcode:
hButton := CreateWindow('BUTTON', 'caption of a button',
        WS_VISIBLE OR WS_CHILD OR WS_BORDER, 100, 100, 200, 24,
        hwnd, IDOK, hInstance, nil);
Und das Abfangen vom Klick auf dem Button:
Delphi-Quellcode:
WM_COMMAND:
      if hiword(wparam) = BN_CLICKED then
      //########################################################################
        if loword(wparam) = IDOK then //HIER HIER HIER
      //########################################################################
          MessageBox(hwnd, 'button pressed', 'Info', 0);
Dann geht das auch.

Den WM_COMMAND-Zweig würde ich aber anderes schreiben, denn wenn du mehrer Controlls hast wird das mit if recht aufwendig und unübersichtlich:
Delphi-Quellcode:
WM_COMMAND:
begin
  if hiword(wparam) = BN_CLICKED then
    case loword(wparam) of
      IDOK: MessageBox(hwnd, 'button pressed', 'Info', 0);
    end;
end;
Jetzt kannst du recht einfach und übersichtlich auf verschiedene Controlls reagieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat