当我右键单击TPaintBox时,我需要能够弹出一个TForm(表单的内容将取决于我点击的位置)。如果用户点击其他任何地方,我希望原始表单被销毁(或至少消失)。如果新的点击恰好是另一个右键单击TPaintBox,则必须出现一个新的TForm。基本上,它是一个右键单击属性查询类型操作,即右键单击以获取TPaintBox区域的属性。
这似乎比我想象的更难。当使用OnDeactivate事件停用pop时,我首先尝试销毁弹出窗体。这导致弹出窗口没有显示。
答案 0 :(得分:4)
这是我的解决方案(测试和工作)......
type
TForm1 = class(TForm)
...
private
ContextForm: TfrmContext;
end;
...
implementation
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ContextForm <> nil then
FreeAndNil(ContextForm);
if Button = mbRight then
begin
ContextForm := TfrmContext.Create(Application);
ContextForm.SetParentComponent(Application);
ContextForm.Left := Mouse.CursorPos.X;
ContextForm.Top := Mouse.CursorPos.Y;
ContextForm.Show;
end;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ContextForm <> nil then
FreeAndNil(ContextForm);
end;
在此演示中,右键单击Button1将创建“上下文表单”(这是一个TForm)并设置其位置,以便“上下文表单”的左上角正好位于鼠标光标所在的位置。
单击表单上的任何其他位置都会破坏上下文表单。
享受!