Delphi ilovada "Ctrl Tab" va "Ctrl Shift Tab" ni oladi

Ilovamda men Google Chrome kabi o'z komponentlarimdan foydalanaman. Har bir yorliq tadqiqotchi komponentiga havola qiladi, shuning uchun u asosan yorliqli brauzer/tadqiqotchidir. Muammo shundaki, men CTRL+ TAB va CTRL+SHIFT +TAB dan foydalanmoqchiman. kbd> yorliqlarni navigatsiya qilish uchun. Forms.KeyPreview sozlamalari yordam bermaydi, chunki yorliq tugmasi maxsus kalitdir. Qanday qilib men oson yo'l bilan navigatsiya istagimga yordam qo'shishim mumkin. Agar kerak bo'lsa, komponentni o'zgartirishim mumkin. Agar bu yordam bersa, mening komponentim TCustomControl-ga asoslangan.

Hurmat bilan Roy M Klever


person Roy M Klever    schedule 22.02.2010    source manba


Javoblar (2)


Yorliq, o'q tugmalari kabi, kiritish va qochish dialog oynasida navigatsiyada ishlatiladigan maxsus tugmalardir. Boshqaruv ushbu kalitlarni olishni istasa, u buni WM_GETDLGCODE. Quyidagi kod kabi. Keyin Tab tugmasi bosilganda KeyDown hodisasini olasiz.

procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;

procedure TYourControl.WMGetDlgCode(var Msg: TWMGetDlgCode);
begin
 inherited;
 Msg.Result := Msg.Result or DLGC_WANTTAB;
end;

Shuningdek, bu yerga va bu yerda.

PS: Va boshqaruvingiz diqqat markazida ekanligiga ishonch hosil qiling, aks holda siz hech narsa olmaysiz (agar CanFocus keyin SetFocus; MouseDown-da).

person Lars Truijens    schedule 22.02.2010
comment
Xo'sh, bu menga to'g'ri yo'ldan borishga yordam berdi ... Mening tadqiqotchimda ba'zi bir sharoitlarda kalitlarning ishlashini to'xtatadigan ba'zi kod bor edi. Endi menda u ishlaydi. Rahmat! - person Roy M Klever; 23.02.2010

Siz Ctrl + Tab va Ctrl + Shift + Yorliq.

procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;

ushbu namunani tekshiring

procedure TYourComponent.CMDialogKey(var Message: TCMDialogKey);
begin
  if (Focused) and (Message.CharCode = VK_TAB) and (GetKeyState(VK_CONTROL) < 0) then
  begin
   if GetKeyState(VK_SHIFT) then
    GoBackwardPage()//you must write this method
   else
    GoForwardPage()//you must write this method
    Message.Result := 1;
  end
   else
    inherited;
end;
person RRUZ    schedule 22.02.2010
comment
Deyarli hozir buni qanday qilaman :) Rahmat! - person Roy M Klever; 23.02.2010