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

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

Сообщения Windows. [D6, XP]


Drowsy ©   (2009-10-12 06:35:00) 

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

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 18:04:00) [1]


> 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.


Drowsy   (2009-10-12 13:16:00) [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 11:36:00) [3]


> 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.


Наверх

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