▼ snail3さん
> マウスイベントですが、コンポーネント本体でクリックした時は
> 反応しますが、このコンポーネントに載せた子コンポーネントで
> クリックすると補足することができませんでした。子供でクリック
> した場合も横取りする方法はないでしょうか。
WM_PARENTNOTIFYをとっつかまえると、子コントロールのマウスダウンだけなら
補足できるようです。
手抜きかつDelphi5での記述ですが・・・
とりあえずTScrollBoxと位置を表示するためのTLabelを1個を配置。
それ以外は、TPanelとかTEdit,TConboBox,TListBox等を、TScrollBox上に適当に配置。
type
TScrollBox=class(Forms.TScrollBox)
private
procedure WMParentNotify(var Message: TWMParentNotify); message WM_PARENTNOTIFY;
public
HintLabel :TLabel;
end;
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Label1: TLabel;
//コンポーネントいろいろ
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
procedure TScrollBox.WMParentNotify(var Message: TWMParentNotify);
begin
if HintLabel <> nil then begin
case Message.Event of
WM_LBUTTONDOWN: HintLabel.Caption := 'L: X=' + IntToStr(Message.XPos) + ' Y=' + IntToStr(Message.YPos);
WM_MBUTTONDOWN: HintLabel.Caption := 'M: X=' + IntToStr(Message.XPos) + ' Y=' + IntToStr(Message.YPos);
WM_RBUTTONDOWN: HintLabel.Caption := 'R: X=' + IntToStr(Message.XPos) + ' Y=' + IntToStr(Message.YPos);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ScrollBox1.HintLabel := Label1;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ScrollBox1.HintLabel := nil;
end;
|