From be462063d4b76f45b01fe2de257e89080cf25594 Mon Sep 17 00:00:00 2001 From: JianjunLiu Date: Sat, 6 May 2023 15:39:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正双击打开 退出最大化问题 --- designer/gettslediterstart.tsf | 11 +- designer/utslvcldcomponents.tsf | 15 +- designer/utslvcldpropertytypes.tsf | 5 +- funcext/tvclib/ugtkinterface.tsf | 239 +++++++++++++++++++++++++-- funcext/tvclib/utslvclstdctl.tsf | 8 +- funcext/tvclib/uvclthreadworker.tsf | 6 +- funcext/tvclib/uwindowsinterface.tsf | 5 +- 7 files changed, 263 insertions(+), 26 deletions(-) diff --git a/designer/gettslediterstart.tsf b/designer/gettslediterstart.tsf index 681ed92..3b52aec 100644 --- a/designer/gettslediterstart.tsf +++ b/designer/gettslediterstart.tsf @@ -106,8 +106,15 @@ type TRunEditerForm = class(TEditerForm) begin OpenAndGotoFileByName(n); end - _wapi.ShowWindow(self.Handle, SW_SHOWNORMAL);//ȷʾ - _Wapi.ForegroundWindow(self.Handle);//PostMessageA(self.Handle,WM_USER,303,10);//ŵǰ + // + h := self.Handle; + if _wapi.IsZoomed(h) then + begin + _wapi.ShowWindow(h,SW_MAXIMIZE); + end else + _wapi.ShowWindow(h, SW_SHOWNORMAL);//ȷʾ + //_wapi.ShowWindow(self.Handle, SW_SHOWNORMAL);//ȷʾ + _Wapi.ForegroundWindow(h);//PostMessageA(self.Handle,WM_USER,303,10);//ŵǰ end {else if e.wparam = 303 and e.lparam=10 then diff --git a/designer/utslvcldcomponents.tsf b/designer/utslvcldcomponents.tsf index ca95338..63a1885 100644 --- a/designer/utslvcldcomponents.tsf +++ b/designer/utslvcldcomponents.tsf @@ -2218,10 +2218,10 @@ type TDMainMenu = class(TDMenuBase) begin return GetMainMenuBitmapInfo(); end - function CheckParentWnd(Pwnd);override; + {function CheckParentWnd(Pwnd);override; begin return (Pwnd is class(TVCForm)) ; - end + end } function WndClass();override; begin @@ -2527,7 +2527,8 @@ C6D53F7109130000000049454E44AE42608200"; function Create(AOwner);override; begin inherited; - fiscontainerdcmp := false; + //fiscontainerdcmp := false; + fiscontainerdcmp := true; DefaultEvent := array( "event":"onselchanged", "name":"sel", @@ -2613,8 +2614,8 @@ type TDListView = class(TDComponent) function Create(AOwner);override; begin inherited; - fiscontainerdcmp := false; - fiscontainerdcmp := false; + //fiscontainerdcmp := false; + fiscontainerdcmp := true; DefaultEvent := array( "event":"onselchanged", "name":"sel", @@ -2653,8 +2654,8 @@ type TDgridctl = class(TDComponent) function Create(AOwner);override; begin inherited; - fiscontainerdcmp := false; - fiscontainerdcmp := false; + //fiscontainerdcmp := false; + fiscontainerdcmp := true; DefaultEvent := array( "event":"ondrawcell", "name":"drawcell", diff --git a/designer/utslvcldpropertytypes.tsf b/designer/utslvcldpropertytypes.tsf index 918112f..6002d8a 100644 --- a/designer/utslvcldpropertytypes.tsf +++ b/designer/utslvcldpropertytypes.tsf @@ -824,6 +824,9 @@ type TPropGrid = class(TTSLDataGrid) FCellEditers := array(); //OndblClick := nil; FDesigner := AOwner; + OnMouseWheel := function(o,e)begin + currentLeave(); + end end function Recycling();override; begin @@ -1558,7 +1561,7 @@ type TGridCellNaturalEdit = class(TGridPropertyRender,TPropertyNatural) {** @explan(˵) 뿪༭ %% **} - if not(FEdit is class(TEdit)) then exit; + if not(FEdit is class(TPopEditCtrl)) then exit; FEdit.text := ""; FEdit.visible := false; inherited; diff --git a/funcext/tvclib/ugtkinterface.tsf b/funcext/tvclib/ugtkinterface.tsf index ab587d3..fa19a62 100644 --- a/funcext/tvclib/ugtkinterface.tsf +++ b/funcext/tvclib/ugtkinterface.tsf @@ -149,6 +149,10 @@ type tsgtkapi = class(tgtkapis) return r; end end + function IsZoomed(hd:pointer) + begin + return 0; + end function GetWindowTextA(h,s,l); begin if not(h>0 or h<0) then return ; @@ -1516,7 +1520,7 @@ type tsgtkapi = class(tgtkapis) cairo_arc(dc, 0, 0, rx, 0, 2 * 3.14); if brc=0 then begin - cairo_set_source_rgb(dc,0,0,0); + cairo_set_source_rgb(dc,0,0,0); end else begin gtk_rgb_color_rgb(brc,rc,gc,bc); @@ -1564,31 +1568,244 @@ type tsgtkapi = class(tgtkapis) end Function Chord(hdc :pointer;l:integer;t:integer;r:integer;b:integer;wid:integer;ht:integer):integer; begin - + x := gtk_object_get_data(dc,"viewport.x"); + y := gtk_object_get_data(dc,"viewport.y"); + pc := gtk_object_get_data(dc,"pen.color"); + pw := gtk_object_get_data(dc,"pen.width"); + brc := gtk_object_get_data(dc,"brush.color"); + direct := gtk_object_get_data(dc,"arcdirection"); + if pw>0 then cairo_set_line_width(dc,pw); + else cairo_set_line_width(dc,1); + mx := (l+r)/2+x; + my := (b+t)/2+y; + cairo_translate(dc,mx,my); + rx := (r-l)/2; + ry := (b-t)/2; + cairo_scale(dc,1,ry/rx); + cairo_applay_pen_style(dc); + xx1 := nXRadial1-mx; + yy1 := (nYRadial1-my); + xx2 := nXRadial2-mx; + yy2 := (nYRadial2-my); + arg1 := getargbyxy(xx1,yy1); + arg2 := getargbyxy(xx2,yy2); + if direct=2 then + begin + cairo_arc(dc, 0, 0, rx, arg1, arg2); + end + else + begin + cairo_arc(dc, 0, 0, rx, arg2, arg1); + end + + if brc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(brc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + cairo_move_to(dc,cos(arg1)*rx,sin(arg1)*rx); + cairo_line_to(dc,cos(arg2)*rx,sin(arg2)*rx); + cairo_fill_preserve(dc); + if pc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(pc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + + cairo_stroke(dc); + cairo_scale(dc,1,rx/ry); + cairo_translate(dc,0-mx,0-my); end - Function Pie(hdc :pointer;nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer; + Function Pie(dc :pointer;l:integer;t:integer;r:integer;b:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer; begin - + x := gtk_object_get_data(dc,"viewport.x"); + y := gtk_object_get_data(dc,"viewport.y"); + pc := gtk_object_get_data(dc,"pen.color"); + pw := gtk_object_get_data(dc,"pen.width"); + brc := gtk_object_get_data(dc,"brush.color"); + direct := gtk_object_get_data(dc,"arcdirection"); + if pw>0 then cairo_set_line_width(dc,pw); + else cairo_set_line_width(dc,1); + mx := (l+r)/2+x; + my := (b+t)/2+y; + cairo_translate(dc,mx,my); + rx := (r-l)/2; + ry := (b-t)/2; + cairo_scale(dc,1,ry/rx); + cairo_applay_pen_style(dc); + xx1 := nXRadial1-mx; + yy1 := (nYRadial1-my); + xx2 := nXRadial2-mx; + yy2 := (nYRadial2-my); + arg1 := getargbyxy(xx1,yy1); + arg2 := getargbyxy(xx2,yy2); + if direct=2 then + begin + cairo_arc(dc, 0, 0, rx, arg1, arg2); + end + else + begin + cairo_arc(dc, 0, 0, rx, arg2, arg1); + end + + if brc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(brc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + cairo_move_to(dc,cos(arg1)*rx,sin(arg1)*rx); + cairo_line_to(dc,0,0); + cairo_line_to(dc,cos(arg2)*rx,sin(arg2)*rx); + cairo_fill_preserve(dc); + if pc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(pc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + + cairo_stroke(dc); + cairo_scale(dc,1,rx/ry); + cairo_translate(dc,0-mx,0-my); end - Function SetArcDirection(hdc :pointer;direct:integer):integer; + Function SetArcDirection(dc :pointer;direct:integer):integer; begin - + if direct = 1 or direct = 2 then + begin + gtk_object_set_data(dc,"arcdirection",direct); + end + //AD_CLOCKWISE:=2; + //AD_COUNTERCLOCKWISE := 1; end - Function Arc(hdc :pointer;nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer; + private + function getargbyxy(x,y_); begin - + y := y_; + pi := pi(); + if x=0 and y>=0 then + begin + + return pi/2; + end + if x=0 and y<=0 then + begin + return pi*3/2; + end + if x>=0 and y>=0 then + begin + ph := 1; + end else + if x<=0 and y>=0 then + begin + ph := 2; + end else + if x<=0 and y<=0 then + begin + ph := 3; + end else + if x>=0 and y<=0 then + begin + ph := 4; + end + arg := arctan(y/x); + if ph=2 or ph = 3 then arg +=pi; + return arg; + end + public + //Function Arc(hdc :pointer;nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer; + Function Arc(dc :pointer;l:integer;t:integer;r:integer;b:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer; + begin + x := gtk_object_get_data(dc,"viewport.x"); + y := gtk_object_get_data(dc,"viewport.y"); + pc := gtk_object_get_data(dc,"pen.color"); + pw := gtk_object_get_data(dc,"pen.width"); + //brc := gtk_object_get_data(dc,"brush.color"); + direct := gtk_object_get_data(dc,"arcdirection"); + if pw>0 then cairo_set_line_width(dc,pw); + else cairo_set_line_width(dc,1); + mx := (l+r)/2+x; + my := (b+t)/2+y; + cairo_translate(dc,mx,my); + rx := (r-l)/2; + ry := (b-t)/2; + cairo_scale(dc,1,ry/rx); + cairo_applay_pen_style(dc); + xx1 := nXRadial1-mx; + yy1 := (nYRadial1-my); + xx2 := nXRadial2-mx; + yy2 := (nYRadial2-my); + arg1 := getargbyxy(xx1,yy1); + arg2 := getargbyxy(xx2,yy2); + if direct=2 then + begin + cairo_arc(dc, 0, 0, rx, arg1, arg2); + end + else + begin + cairo_arc(dc, 0, 0, rx, arg2, arg1); + end + {if brc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(brc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + cairo_fill_preserve(dc); } + if pc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(pc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + cairo_stroke(dc); + cairo_scale(dc,1,rx/ry); + cairo_translate(dc,0-mx,0-my); end Function Polygon(hdc :pointer;points:array of integer;n:integer):integer; begin end - Function PolyBezier(hdc :pointer;points:array of integer;n:integer):integer; + Function PolyBezier(dc :pointer;points:array of integer;n:integer):integer; begin - + if length(PolyBezier)<6 then return 0; + x := gtk_object_get_data(dc,"viewport.x"); + y := gtk_object_get_data(dc,"viewport.y"); + pc := gtk_object_get_data(dc,"pen.color"); + pw := gtk_object_get_data(dc,"pen.width"); + if pw>0 then cairo_set_line_width(dc,pw); + else cairo_set_line_width(dc,1); + if pc=0 then + begin + cairo_set_source_rgb(dc,0,0,0); + end else + begin + gtk_rgb_color_rgb(pc,rc,gc,bc); + cairo_set_source_rgb(dc,rc,gc,bc); + end + cairo_move_to(dc,points[0]+x,Points[1]+y); + cairo_applay_pen_style(dc); + cairo_curve_to(dc,points[0],points[1],points[2],points[3],points[4],points[5]); + cairo_stroke(dc); + return 1; end Function SetPolyFillMode(hdc :pointer;md:integer):integer; begin - + end Function Polyline(dc :pointer;points:array of integer;n:integer):integer; begin diff --git a/funcext/tvclib/utslvclstdctl.tsf b/funcext/tvclib/utslvclstdctl.tsf index a771882..273128b 100644 --- a/funcext/tvclib/utslvclstdctl.tsf +++ b/funcext/tvclib/utslvclstdctl.tsf @@ -2528,7 +2528,7 @@ type tcustomedit=class(TCustomControl) begin if FEditable then begin - rc := ClientRect; + rc := geteditrect();//ClientRect; FEditable.ClientRect := rc; end inherited; @@ -2595,6 +2595,10 @@ type tcustomedit=class(TCustomControl) @param(onlimitlength)(integer)ַij%% **} private + function geteditrect();virtual; + begin + return ClientRect; + end function getBorder(); begin if FEditable then return FEditable.Border; @@ -2684,7 +2688,7 @@ type tcustompassword = class(tcustomedit) end published property PassWordChar:string read getPassWordChar write SetPassWordChar; - + end type tthreeEntry=class(TCustomControl) private diff --git a/funcext/tvclib/uvclthreadworker.tsf b/funcext/tvclib/uvclthreadworker.tsf index a6b5a78..9bfed8c 100644 --- a/funcext/tvclib/uvclthreadworker.tsf +++ b/funcext/tvclib/uvclthreadworker.tsf @@ -250,11 +250,13 @@ begin begin this.DoOnMessage(d); end - end + end ; + sleep(1); end else begin - sleep(20); + sleep(10); end + tslprocessmessages(false); //20230428tslϢַ end end type TArray = class diff --git a/funcext/tvclib/uwindowsinterface.tsf b/funcext/tvclib/uwindowsinterface.tsf index c6b18cb..7aa2a17 100644 --- a/funcext/tvclib/uwindowsinterface.tsf +++ b/funcext/tvclib/uwindowsinterface.tsf @@ -254,6 +254,8 @@ type twindowsapi = class() function GetFocus():pointer;stdcall;external "User32.dll" name "GetFocus"; function SetLayeredWindowAttributes(hwnd:pointer;crKey:integer;bAlpha:byte;dwFlags:integer):integer;stdcall;external "User32.dll" name "SetLayeredWindowAttributes"; function IsWindow(hd:pointer):integer;stdcall;external "User32.dll" name "IsWindow"; + function IsZoomed(hd:pointer):integer;stdcall;external "User32.dll" name "IsZoomed"; + function IsIconic(hd:pointer):integer;stdcall;external "User32.dll" name "IsIconic"; function IsWindowVisible(hd:pointer):integer;stdcall;external "User32.dll" name "IsWindowVisible"; function GetWindow(hd:pointer;cd:integer):pointer;stdcall;external "User32.dll" name "GetWindow"; //function GetNextWindow(hd:pointer;cd:integer):pointer;stdcall;external "User32.dll" name "GetNextWindow"; @@ -516,7 +518,8 @@ type twindowsapi = class() Function Rectangle(hdc :pointer;l:integer;t:integer;r:integer;b:integer):integer;stdcall;external "Gdi32.dll" name "Rectangle"; Function Ellipse(hdc :pointer;l:integer;t:integer;r:integer;b:integer):integer;stdcall;external "Gdi32.dll" name "Ellipse"; Function RoundRect(hdc :pointer;l:integer;t:integer;r:integer;b:integer;wid:integer;ht:integer):integer;stdcall;external "Gdi32.dll" name "RoundRect"; - Function Chord(hdc :pointer;l:integer;t:integer;r:integer;b:integer;wid:integer;ht:integer):integer;stdcall;external "Gdi32.dll" name "Chord"; + //Function Chord(hdc :pointer;l:integer;t:integer;r:integer;b:integer;wid:integer;ht:integer):integer;stdcall;external "Gdi32.dll" name "Chord"; + Function Chord(hdc :pointer;nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer;stdcall;external "Gdi32.dll" name "Chord"; Function Pie(hdc :pointer;nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer;stdcall;external "Gdi32.dll" name "Pie"; Function SetArcDirection(hdc :pointer;direct:integer):integer;stdcall;external "Gdi32.dll" name "SetArcDirection"; Function Arc(hdc :pointer;nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer;nXRadial1:integer;nYRadial1:integer;nXRadial2:integer;nYRadial2:integer):integer;stdcall;external "Gdi32.dll" name "Arc";