2013-04-04 119 views
2

我有了这个代码,当我拖动MyThingThatDragsIt德尔福窗口失去焦点

procedure TMainForm.ApplicationMessage(var Msg: TMsg; var Handled: Boolean); 
var 
    ScreenPt : TPoint; 
    DragControl : TControl; 

begin 
    inherited; 
    if Msg.message = WM_LBUTTONDOWN then 
    begin 

    ScreenPt := ScreenToClient(Msg.pt); 
    DragControl := FindDragTarget(Msg.pt , false); 
    if Assigned(DragControl) and 
     ((DragControl = MyThingThatDragsIt) 
    ) then 
    begin 
     ReleaseCapture; 
     self.Perform(WM_SYSCOMMAND, SC_MOVE or $0002, 0); 
    end; 
    end 
end; 

这一工程确定,但是当我放手,我的计划已经失去了它的焦点移到我的主窗口我只需点击表格上的一次即可点击任何其他按钮。

任何想法这里有什么问题吗?我跟着steps from this question

+0

难道不是一个简单的SetFocus的调用后执行这样的伎俩? – 2013-04-04 21:42:05

+0

@UweRaabe是我徒劳地尝试的前40个VCL命令之一:) – 2013-04-04 21:52:41

回答

4

告诉你已经采取了消息的照顾VCL:

... 
    Perform(WM_SYSCOMMAND, SC_MOVE or $0002, 0); 
    Handled := True; 
    ...