Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизПереход по TAB на API Найти похожие ветки
← →
Users (2004-11-24 11:31) [0]Почему не работает переход по TAB между контролами ?
И не работает Click на фокусированной кнопке при нажатии Enter? Нужно ли писать самому обработчик нажатий клавиш, самому переводить фокус или какие то параметры контролов заданы не верно?
Program Some;
Uses
Windows, Messages, CommCtrl;
Var
ProgramWinClass : TWndClass;
ProgramInst : HINST;
MainWindow : HWND;
MainMessage : TMsg;
Edit1 : HWND;
Button1 : HWND;
Button2 : HWND;
Button3 : HWND;
Const
CLASSNAME = "SomeWindowClass";
TITLE = "Some";
Function WindowProc(hWindow: HWND; Msg: Integer; wParam: LongInt; lParam: LongInt): LRESULT; Stdcall;
Begin
Result := 0;
Case Msg Of
WM_CREATE:
Begin
InitCommonControls;
End;
WM_COMMAND:
Begin
If (HWND(lParam) = Button1) Then
Begin
MessageBox(hWindow, "Button1", "", 0);
End;
If (HWND(lParam) = Button2) Then
Begin
MessageBox(hWindow, "Button2", "", 0);
End;
If (HWND(lParam) = Button3) Then
Begin
DestroyWindow(hWindow);
End;
End;
WM_DESTROY:
Begin
PostQuitMessage(0);
Exit;
End;
Else
Result := DefWindowProc(hWindow, Msg, wParam, lParam);
End;
End;
Begin
ProgramInst := hInstance;
With ProgramWinClass Do
Begin
style := CS_CLASSDC Or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := ProgramInst;
hbrBackground := color_btnface + 1;
lpszClassname := CLASSNAME;
HICON := LoadIcon(hInstance, "MAINICON");
hCursor := LoadCursor(0, IDC_ARROW);
End;
RegisterClass(ProgramWinClass);
MainWindow := CreateWindowEx(
WS_EX_APPWINDOW,
CLASSNAME,
TITLE,
WS_TILEDWINDOW Or WS_VISIBLE Or WS_TABSTOP,
129,
119,
334,
324,
0,
0,
ProgramInst,
Nil);
Edit1 := CreateWindowEx(
WS_EX_CLIENTEDGE,
"Edit",
"",
WS_CHILD Or WS_VISIBLE Or WS_BORDER Or WS_TABSTOP,
72,
20,
233,
21,
MainWindow,
0,
ProgramInst,
Nil
);
Button1 := CreateWindow(
"Button",
"Button&1",
WS_VISIBLE Or WS_CHILD Or BS_PUSHLIKE Or BS_TEXT Or WS_TABSTOP,
86,
262,
75,
25,
MainWindow,
0,
ProgramInst,
Nil
);
Button2 := CreateWindow(
"Button",
"Button&2",
WS_VISIBLE Or WS_CHILD Or BS_PUSHLIKE Or BS_TEXT Or WS_TABSTOP,
166,
262,
75,
25,
MainWindow,
0,
ProgramInst,
Nil
);
Button3 := CreateWindow(
"Button",
"&Exit",
WS_VISIBLE Or WS_CHILD Or BS_PUSHLIKE Or BS_TEXT Or WS_TABSTOP,
246,
262,
75,
25,
MainWindow,
0,
ProgramInst,
Nil
);
SetFocus(Edit1);
UpdateWindow(MainWindow);
While GetMessage(MainMessage, 0, 0, 0) Do
Begin
TranslateMessage(MainMessage);
DispatchMessage(MainMessage);
End;
UnregisterClass(CLASSNAME, ProgramInst);
End.
← →
DVM © (2004-11-24 11:34) [1]
> Почему не работает переход по TAB между контролами ?
> И не работает Click на фокусированной кнопке при нажатии
> Enter? Нужно ли писать самому обработчик нажатий клавиш,
> самому переводить фокус или какие то параметры контролов
> заданы не верно?
Все самому делать. Автоматически это происходит только в окнах диалога (уже сделано в их оконной процедуре)
← →
Users (2004-12-01 11:17) [2]Спасибо DVM.
Подтолкнуло на мысль о вот таком коде:
...
UpdateWindow(MainWindow);
While GetMessage(MainMessage, 0, 0, 0) Do
Begin
if (Not IsDialogMessage(MainWindow, MainMessage)) Then
begin
TranslateMessage(MainMessage);
DispatchMessage(MainMessage);
end;
End;
Работает переход по TAB между контролами, Enter на кнопке, ALT+буква и т.д. Т.е. работают все "вкусности" диалога.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.079 c