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

Вниз

Сообщения Windows.   Найти похожие ветки 

 
Drowsy   (2009-10-12 06:35) [0]

На форме расположены разные контролы и созданный компонент,

type
 TMyGraphPanel = class(TCustomPanel)
 private
     { Private declarations }
ToolBar: TToolBar;
MainBut1: TToolButton;
MainBut2: TToolButton;
AnotherBut: TToolButton;
DopBut: TToolButton;
TrBut: TToolButton;
PlusBut: TToolButton;
MinusBut: TToolButton;
ToolButton2: TToolButton;
ToolButton1: TToolButton;
ZoomBut: TToolButton;
pnLabels: TPanel;
L_CapX: TLabel;
L_X: TLabel;
L_CapY: TLabel;
L_Y: TLabel;
lbElems: TListBox;

 protected
   { Protected declarations }
 public
   { Public declarations }
constructor Create(AOwner:TComponent); override;
 published
   { Published declarations }
end;
procedure Register;

Как сделать так, чтобы после получения этой панелью фокуса ввода,
перехватывать все сообщения от клавиатуры, ведущие к изменению активного элемента (Tab, Shift-Tab, <-, -> )?


 
Leonid Troyanovsky ©   (2009-10-12 11:36) [1]


> Drowsy   (12.10.09 06:35)  

>  TMyGraphPanel = class(TCustomPanel)


type
 TMyGraphPanel = class(TPanel)
 private
   procedure CMChildKey(var Msg: TWMKey); message CM_CHILDKEY;
 end;

procedure TMyGraphPanel.CMChildKey;
begin
 inherited;
 if Msg.CharCode = .. then
end;

--
Regards, LVT.


 
Drowsy   (2009-10-12 13:16) [2]

procedure TMyGraphPanel.CMChildKey(var Msg: TWMKey);
begin
inherited;

case  Msg.CharCode of
  vk_Left,
  vk_Right,
  vk_Tab :
  begin
    MessageDlg(" Msg.Msg = " + IntToStr(Msg.Msg), mtInformation, [mbOK], 0);
    Msg.Msg := 0;
    Msg.CharCode := VK_CANCEL;
  end;
 end;

end;

Всё равно фокус ввода переходит на другой коипонент.
(даже если inhtrited;  убрать)


 
Leonid Troyanovsky ©   (2009-10-12 18:04) [3]


> Drowsy   (12.10.09 13:16) [2]

>     MessageDlg(" Msg.Msg = " + IntToStr(Msg.Msg), mtInformation,
>  [mbOK], 0);

Так делать не стоит, бо последующие сообщения
попадут уже в другое окно.
Если это для отладки, то лучше OutputDebugString и
смотреть в EventLog (Ctrl+Alt+V).

Кроме CM_ сообщений(component message), которые
генерируются VCL, есть еще и генерируемые OS, f.e.,
WM_GETDLGCODE, а, невызов inherited "проглотит" только CM_.

Пример обработки CM_CHILDKEY можно посмотреть в юните (pas)
dbcgrids.TDBCtrlGrid.

--
Regards, LVT.



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.015 c
9-1183546787
Жидкое стекло
2007-07-04 14:59
2009.11.22
Эффект горячего воздуха


15-1253910608
Юрий
2009-09-26 00:30
2009.11.22
С днем рождения ! 26 сентября 2009 суббота


11-1183648227
ElectriC
2007-07-05 19:10
2009.11.22
Что скажете...


2-1254829215
den49
2009-10-06 15:40
2009.11.22
Работа с потоками


15-1253611795
XcCCC
2009-09-22 13:29
2009.11.22
Сопло принтерное сделать