From 1a1052169d400202bfd3e89ae1ceb6c5155fde6d Mon Sep 17 00:00:00 2001 From: JianjunLiu Date: Wed, 14 Dec 2022 11:08:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 浼樺寲 --- designer/tslvcldesigner.tsf | 12 ++++++++++-- designer/udesignerproject.tsf | 11 +++++++++++ funcext/tvclib/twincontrol.tsf | 7 +++++++ funcext/tvclib/utslvclstdctl.tsf | 26 ++++++++++++++++++++++++-- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/designer/tslvcldesigner.tsf b/designer/tslvcldesigner.tsf index f63ad09..9f8fcca 100644 --- a/designer/tslvcldesigner.tsf +++ b/designer/tslvcldesigner.tsf @@ -645,6 +645,12 @@ type TVclDesigner = class(tvcform) par := FCurrentNode.Component.Cwnd; r := FComponentCreater.ComponentCreater(FCurrentNode,FCurrentNode.Component.Cwnd); if not r then exit; + npar := par; + while not(npar.WsPopUp) do + begin + npar := par.parent; + end + FProjectManager.hiddeneditor(npar.BoundsRect);//此处隐藏编辑器 r.CreateName(); FVariableSelecter.additem(r); BindCwndMessage(r.Cwnd); @@ -830,19 +836,21 @@ type TVclDesigner = class(tvcform) if FComponentCreater is class(TDRootComponent) then begin FCurrentNode := (tr.RootItem.items)[0]; - if not FCurrentNode then exit; + if not FCurrentNode then return FComponentCreater := nil; O1 := FCurrentNode.Component.Cwnd; - if not o1 then exit; + if not o1 then return FComponentCreater := nil; end else o1 := o; xy := array(0,0); _wapi.GetCursorPos(xy); FCurrentClikPos := o.ScreenToClient(xy[0],xy[1]); //FCurrentClikPos := array(e.lolparam,e.hilparam);//o1.screentoclient(e.lolparam,e.hilparam); r := CreateComponent(); + FComponentCreater := nil; if not r then return MessageBoxA("控件放置位置不兼容!","提示",0,self); o1 := r.Cwnd; o1.setpublish("left",o1.left,nil); o1.setpublish("top",o1.top,nil); + end return ; end diff --git a/designer/udesignerproject.tsf b/designer/udesignerproject.tsf index b3aa4b1..5a8ee04 100644 --- a/designer/udesignerproject.tsf +++ b/designer/udesignerproject.tsf @@ -699,6 +699,17 @@ type TProjectView = class(TVCForm) // FTslEditer.Show(SW_SHOWNOACTIVATE); // _wapi.bringWindowToTop(FTslEditer.Handle); end + function hiddeneditor(rc); + begin + if FTslEditer.visible then + begin + if ifarray(rc) then + begin + if not(intersectrect(rc,FTslEditer.BoundsRect)) then return; + end + FTslEditer.visible := false; + end + end function ShowCurrentFormCode(); begin if FCurrentOpend then r := FCurrentOpend.gettsfname(); diff --git a/funcext/tvclib/twincontrol.tsf b/funcext/tvclib/twincontrol.tsf index 4184405..9c4fc5e 100644 --- a/funcext/tvclib/twincontrol.tsf +++ b/funcext/tvclib/twincontrol.tsf @@ -295,6 +295,13 @@ type TWinControl = class(tcontrol) UpdateControlState(); end protected + function SetParentFont(v:bool);override; + begin + if inherited then + begin + InvalidateRect(nil,false); + end + end function SetImageList(v); begin if FImageList=v then exit; diff --git a/funcext/tvclib/utslvclstdctl.tsf b/funcext/tvclib/utslvclstdctl.tsf index a1d1d19..4e10aab 100644 --- a/funcext/tvclib/utslvclstdctl.tsf +++ b/funcext/tvclib/utslvclstdctl.tsf @@ -330,7 +330,8 @@ type tcustombtn = class(TCustomControl) // function Create(aowner); begin inherited; - + fbtntimer := new TCustomTimer(self); + fbtntimer.Ontimer := thisfunction(judgestate); end function AfterConstruction();override; begin @@ -382,6 +383,10 @@ type tcustombtn = class(TCustomControl) // begin Fbtnstate := true; InvalidateRect(nil,false); + {$ifdef linux} + {$else} + fbtntimer.start(); + {$endif} end inherited; end @@ -392,6 +397,10 @@ type tcustombtn = class(TCustomControl) // if Fbtnstate then begin Fbtnstate := 0; + {$ifdef linux} + {$else} + fbtntimer.stop(); + {$endif} InvalidateRect(nil,false); end end @@ -548,7 +557,7 @@ type tcustombtn = class(TCustomControl) // paintfocus(dc,r); dc.pen.style := PS_DOT; dc.pen.color := 16440490;//rgb(170,220,250); - drawrc(dc,r,4); + //drawrc(dc,r,4); dc.pen.style := bps; end private @@ -593,7 +602,20 @@ type tcustombtn = class(TCustomControl) // FtextPosition:=n; InvalidateRect(nil,false); end + function judgestate(o,e); + begin + xy := array(0,0); + _wapi.getcursorPos(xy); + nxy := ScreenToClient(xy[0],xy[1]); + if nxy[0]<0 or nxy[0]>Width or nxy[1]<0 or nxy[1]>Height then + begin + Fbtnstate := 0; + InvalidateRect(nil,false); + o.stop(); + end + end private + fbtntimer; FBtnfocused; FdoingClick; FpushLike;