Текущий архив: 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