Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При нажатии TAB фокус не перескакивает с одного контрола на др. [D7]


gdaujk ©   (2004-12-16 10:27:00) 

program MyProg;

uses
 Windows,
 Messages;

procedure CreateControls(Wnd: HWND);
begin
 InitCommonControls;

 Group1 := CreateWindow('button', 'Âðåìÿ äåéñòâèÿ',
                 WS_CHILD or WS_VISIBLE  or WS_TABSTOP
                       or WS_GROUP or BS_GROUPBOX,
                      7, 3, 176, 56,
                      Wnd, 0, hinstance, nil);

 hLab :=  CreateWindow('static', '×àñ',
                      WS_CHILD or WS_VISIBLE or SS_LEFT or
                      WS_GROUP,
                      15, 29, 19, 13,
                      Wnd, 1, hInstance, nil);

 hEd := CreateWindowEx(WS_EX_CLIENTEDGE ,'edit', nil,
                      WS_CHILD or WS_VISIBLE or WS_TABSTOP or
                      ES_LEFT or ES_READONLY,
                      43, 28, 36, 18,
                      Wnd, 2, hInstance, nil);

 hUD := CreateUpDownControl(WS_CHILD or WS_BORDER or
                      WS_VISIBLE or WS_TABSTOP or UDS_MY,
                      0, 0, 0, 0,
                      Wnd, 3, hInstance,
                      hEd, 23, 0, 0);

 mLab := CreateWindow('static', 'ìèíóòà',
                      WS_CHILD or WS_VISIBLE or SS_LEFT or
                      WS_GROUP,
                      90, 29, 36, 13,
                      Wnd, 4, hInstance, nil);

 mEd := CreateWindowEx(WS_EX_CLIENTEDGE ,'edit', nil,
                      WS_CHILD or WS_VISIBLE or WS_TABSTOP or
                      ES_LEFT or ES_READONLY,
                      135, 28, 36, 18,
                      Wnd, 5, hInstance, nil);

 mUD := CreateUpDownControl(WS_CHILD or WS_BORDER or WS_VISIBLE or WS_TABSTOP or UDS_MY,
                      0, 0, 0, 0,
                      Wnd, 6, hInstance,
                      mEd, 59, 0, 0);
end;
 

{WinMain}

function WinMain(aWND: HWND; aMsg: Integer; aWParam: WPARAM; aLParam: LPARAM): LRESULT; stdcall;

 procedure RadioClick(Off: Boolean);
 begin
   if HiWord(awParam) = BN_CLICKED then
   begin
     EnableWindow(MusBtn, not Off);
     MyOpt.ShutDown := Off;
   end;
 end;

begin
 Result:=0;
 case aMsg of
   WM_CREATE:
     begin
       CreateControls(aWND);
     end;
   WM_COMMAND :
     begin
     case LoWord(awParam) of
       10: RadioClick(True);
       11: RadioClick(False);
       end;
     end;

   MM_MCINOTIFY:
     begin
       CloseMCI(aWnd);
       if MyOpt.CloseAfterStop and Play
          then PostMessage (aWnd , WM_CLOSE, 0, 0);
     end;

   
   WM_DESTROY{WM_CLOSE}:
     begin
       DeleteObject(MainFont);
       DelateSysTrayPlease;
       PostQuitMessage(0);
       Result:=0;
       exit;
     end;
 else
   Result := DefWindowProc(aWND, aMsg, aWParam, aLParam);
 end;
end;

begin
 WC.style := CS_HREDRAW or CS_VREDRAW;
 WC.lpfnWndProc := @WinMain;
 WC.cbClsExtra := 0;
 WC.cbWndExtra := 0;
 WC.hInstance := HInstance;
 WC.hIcon := LoadIcon(hInstance, PChar('MAINICON'));
 WC.hCursor := LoadCursor(0, IDC_ARROW);
 WC.hbrBackground := COLOR_BTNFACE + 1;
 WC.lpszMenuName := nil;
 WC.lpszClassName := ClassName;

 RegisterClass(WC);

 MainWND := CreateWindowEx(WS_EX_CONTROLPARENT ,ClassName,
                         Name,
                         WS_CAPTION or WS_SYSMENU or   WS_MINIMIZEBOX,
                         CenterX(291),
                         CenterY(198),
                         307, 197,
                         0, 0, hInstance, nil);

 SysMenu := GetSystemMenu(MainWND, False);
 DeleteMenu(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
 DeleteMenu(SysMenu, SC_SIZE, MF_BYCOMMAND);

 GetOptions;

 if not (LoadWithParam and MyOpt.Minimize)
   then ShowWindow(MainWnd, 1);

 UpdateWindow(MainWnd);

 while(GetMessage(Mes, 0, 0, 0)) do
 begin
   TranslateMessage(Mes);
   DispatchMessage(Mes);
 end;
end.


SVM (Perm)   (2004-12-16 13:25:00) [1]

Смотри IsDialogMessage...


DVM   (2004-12-16 10:56:00) [2]


> Ну, а как тогда сделать, чтоб фокус всё же менялся ???

В цикл выборки сообщений поставить проверку и передачу фокуса. Или у каждого контрола в его оконной процедуре.


gdaujk   (2004-12-16 10:43:00) [3]

Ну, а как тогда сделать, чтоб фокус всё же менялся ???


DVM   (2004-12-16 10:39:00) [4]


> gdaujk ©   (16.12.04 10:34) [1]


> WM_KEYUP:
>      begin
>      if awParam = VK_TAB
>          then SetFocus(offRadio) ;
>      end;

Если это написано в главной оконной процедуре, то с какой стати это должно работать?


gdaujk   (2004-12-16 10:38:00) [5]

offRadio := CreateWindow('button', 'Âûêëþ÷èòü êîìïüþòåð',
                     WS_CHILD or WS_VISIBLE  or WS_TABSTOP  or BS_AUTORADIOBUTTON,
                      15, 92, 134, 18,
                      Wnd, 10, hinstance, nil);


gdaujk   (2004-12-16 10:34:00) [6]

WM_KEYUP:
     begin
     if awParam = VK_TAB
         then SetFocus(offRadio) ;
     end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо