Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.57 MB
Время: 0.06 c
1-1104845493
Сашок
2005-01-04 16:31
2005.01.23
библиотека иконок *.icl


14-1105109952
Василий
2005-01-07 17:59
2005.01.23
нужен человек, хотя бы средне знающий Delphi


1-1105224892
andruxa
2005-01-09 01:54
2005.01.23
Помогите разобраться в Hints.


14-1104313116
data
2004-12-29 12:38
2005.01.23
Кто какие подарки будет дарить на НГ


1-1105039658
t4
2005-01-06 22:27
2005.01.23
Пересылка переменной из dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский