Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Переход по 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 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
1-1104963530
vizbor84
2005-01-06 01:18
2005.01.23
Почему отображается ???? вместо того что я ввожу?


4-1102266958
Chlavik
2004-12-05 20:15
2005.01.23
Процесы в Windows ..


1-1105301899
Nevil.eXe
2005-01-09 23:18
2005.01.23
Прозрачность TEdit а...


1-1105606105
Leon1
2005-01-13 11:48
2005.01.23
Alignment


1-1105542768
race1
2005-01-12 18:12
2005.01.23
свойства