编辑器

修正双击打开 退出最大化问题
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
+228 -11
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,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
+6 -2
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;
@@ -2684,7 +2688,7 @@ type tcustompassword = class(tcustomedit)
end
published
property PassWordChar:string read getPassWordChar write SetPassWordChar;
end
type tthreeEntry=class(TCustomControl)
private
+4 -2
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
+4 -1
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";