Главная страница
    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.46 MB
Время: 0.038 c
1-1104915962
jiny
2005-01-05 12:06
2005.01.23
Интеграция складской программы с 1С-Бухгалтерией


4-1101736313
Dema-X
2004-11-29 16:51
2005.01.23
как по handle определить, какому приложению принадлежит окно


14-1104708953
Кудесник
2005-01-03 02:35
2005.01.23
Onimusha 3... что это?


1-1105533171
Express
2005-01-12 15:32
2005.01.23
Canvas


1-1104998124
Кодер
2005-01-06 10:55
2005.01.23
Курсор в RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский