| Autor |
Beitrag |
Jochen W.
      
Beiträge: 56
|
Verfasst: Di 08.11.05 08:34
Guten Morgen! Ich habe eine kleine Anwendung ohne die VCL geschrieben. Das hat auch alles so weit funktioniert doch bei einer Sache komme ich nicht weiter. Hab auch schon in dem WinAPI Toturial (von Lucky) geschaut aber nicht wirklich etwas gefunden was mir hilft etwas zu implementieren das dann auch funktionert.  Bin halt noch nicht so fit was nonvcl angeht. ;-) Jetzt zu Frage: Ich habe ein Fenster erstellt und auf dem Fenster eine Listbox. Meine Frage ist nun wie ich auf ein Doppelklick und das drücken der Taste Enter in der Listbox reagieren kann? Hier mal meine WndMain Procedure: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| Function WndProc (hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam) : lresult; stdcall; Var Result : lresult; Buffer : PChar; Loop : Integer; begin Result := 0;
case uMsg of WM_CREATE: begin IgnoreBool := MoveWindow ( hWnd, 10, 10, 100, 100, True );
hwndListBox := CreateWindowEx ( WS_EX_CLIENTEDGE, 'LISTBOX', nil, WS_CHILD Or WS_VISIBLE Or LBS_NOTIFY Or WS_VSCROLL Or WS_BORDER Or WS_TABSTOP, 10, 10, 80, 80, hWnd, IDC_LISTBOX, hInstance, nil );
WM_COMMAND: Case hiword (wParam) Of LBN_SELCHANGE: Case LoWord (wParam) Of IDC_LISTBOX: Begin End; End; End; End;
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
WndProc := Result; End; | Auf eine Änderung der Listbox kann ich schon reagieren aber nicht auf einen Doppelklick und einen Tastendruck. Wäre schön wenn mir jemand ein paar Hinweise geben könnte. Vielen lieben dank! Bye Jochen
|
|
Jochen W. 
      
Beiträge: 56
|
Verfasst: Di 08.11.05 09:11
So, nach dem ich noch etwas in der messages.pas Datei rumgesucht habe habe ich auch die Konstate LBN_DBLCLK entdeckt.  Und das scheint auch zu funktionieren.
Allerdings hab ich dann noch das Problem mit der Taste Enter. Ich hab auch schon probiert den OK Button das Flag BS_DEFPUSHBUTTON zu geben in der Hoffnung, dass dann ein Enter in der Listbox automatisch zu einen Klick auf dem Ok-Button führt (halt so wie man das aus der VCL kennt). Aber leider klappt das nicht. Der Ok-Button hat zwar mit diesem Flag einen dickeren Rand (was üblich für einen Default-Button ist) aber wenn ich Enter drücke (in der Listbox) wird der Ok-Button nicht angeklickt.
Hat jemand eine Tipp? Danke!!
Bye Jochen
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 08.11.05 13:02
Guck dir mal WM_VKEYTOITEM an:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| WM_VKEYTOITEM: begin {$WARNINGS OFF} if lParam = GetDlgItem(hTabDlgs[3], ID_LST_USER_GRPS) then {$WARNINGS ON} begin case loword(wParam) of VK_DELETE: begin SendMessage(GetDlgItem(hTabDlgs[3], ID_LST_USER_GRPS), LB_DELETESTRING, hiword(wParam), 0); MyEnableMenuItem(hMenu, ID_MNU_SAVE, True); bModified := True; end; end; end {$WARNINGS OFF} else if lParam = GetDlgItem(hTabDlgs[3], ID_LST_AVAILABLE_GRPS) then {$WARNINGS ON} begin case loword(wParam) of VK_INSERT: begin SendMessage(GetDlgItem(hTabDlgs[3], ID_LST_AVAILABLE_GRPS), LB_GETTEXT, hiword(wParam), Integer(@buffer)); if SendMessage(GetDlgItem(hTabDlgs[3], ID_LST_USER_GRPS), LB_FINDSTRING, -1, Integer(@buffer)) = LB_ERR then begin SendMessage(GetDlgItem(hTabDlgs[3], ID_LST_USER_GRPS), LB_ADDSTRING, 0, Integer(@buffer)); MyEnableMenuItem(hMenu, ID_MNU_SAVE, True); bModified := True; end; end; end; end; EnableMenuItem(hmenu, ID_MNU_SAVE, MF_BYCOMMAND or MF_ENABLED); end; |
So kan man auf Entferen und Einfügen reagieren. Enter ist dann entsprechend VK_RETURN.
|
|
Jochen W. 
      
Beiträge: 56
|
Verfasst: Di 08.11.05 14:07
Danke Luckie für die Hilfe!
Ich hab es auch zum laufen bekommen. Allerdings erst als ich gemerkt habe, dass ich IsDialogMessage nicht benutzen darf da diese Funktion wohl die Message WM_VKEYTOITEM selbst verwarbeitet.
Gibt es da eine Lösung das ich beides benutzen kann. Jetzt funktioniert die Enter-Taste aber die Tab-Taste nicht mehr.
Vielen dank!
bye Jochen
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 13.03.07 10:51
Hallo Jochen!
Ich habe das gleiche Problem. Auf meinem Fenster befinden sich drei Elemente: Eine Listbox und zwei Buttons (s. Anhang).
Wähle ich einen Eintrag in der Listbox aus und drücke dann ENTER oder ESC funktioniert es leider nicht wie ich es erwartet hätte. Der OK Button hat unter anderem das Style BS_DEFPUSHBUTTON. Aber auch das reicht wohl nicht.
Hast du zufällig eine Lösung gefunden bzw. hat jemand anders eine Lösung?
Gruß
Tino
Einloggen, um Attachments anzusehen!
|
|
|