编辑器

修正双击打开 退出最大化问题
This commit is contained in:
JianjunLiu 2023-05-06 15:39:28 +08:00
parent d30fed5625
commit be462063d4
7 changed files with 263 additions and 26 deletions

View File

@ -106,8 +106,15 @@ type TRunEditerForm = class(TEditerForm)
begin begin
OpenAndGotoFileByName(n); OpenAndGotoFileByName(n);
end 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 end {else
if e.wparam = 303 and e.lparam=10 then if e.wparam = 303 and e.lparam=10 then

View File

@ -2218,10 +2218,10 @@ type TDMainMenu = class(TDMenuBase)
begin begin
return GetMainMenuBitmapInfo(); return GetMainMenuBitmapInfo();
end end
function CheckParentWnd(Pwnd);override; {function CheckParentWnd(Pwnd);override;
begin begin
return (Pwnd is class(TVCForm)) ; return (Pwnd is class(TVCForm)) ;
end end }
function WndClass();override; function WndClass();override;
begin begin
@ -2527,7 +2527,8 @@ C6D53F7109130000000049454E44AE42608200";
function Create(AOwner);override; function Create(AOwner);override;
begin begin
inherited; inherited;
fiscontainerdcmp := false; //fiscontainerdcmp := false;
fiscontainerdcmp := true;
DefaultEvent := array( DefaultEvent := array(
"event":"onselchanged", "event":"onselchanged",
"name":"sel", "name":"sel",
@ -2613,8 +2614,8 @@ type TDListView = class(TDComponent)
function Create(AOwner);override; function Create(AOwner);override;
begin begin
inherited; inherited;
fiscontainerdcmp := false; //fiscontainerdcmp := false;
fiscontainerdcmp := false; fiscontainerdcmp := true;
DefaultEvent := array( DefaultEvent := array(
"event":"onselchanged", "event":"onselchanged",
"name":"sel", "name":"sel",
@ -2653,8 +2654,8 @@ type TDgridctl = class(TDComponent)
function Create(AOwner);override; function Create(AOwner);override;
begin begin
inherited; inherited;
fiscontainerdcmp := false; //fiscontainerdcmp := false;
fiscontainerdcmp := false; fiscontainerdcmp := true;
DefaultEvent := array( DefaultEvent := array(
"event":"ondrawcell", "event":"ondrawcell",
"name":"drawcell", "name":"drawcell",

View File

@ -824,6 +824,9 @@ type TPropGrid = class(TTSLDataGrid)
FCellEditers := array(); FCellEditers := array();
//OndblClick := nil; //OndblClick := nil;
FDesigner := AOwner; FDesigner := AOwner;
OnMouseWheel := function(o,e)begin
currentLeave();
end
end end
function Recycling();override; function Recycling();override;
begin begin
@ -1558,7 +1561,7 @@ type TGridCellNaturalEdit = class(TGridPropertyRender,TPropertyNatural)
{** {**
@explan(綱츠) 잼역긍서목綾 %% @explan(綱츠) 잼역긍서목綾 %%
**} **}
if not(FEdit is class(TEdit)) then exit; if not(FEdit is class(TPopEditCtrl)) then exit;
FEdit.text := ""; FEdit.text := "";
FEdit.visible := false; FEdit.visible := false;
inherited; inherited;

View File

@ -149,6 +149,10 @@ type tsgtkapi = class(tgtkapis)
return r; return r;
end end
end end
function IsZoomed(hd:pointer)
begin
return 0;
end
function GetWindowTextA(h,s,l); function GetWindowTextA(h,s,l);
begin begin
if not(h>0 or h<0) then return ; 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); cairo_arc(dc, 0, 0, rx, 0, 2 * 3.14);
if brc=0 then if brc=0 then
begin begin
cairo_set_source_rgb(dc,0,0,0); cairo_set_source_rgb(dc,0,0,0);
end else end else
begin begin
gtk_rgb_color_rgb(brc,rc,gc,bc); gtk_rgb_color_rgb(brc,rc,gc,bc);
@ -1564,27 +1568,240 @@ type tsgtkapi = class(tgtkapis)
end end
Function Chord(hdc :pointer;l:integer;t:integer;r:integer;b:integer;wid:integer;ht:integer):integer; Function Chord(hdc :pointer;l:integer;t:integer;r:integer;b:integer;wid:integer;ht:integer):integer;
begin 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 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 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 end
Function SetArcDirection(hdc :pointer;direct:integer):integer; Function SetArcDirection(dc :pointer;direct:integer):integer;
begin begin
if direct = 1 or direct = 2 then
begin
gtk_object_set_data(dc,"arcdirection",direct);
end
//AD_CLOCKWISE:=2;
//AD_COUNTERCLOCKWISE := 1;
end 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 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 end
Function Polygon(hdc :pointer;points:array of integer;n:integer):integer; Function Polygon(hdc :pointer;points:array of integer;n:integer):integer;
begin begin
end end
Function PolyBezier(hdc :pointer;points:array of integer;n:integer):integer; Function PolyBezier(dc :pointer;points:array of integer;n:integer):integer;
begin 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 end
Function SetPolyFillMode(hdc :pointer;md:integer):integer; Function SetPolyFillMode(hdc :pointer;md:integer):integer;
begin begin

View File

@ -2528,7 +2528,7 @@ type tcustomedit=class(TCustomControl)
begin begin
if FEditable then if FEditable then
begin begin
rc := ClientRect; rc := geteditrect();//ClientRect;
FEditable.ClientRect := rc; FEditable.ClientRect := rc;
end end
inherited; inherited;
@ -2595,6 +2595,10 @@ type tcustomedit=class(TCustomControl)
@param(onlimitlength)(integer)设置输入字符的长度%% @param(onlimitlength)(integer)设置输入字符的长度%%
**} **}
private private
function geteditrect();virtual;
begin
return ClientRect;
end
function getBorder(); function getBorder();
begin begin
if FEditable then return FEditable.Border; if FEditable then return FEditable.Border;

View File

@ -250,11 +250,13 @@ begin
begin begin
this.DoOnMessage(d); this.DoOnMessage(d);
end end
end end ;
sleep(1);
end else end else
begin begin
sleep(20); sleep(10);
end end
tslprocessmessages(false); //20230428添加tsl消息分发
end end
end end
type TArray = class type TArray = class

View File

@ -254,6 +254,8 @@ type twindowsapi = class()
function GetFocus():pointer;stdcall;external "User32.dll" name "GetFocus"; 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 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 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 IsWindowVisible(hd:pointer):integer;stdcall;external "User32.dll" name "IsWindowVisible";
function GetWindow(hd:pointer;cd:integer):pointer;stdcall;external "User32.dll" name "GetWindow"; 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"; //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 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 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 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 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 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"; 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";