编辑器

修正双击打开 退出最大化问题
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
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

View File

@ -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",

View File

@ -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;

View File

@ -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,27 +1568,240 @@ 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

View File

@ -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)设置输入字符的长度%%
**}
private
function geteditrect();virtual;
begin
return ClientRect;
end
function getBorder();
begin
if FEditable then return FEditable.Border;

View File

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

View File

@ -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";