![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сообщения 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.