界面库

更新动态库
This commit is contained in:
JianjunLiu
2023-09-19 10:50:13 +08:00
parent a414c5e926
commit e35938ec54
137 changed files with 129 additions and 32 deletions
+2 -22
View File
@@ -97,17 +97,7 @@ type TGdiplusflat=class()
end
function getfuncptrbyname(lib,n);
begin
case lib of
"libc":
begin
return getdlsymaddress("libc.so.6",n);
end
"gtk":
begin
end
else return getdlsymaddress("libgtk-3.so.0",n);
end
return unit(ugtkinterface).getfuncptrbyname(lib,n);
end
end
@@ -194,17 +184,7 @@ type TGdiplusflat=class()
end
class function getfuncptrbyname(lib,n);
begin
case lib of
"libc":
begin
return getdlsymaddress("libc.so.6",n);
end
"gtk":
begin
end
else return getdlsymaddress("libgtk-3.so.0",n);
end
return unit(ugtkinterface).getfuncptrbyname(lib,n);
end
class function GdipSaveImageToStream(image:pointer;var imgestr:string); //无用到
class function GdipLoadImageFromFile(filename:string;var image:pointer); //无用到
+116 -8
View File
@@ -10,6 +10,7 @@ function _gtkeventcall_();//gtk
function _gtkidledo_(); //gtk idle消息分发
function _gtk_add_time_msg_(h,m,w,l);
function GetGtkEventNameOrId(n); //gtk 事件名称
function getfuncptrbyname(lib,n);
type tgtkeventobject =class(tgtk_ctl_object) //gtk对象消息类(测试用)
function create(h);
begin
@@ -3386,19 +3387,19 @@ type tgtkapis = class() //gtk
flag := flag .& 7;
if flag = 0 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"确定",1,"b",0,"c",0);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"确定",1,"b",0,"c",0);
if r=1 then return 1;
return 0;
end else
if flag = 1 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"确定",1,U"取消",1,"c",0);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"确定",1,U"取消",1,"c",0);
if r=1 then return 1;
else return 2;
end else
if flag = 2 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"终止",1,U"重试",1,U"忽略",1);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"终止",1,U"重试",1,U"忽略",1);
case r of
1: return 3;
2: return 4;
@@ -3407,7 +3408,7 @@ type tgtkapis = class() //gtk
end else
if flag = 3 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"是",1,U"否",1,U"取消",1);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"是",1,U"否",1,U"取消",1);
case r of
1: return 6;
2: return 7;
@@ -3416,7 +3417,7 @@ type tgtkapis = class() //gtk
end else
if flag =4 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"是",1,U"否",1,"c",0);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"是",1,U"否",1,"c",0);
case r of
1: return 6;
2: return 7;
@@ -3426,7 +3427,7 @@ type tgtkapis = class() //gtk
end else
if flag = 5 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"重试",1,U"取消",1,U"取消",0);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"重试",1,U"取消",1,U"取消",0);
case r of
1: return 4;
else return 2;
@@ -3434,7 +3435,7 @@ type tgtkapis = class() //gtk
end else
if flag = 6 then
begin
r := tsl_gtk_messagebox_(TslStringToGtk(txt),TslStringToGtk(title),hd,U"取消",1,U"重试",1,U"继续",1);
r := tsl_gtk_messagebox_b(TslStringToGtk(txt),TslStringToGtk(title),hd,U"取消",1,U"重试",1,U"继续",1);
case r of
1: return 2;
2: return 4;
@@ -3443,6 +3444,87 @@ type tgtkapis = class() //gtk
end
end
end
function tsl_gtk_messagebox_b();
begin
global g_gtk_call_handler_manager;
mgnr := g_gtk_call_handler_manager;
pms := params;
dialog := gtk_window_new(0); //gtk_dialog_new();
gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE);
gtk_window_set_position(GTK_WINDOW(dialog),3); //GTK_WIN_POS_CENTER_ALWAYS
btns := new tslcstructureobj(MemoryAlignmentCalculate(array((0,"intptr",0),(1,"intptr",0),(2,"intptr",0),(3,"intptr",0))));
btns._setvalue_(0,dialog);
g_signal_connect_data(GTK_WIDGET(dialog),"destroy",mgnr.get(thisfunction( MessageBoxQuit)),btns._getptr_,0);
id := pms[0];
idt := pms[1];
pt := pms[2];
if(GTK_WIDGET(pt))then //GTK_IS_WINDOW
begin
if(not gtk_widget_is_toplevel(pt))then
begin
pt := gtk_widget_get_toplevel(pt);
end
gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(pt));
end
gtk_window_set_title(GTK_WINDOW(dialog),(idt));
gtk_container_set_border_width(GTK_CONTAINER(dialog),5);
gtk_widget_realize(dialog);
lbl := gtk_label_new((id));
gtk_misc_set_padding((lbl),10,10); //GTK_MISC
vbox := gtk_vbox_new(FALSE,5);
hbox := gtk_hbox_new(FALSE,10);
gtk_box_pack_start((vbox),lbl,TRUE,TRUE,0); //GTK_BOX
gtk_widget_show(lbl);
gtk_container_add(GTK_CONTAINER(dialog),GTK_WIDGET(vbox));
gtk_widget_show(vbox);
gtk_widget_show(hbox);
gtk_widget_show(dialog);
temp := 0;
for idx := 0 to 2 do
begin
temp := pms[3+idx * 2];
btn := gtk_button_new_with_label(temp);
btns._setvalue_(idx+1,btn);
temp := pms[3+idx * 2+1];
g_signal_connect_data(GTK_WIDGET(btn),"clicked",mgnr.get(thisfunction( MessageBoxQuit)),btns._getptr_,nil);
if temp then gtk_widget_show(btn);
gtk_box_pack_start((hbox),btn,TRUE,TRUE,0);
end
gtk_box_pack_start((vbox),hbox,TRUE,TRUE,0);
class(tUIglobalData).uigetdata("tuiapplication").run();
for idx := 3 downto 1 do
begin
if(0=(btns._getvalue_(idx)))then
begin
return idx;
end
end
return 0;
end
function MessageBoxQuit(w:pointer;dd: pointer);
begin
da := new tslcstructureobj(MemoryAlignmentCalculate(array((0,"intptr",0),(1,"intptr",0),(2,"intptr",0),(3,"intptr",0))),dd);
d := da._getdata_();
gtk_window_set_modal(GTK_WINDOW(d[0]),false);
gtk_window_set_transient_for( GTK_WINDOW(d[0]),0);
for i := 0 to 3 do
begin
if(w=d[i])then
begin
if i=0 then
begin
gtk_main_quit();
end else
begin
da._setvalue_(i,0);
g_signal_emit_by_name(d[0], "destroy");
end
break;
end
end
return 0;
end
function gtk_createwindowexa(dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nwidth,nheight,hwndparent,hmenu,hinstance,lpParam); //窗口构造类
begin
//array("tsui_application","tsui_window","tsluidesigner_a_a_1","tsui_form","tui_button","tui_edit","tui_tablecontrol32","tui_PageSheet","tui_monthcalendar","tui_datetimepicker")
@@ -4697,6 +4779,11 @@ type tgtkapis = class() //gtk
_f_ := static procedure(w:pointer;p:pointer);cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(w,p);
end
function gtk_window_get_transient_for(w:pointer);
begin
_f_ := static function(w:pointer;p:pointer);cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(w,p);
end
procedure gtk_window_get_size(wd:pointer;var h:integer;var w:integer);
begin
_f_ := static procedure(wd:pointer;var h:integer;var w:integer);cdecl;external getfuncptrbyname(0,functionname());
@@ -4707,6 +4794,11 @@ type tgtkapis = class() //gtk
_f_ := static procedure(w:pointer;ico:pointer);cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(w,ico);
end
procedure gtk_window_set_position(wd:pointer;ps:integer);
begin
_f_ := static procedure(w:pointer;p:integer);cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(wd,ps);
end
procedure gtk_window_set_resizable(p:pointer;f:integer);
begin
_f_ := static procedure(p:pointer;f:integer);cdecl;external getfuncptrbyname(0,functionname());
@@ -5079,6 +5171,17 @@ type tgtkapis = class() //gtk
//procedure gtk_progress_configure(pb:pointer;v:double;min:double;max:double);cdecl;external 'libgtk-3.so';
//////////////////////////////label/////////////////////////////////////
function gtk_label_new(t:string):pointer;
begin
_f_ := static function(t:string):pointer;cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(t);
end
procedure gtk_misc_set_padding (misc:pointer;x:integer;y:integer);
begin
_f_ := static procedure (misc:pointer;x:integer;y:integer);cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(misc,x,y);
end
// function gtk_label_new(t:string):pointer;cdecl;external 'libgtk-3.so';
// function gtk_label_get_text(w:pointer):string;cdecl;external 'libgtk-3.so';
// procedure gtk_label_set_text(l:pointer;t:string);cdecl;external 'libgtk-3.so';
@@ -5087,7 +5190,12 @@ type tgtkapis = class() //gtk
//////////////// button btn /////////////////
// function gtk_button_get_label(b:pointer):string;cdecl;external 'libgtk-3.so';
// function gtk_button_get_event_window(b:pointer):pointer;cdecl;external 'libgtk-3.so';
// function gtk_button_new_with_label(c:string):pointer;cdecl;external 'libgtk-3.so';
function gtk_button_new_with_label(c:string);
begin
_f_ := static function(c:string):pointer;cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(c);
end
// function gtk_button_new():pointer;cdecl;external 'libgtk-3.so';
// function gtk_check_button_new():pointer;cdecl;external 'libgtk-3.so';
// function gtk_check_button_new_with_label(l:string):pointer;cdecl;external 'libgtk-3.so';
+6 -1
View File
@@ -705,7 +705,11 @@ begin
if not g_windows_proc_handle then
begin
g_windows_proc_handle := makeinstance(thisfunction(tslvclproc));
end
end
try
SetProcessDpiAwareness(2); //shez dpi感知
except
end
end
function uninit();//卸载
begin
@@ -716,6 +720,7 @@ begin
g_windows_proc_handle := nil;
end
end
function SetProcessDpiAwareness(v:integer):pointer;stdcall; external "Shcore.dll" name "SetProcessDpiAwareness";
initialization
init();
finalization