Главная страница
    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.56 MB
Время: 0.055 c
3-1103267528
cad2206
2004-12-17 10:12
2005.01.23
Переход к записи по щелчку мыши в DBGrid e


4-1101807461
mariya
2004-11-30 12:37
2005.01.23
как свернуть все окна кроме определенного


3-1103521649
WolandUSSR
2004-12-20 08:47
2005.01.23
Вставка BLOB поля в таблицу MySQL


1-1105284562
pasha L
2005-01-09 18:29
2005.01.23
Приравнивание одного шрифта к другому


3-1103354594
Dell3r
2004-12-18 10:23
2005.01.23
Неизвестная





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