parent
ae3f3b00f6
commit
8202de23c9
|
|
@ -364,6 +364,7 @@ type TProjectView = class(TVCForm) //
|
||||||
imgs := New TControlImageList(self);
|
imgs := New TControlImageList(self);
|
||||||
imgs.width := 24;
|
imgs.width := 24;
|
||||||
imgs.height := 24;
|
imgs.height := 24;
|
||||||
|
imgs.DrawBimpFirst := true;
|
||||||
EditToolBmps := array();
|
EditToolBmps := array();
|
||||||
for i,v in GetToolBtns() do
|
for i,v in GetToolBtns() do
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1745,6 +1745,7 @@ type TDesigImageList = class(TControlImageList)
|
||||||
inherited;
|
inherited;
|
||||||
Width := 24;
|
Width := 24;
|
||||||
Height := 24;
|
Height := 24;
|
||||||
|
DrawBimpFirst := true;
|
||||||
FIconMaps := array();
|
FIconMaps := array();
|
||||||
end
|
end
|
||||||
function RegisterDitem(item);virtual;
|
function RegisterDitem(item);virtual;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -2,7 +2,10 @@ function getdlsymaddress(lib,n); //
|
||||||
begin
|
begin
|
||||||
if not(ifstring(lib) and lib and n and ifstring(n)) then return 0;
|
if not(ifstring(lib) and lib and n and ifstring(n)) then return 0;
|
||||||
{$ifdef linux}
|
{$ifdef linux}
|
||||||
Return dlsym(dlopen(lib,0x101) ,n);
|
pso := dlopen(lib,0x101);
|
||||||
|
//if pso then
|
||||||
|
Return dlsym(pso ,n);
|
||||||
|
return 0;
|
||||||
{$endif}
|
{$endif}
|
||||||
Return GetProcAddress(LoadLibraryA(lib),n);
|
Return GetProcAddress(LoadLibraryA(lib),n);
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,11 @@ interface
|
||||||
function pcstruct(s,f);
|
function pcstruct(s,f);
|
||||||
function parserctokens(str);
|
function parserctokens(str);
|
||||||
function chtotslclass();
|
function chtotslclass();
|
||||||
|
function dealcppcomment(strs);
|
||||||
|
function csstotslarray(csstr,tname);
|
||||||
|
function csstotslarray2(csstr,iv);
|
||||||
|
function csstotslarray3(ret,iv);
|
||||||
|
function cstructtotslclass(data,name,fs);
|
||||||
(*
|
(*
|
||||||
//str := data();
|
//str := data();
|
||||||
//echo tostn(str22array(str)[:,3]);
|
//echo tostn(str22array(str)[:,3]);
|
||||||
|
|
@ -31,6 +36,7 @@ function chtotslclass();
|
||||||
begin
|
begin
|
||||||
parsergdifunction(parserctokens(getgdihdata()));
|
parsergdifunction(parserctokens(getgdihdata()));
|
||||||
end
|
end
|
||||||
|
|
||||||
function pcstruct(s,f);
|
function pcstruct(s,f);
|
||||||
begin
|
begin
|
||||||
{**
|
{**
|
||||||
|
|
@ -48,6 +54,279 @@ begin
|
||||||
**}
|
**}
|
||||||
return parsercstruct(parserctokens(f?lowercase(s):s));
|
return parsercstruct(parserctokens(f?lowercase(s):s));
|
||||||
end
|
end
|
||||||
|
function addtable(d,n);
|
||||||
|
begin
|
||||||
|
tbs := "";
|
||||||
|
for i := 1 to n do tbs += "\t";
|
||||||
|
r := "";
|
||||||
|
for i,v in str2array(d,"\r\n") do if v then r += tbs+v+"\r\n";
|
||||||
|
return r;
|
||||||
|
end
|
||||||
|
function cstructtotslclass(data,name,fz);
|
||||||
|
begin
|
||||||
|
{**
|
||||||
|
@explan(说明)将数组结构转换为对象 %%
|
||||||
|
**}
|
||||||
|
s := format("type %s = class(tslcstructureobj)\r\n",name);
|
||||||
|
s += "uses cstructurelib;\r\n";
|
||||||
|
s += "private\r\n\tstatic SSTRUCT;\r\n";
|
||||||
|
fs := "";
|
||||||
|
fp := "";
|
||||||
|
sf := "";
|
||||||
|
gsf := "";
|
||||||
|
intf := format("\tclass function getstruct()\r\n\tbegin\r\n\t\tif not SSTRUCT then SSTRUCT := MemoryAlignmentCalculate(\r\n%s\r\n\t\treturn SSTRUCT;\r\n\tend\r\n",addtable(tostn(data)+");",3));
|
||||||
|
if fz then cf2 := "public\r\nclass function memsize();\r\nbegin\r\n\tif not SSTRUCT then getstruct();\r\n\tif SSTRUCT then \r\n\tbegin\r\n\t\tldata := length(SSTRUCT)-1;\r\n\t\treturn SSTRUCT[ldata,3]+SSTRUCT[ldata,4]-SSTRUCT[0,3];\r\n\tend \r\n\treturn 0;\r\nend";
|
||||||
|
else cf2 := "";
|
||||||
|
cf := "\tpublic\r\n\tfunction create(ptr)\r\n\tbegin\r\n\t\tinherited create(getstruct(),ptr); \r\n\tend\r\n";
|
||||||
|
for i,v in data do
|
||||||
|
begin
|
||||||
|
v0 := v[0];
|
||||||
|
//fs += "\tF"+ v[0]+";\r\n";
|
||||||
|
fp += format('\tproperty %s index "%s" read _getvalue_ write _setvalue_;\r\n',v0,v0);
|
||||||
|
{sf += format("\tfunction Set%s(v)\r\n\tbegin\r\n",v0);
|
||||||
|
sf += format("\t\t_setvalue_('%s',v);\r\n",v0,v0,v0);
|
||||||
|
sf +="\tend\r\n";
|
||||||
|
gsf += format("\tfunction Get%s()\r\n\tbegin\r\n",v0);
|
||||||
|
gsf += format("\t\treturn _getvalue_('%s');\r\n",v0);
|
||||||
|
gsf +="\tend\r\n";}
|
||||||
|
end
|
||||||
|
s += gsf;
|
||||||
|
s += intf;
|
||||||
|
s += sf;
|
||||||
|
s += addtable(cf2,1);
|
||||||
|
s += cf;
|
||||||
|
s += fp;
|
||||||
|
s += "end";
|
||||||
|
return s;
|
||||||
|
end
|
||||||
|
//**********c结构体转换到tsl对象*********************************
|
||||||
|
function csstotslarray3(ret,iv);
|
||||||
|
begin
|
||||||
|
{**
|
||||||
|
@explan(说明)对c结构定义,初始值 %%
|
||||||
|
@param(ret)(array) 结构定义 %%
|
||||||
|
@param(iv)(array) 初始值 %%
|
||||||
|
@return(array) 结构定义
|
||||||
|
**}
|
||||||
|
r := array();
|
||||||
|
iv := array();
|
||||||
|
for i,v in ret do
|
||||||
|
begin
|
||||||
|
n := ret[i,0];
|
||||||
|
r[i]["n"]:= n;
|
||||||
|
r[i]["t"]:= ret[i,1];
|
||||||
|
iv[n]:= ret[i,2];
|
||||||
|
end
|
||||||
|
return r;
|
||||||
|
end
|
||||||
|
function csstotslarray2(csstr1,iv);
|
||||||
|
begin
|
||||||
|
{**
|
||||||
|
@explan(说明)将c的结构体字符串形式转换为tsl数组 %%
|
||||||
|
@param(csstr1)(string) c结构体字符串 %%
|
||||||
|
@param(iv)(array) 初始值 %%
|
||||||
|
@return(array) 结构定义
|
||||||
|
**}
|
||||||
|
(**
|
||||||
|
@example(转换cstruct结构到tslarray-2)
|
||||||
|
s := "
|
||||||
|
typedef struct _SYSTEMTIME {
|
||||||
|
WORD wYear;
|
||||||
|
WORD wMonth;
|
||||||
|
WORD wDayOfWeek;
|
||||||
|
WORD wDay;
|
||||||
|
WORD wHour;
|
||||||
|
WORD wMinute;
|
||||||
|
WORD wSecond;
|
||||||
|
WORD wMilliseconds;
|
||||||
|
} SYSTEMTIME, *PSYSTEMTIME;
|
||||||
|
";
|
||||||
|
return csstotslarray2(s);
|
||||||
|
**)
|
||||||
|
ret := csstotslarray(csstr1);
|
||||||
|
return csstotslarray3(ret,iv);
|
||||||
|
end
|
||||||
|
function csstotslarray(csstr1,tname);
|
||||||
|
begin
|
||||||
|
{**
|
||||||
|
@explan(说明)将c的结构体字符串形式转换为tsl数组 %%
|
||||||
|
@param(csstr1)(string) c结构体字符串 %%
|
||||||
|
@param(tname)(string) 名称,返回值 %%
|
||||||
|
@return(array) 结构定义%%
|
||||||
|
**}
|
||||||
|
(**
|
||||||
|
@example(转换cstruct结构到tslarray-1)
|
||||||
|
s := "
|
||||||
|
typedef struct tagWINDOWPOS {
|
||||||
|
HWND hwnd;
|
||||||
|
HWND hwndInsertAfter;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int cx;
|
||||||
|
int cy;
|
||||||
|
UINT flags;
|
||||||
|
} WINDOWPOS, *LPWINDOWPOS, *PWINDOWPOS;
|
||||||
|
|
||||||
|
";
|
||||||
|
return csstotslarray(s);
|
||||||
|
**)
|
||||||
|
typecp := array("int":"int",
|
||||||
|
"float":"float",
|
||||||
|
"uint":"int",
|
||||||
|
"lpstr":"char*",
|
||||||
|
"char":"char",
|
||||||
|
"char*":"char*",
|
||||||
|
"dword":"int",
|
||||||
|
"long":"int",
|
||||||
|
"byte":"byte",
|
||||||
|
"short":"short",
|
||||||
|
"word":"short", //byte[2]
|
||||||
|
"rect":"int[4]",
|
||||||
|
"size":"int[2]",
|
||||||
|
"point":"int[2]",
|
||||||
|
"double":"double",
|
||||||
|
"lpcstr":"char*",
|
||||||
|
"bool":"int",
|
||||||
|
"colorref":"int",
|
||||||
|
"nmhdr":"nmhdr",
|
||||||
|
"guid":"guid",
|
||||||
|
"cef_string_t":"cef_string_t"
|
||||||
|
);
|
||||||
|
//类型对应初始值表
|
||||||
|
typecv := array(
|
||||||
|
"float":0,
|
||||||
|
"int":0,
|
||||||
|
"char*":100,
|
||||||
|
"short":0,
|
||||||
|
"byte":0,
|
||||||
|
"int[4]":array(0,0,0,0),
|
||||||
|
"int[2]":array(0,0),
|
||||||
|
"byte[2]":array(0,0),
|
||||||
|
"double":0,
|
||||||
|
"intptr":0,
|
||||||
|
"nmhdr":array(
|
||||||
|
("hwndfrom","intptr",0),
|
||||||
|
("idfrom","intptr",0),
|
||||||
|
("code","int",0)),
|
||||||
|
"guid":(
|
||||||
|
("data1","int",0),
|
||||||
|
("data2","short",0),
|
||||||
|
("data3","short",0),
|
||||||
|
("data4","char[8]","")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
//返回值
|
||||||
|
r := pcstruct(csstr1,1);
|
||||||
|
tslarray := array();
|
||||||
|
j := 0;
|
||||||
|
if ifarray(r)then tname := r["tname"];
|
||||||
|
for i,v in r["field"] do
|
||||||
|
begin
|
||||||
|
tps := v["t"];
|
||||||
|
tp := tps[length(tps)-1];
|
||||||
|
if v["p"]then
|
||||||
|
begin
|
||||||
|
if tp="char" and v["p"]=1 then tp := "char*";
|
||||||
|
end
|
||||||
|
ctyp := typecp[tp]?: "intptr"; //设置默认类型为指针
|
||||||
|
len := v["l"];
|
||||||
|
if len then ctyp := ctyp+format("[%s]",len); //设置数组初始值
|
||||||
|
tslarray[j++]:= array(v["n"],typetouser(ctyp),typecv[ctyp]?: 0); //构造数据
|
||||||
|
end
|
||||||
|
return tslarray;
|
||||||
|
(*
|
||||||
|
csstr := dealcppcomment(csstr1);
|
||||||
|
s := pos("{",csstr)+1;
|
||||||
|
e := pos("}",csstr);
|
||||||
|
//删除注释
|
||||||
|
str := copy(lowercase(csstr),s,e-s); //获取大括号之间的数据
|
||||||
|
str :=replacestr(str,"\r"," "); //替换掉换行
|
||||||
|
str :=replacestr(str,"\n"," "); //替换掉换行
|
||||||
|
str :=replacestr(str,"\t"," "); //替换掉分隔符
|
||||||
|
strs := str2array(str,";"); //按照;分割行
|
||||||
|
//类型对照表
|
||||||
|
tslarray := array();
|
||||||
|
j := 0;
|
||||||
|
//正则表达式表
|
||||||
|
//ctrl := "\\w+[*]?";
|
||||||
|
for i ,v in strs do
|
||||||
|
begin
|
||||||
|
parserctypestr(v,tp,len,name);
|
||||||
|
if not(name and tp) then continue;
|
||||||
|
ctyp := typecp[tp]?:"intptr"; //设置默认类型为指针
|
||||||
|
if len then ctyp := ctyp + format("[%d]",len); //设置数组初始值
|
||||||
|
tslarray[j++] := array(name,ctyp,typecv[ctyp]?:0); //构造数据
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return tslarray; *)
|
||||||
|
end
|
||||||
|
{
|
||||||
|
function writeloglen(len);
|
||||||
|
begin
|
||||||
|
lf := "d:/ts/malocsize.txt";
|
||||||
|
if FileExists("",lf) then
|
||||||
|
begin
|
||||||
|
pos1 := FileSize('',lf);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
pos1 := 0;
|
||||||
|
end
|
||||||
|
a := format("分配空间大小%d",len);
|
||||||
|
writefile(rwraw(),'',lf,pos1,length(a),a);
|
||||||
|
end }
|
||||||
|
function typetouser(tp);
|
||||||
|
begin
|
||||||
|
if tp in array("nmhdr","guid")then
|
||||||
|
begin
|
||||||
|
return "user";
|
||||||
|
end
|
||||||
|
return tp;
|
||||||
|
end
|
||||||
|
//*************删除c注释*****************
|
||||||
|
function dealcppcomment(strs)
|
||||||
|
begin
|
||||||
|
{**
|
||||||
|
@explan(说明)删除c语言注释 %%
|
||||||
|
@param(strs)(string) c结构体字符串 %%
|
||||||
|
@return(string)
|
||||||
|
**}
|
||||||
|
rets := "";
|
||||||
|
len := length(strs);
|
||||||
|
i := 1;
|
||||||
|
while i<len do
|
||||||
|
begin
|
||||||
|
ps := strs[i:i+1];
|
||||||
|
if ps="//" then
|
||||||
|
begin
|
||||||
|
i += 2;
|
||||||
|
while(true) do
|
||||||
|
begin
|
||||||
|
if strs[i]="\n" then
|
||||||
|
begin
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
i++;
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
if(ps="/*")then
|
||||||
|
begin
|
||||||
|
i += 2;
|
||||||
|
while true do
|
||||||
|
begin
|
||||||
|
if strs[i:i+1]="*/" then
|
||||||
|
begin
|
||||||
|
i += 2;
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
i++;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if i<len then rets += strs[i++];
|
||||||
|
end
|
||||||
|
return rets;
|
||||||
|
end
|
||||||
function parsercstruct(tokens,indx);
|
function parsercstruct(tokens,indx);
|
||||||
begin
|
begin
|
||||||
{**
|
{**
|
||||||
|
|
|
||||||
|
|
@ -102,13 +102,12 @@ type TGdiplusflat=class()
|
||||||
|
|
||||||
end
|
end
|
||||||
type TTempFile = class
|
type TTempFile = class
|
||||||
|
static fobj_count;
|
||||||
function Create();
|
function Create();
|
||||||
begin
|
begin
|
||||||
|
fobj_count++;
|
||||||
bp := "/tmp/tinysoft/tslvcl/";
|
bp := "/tmp/tinysoft/tslvcl/";
|
||||||
|
FPath := bp+inttostr(systhreadid())+"_"+tostn(fobj_count);
|
||||||
if not _mtool then _mtool := new aefclassobj_();
|
|
||||||
Fptr := _mtool.tmalloc(8);
|
|
||||||
FPath := bp+inttostr(systhreadid())+"_"+inttostr(Fptr);
|
|
||||||
end
|
end
|
||||||
function GetData(buf,f);
|
function GetData(buf,f);
|
||||||
begin
|
begin
|
||||||
|
|
@ -130,13 +129,10 @@ type TGdiplusflat=class()
|
||||||
function Destroy();
|
function Destroy();
|
||||||
begin
|
begin
|
||||||
filedelete("",FPath);
|
filedelete("",FPath);
|
||||||
_mtool.tfree(Fptr);
|
|
||||||
end
|
end
|
||||||
property path read FPath ;
|
property path read FPath ;
|
||||||
private
|
private
|
||||||
FPath;
|
FPath;
|
||||||
Fptr;
|
|
||||||
static _mtool;
|
|
||||||
end
|
end
|
||||||
class procedure cairo_pattern_destroy(p:pointer);
|
class procedure cairo_pattern_destroy(p:pointer);
|
||||||
begin
|
begin
|
||||||
|
|
@ -394,6 +390,31 @@ type TGdiplusflat=class()
|
||||||
end
|
end
|
||||||
{$else}
|
{$else}
|
||||||
//stream ´¦Àí
|
//stream ´¦Àí
|
||||||
|
type inukownvtb = class(tslcstructureobj)
|
||||||
|
uses cstructurelib;
|
||||||
|
function create(ptr);
|
||||||
|
begin
|
||||||
|
p := get_mem_mgr().readptr(ptr);
|
||||||
|
struct := MemoryAlignmentCalculate(get_vtb_struct());
|
||||||
|
inherited create(struct,p);
|
||||||
|
end
|
||||||
|
function Release(s);
|
||||||
|
begin
|
||||||
|
ptr := _getvalue_("Release");
|
||||||
|
_f_ := function (s:pointer):integer;stdcall; external ptr;
|
||||||
|
r := ##_f_(s);
|
||||||
|
return r;
|
||||||
|
end
|
||||||
|
protected
|
||||||
|
function get_vtb_struct();virtual;
|
||||||
|
begin
|
||||||
|
return array(
|
||||||
|
("QueryInterface","intptr",0),
|
||||||
|
("AddRef","intptr",0),
|
||||||
|
("Release","intptr",0)
|
||||||
|
);
|
||||||
|
end
|
||||||
|
end
|
||||||
class function imagetostring(h,vp,conf);
|
class function imagetostring(h,vp,conf);
|
||||||
begin
|
begin
|
||||||
CreateStreamOnHGlobal(0,true,st);
|
CreateStreamOnHGlobal(0,true,st);
|
||||||
|
|
@ -432,7 +453,10 @@ type TGdiplusflat=class()
|
||||||
class function memcpy2(var dst:string;src:pointer;size_t:integer):pointer;cdecl;external "msvcrt.dll" name "memcpy";
|
class function memcpy2(var dst:string;src:pointer;size_t:integer):pointer;cdecl;external "msvcrt.dll" name "memcpy";
|
||||||
class function tuicloseistream(sm:pointer);
|
class function tuicloseistream(sm:pointer);
|
||||||
begin
|
begin
|
||||||
|
o := new inukownvtb(sm);
|
||||||
|
return o.release(sm);
|
||||||
r := tslvclcloseistream(sm);
|
r := tslvclcloseistream(sm);
|
||||||
|
//echo "\r\n close stream:",sm," ",r;
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
class function GlobalAlloc(uFlags :integer;dwBytes:integer):pointer;stdcall;external "Kernel32.dll" name "GlobalAlloc";
|
class function GlobalAlloc(uFlags :integer;dwBytes:integer):pointer;stdcall;external "Kernel32.dll" name "GlobalAlloc";
|
||||||
|
|
|
||||||
|
|
@ -747,6 +747,25 @@ type tsgtkapi = class(tgtkapis)
|
||||||
cairo_rectangle(hdc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1]);
|
cairo_rectangle(hdc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1]);
|
||||||
cairo_clip(hdc);
|
cairo_clip(hdc);
|
||||||
end
|
end
|
||||||
|
function cairo_clip_rec(hdc,rc);
|
||||||
|
begin
|
||||||
|
cairo_set_line_width(hdc,0);
|
||||||
|
cairo_rectangle(hdc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1]);
|
||||||
|
cairo_clip_preserve(hdc);
|
||||||
|
cairo_stroke(hdc);
|
||||||
|
end
|
||||||
|
function cairo_clear_clip_ploy(hdc,ps);
|
||||||
|
begin
|
||||||
|
cairo_reset_clip(hdc);
|
||||||
|
for i,v in ps do
|
||||||
|
begin
|
||||||
|
if i=0 then cairo_move_to(hdc,v[0],v[1]);
|
||||||
|
else cairo_line_to(hdc,v[0],v[1]);
|
||||||
|
end
|
||||||
|
cairo_line_to(hdc,ps[0,0],ps[0,1]);
|
||||||
|
cairo_clip(hdc);
|
||||||
|
end
|
||||||
|
|
||||||
function SelectObject(hdc :pointer;gdiobj:pointer);
|
function SelectObject(hdc :pointer;gdiobj:pointer);
|
||||||
begin
|
begin
|
||||||
//
|
//
|
||||||
|
|
@ -786,14 +805,24 @@ type tsgtkapi = class(tgtkapis)
|
||||||
y := gtk_object_get_data(dc,"viewport.y");
|
y := gtk_object_get_data(dc,"viewport.y");
|
||||||
r := gtk_object_get_data(hdc,"rgn");
|
r := gtk_object_get_data(hdc,"rgn");
|
||||||
gtk_object_set_data(hdc,"rgn",gdiobj);
|
gtk_object_set_data(hdc,"rgn",gdiobj);
|
||||||
rc := (new TCRect(gdiobj))._getdata_();
|
if obj[2]="poly" then
|
||||||
rc[0]+=x;
|
begin
|
||||||
rc[2]+=x;
|
ps1 := (new t_points(gdiobj)).get_points();
|
||||||
rc[1]+=y;
|
ps := array();
|
||||||
rc[3]+=y;
|
for i,v in ps1 do
|
||||||
gtk_object_set_data(hdc,"rgn-rec",rc);
|
begin
|
||||||
cairo_clear_clip(hdc,rc);
|
ps[i] := array(v[0]+x,v[1]+y);
|
||||||
|
end
|
||||||
|
cairo_clear_clip_ploy(hdc,ps);
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
rc := (new TCRect(gdiobj))._getdata_();
|
||||||
|
rc[0]+=x;
|
||||||
|
rc[2]+=x;
|
||||||
|
rc[1]+=y;
|
||||||
|
rc[3]+=y;
|
||||||
|
cairo_clear_clip(hdc,rc);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end ;
|
end ;
|
||||||
if r then
|
if r then
|
||||||
|
|
@ -1059,17 +1088,11 @@ type tsgtkapi = class(tgtkapis)
|
||||||
begin
|
begin
|
||||||
sy := rec[3]-3-ht;
|
sy := rec[3]-3-ht;
|
||||||
end
|
end
|
||||||
rgnrec := gtk_object_get_data(hdc,"rgn-rec");
|
cairo_save(hdc);
|
||||||
if rgnrec then
|
reci := array(rec[0]+x,rec[1]+y,rec[2]+x,rec[3]+y);
|
||||||
begin
|
cairo_clip_rec(hdc,reci);
|
||||||
x := gtk_object_get_data(hdc,"viewport.x");
|
|
||||||
y := gtk_object_get_data(hdc,"viewport.y");
|
|
||||||
reci := array(rec[0]+x,rec[1]+y,rec[2]+x,rec[3]+y);
|
|
||||||
if not intersectrect(rgnrec,reci,reco) then return 0;
|
|
||||||
cairo_clear_clip(hdc,reco);
|
|
||||||
end
|
|
||||||
r := TextOutexA(hdc,sx,sy,txt,slen);
|
r := TextOutexA(hdc,sx,sy,txt,slen);
|
||||||
if rgnrec then cairo_clear_clip(hdc,rgnrec);
|
cairo_restore(hdc);
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
Function SetTextColor(hdc :pointer;col:integer):integer;
|
Function SetTextColor(hdc :pointer;col:integer):integer;
|
||||||
|
|
@ -1194,11 +1217,22 @@ type tsgtkapi = class(tgtkapis)
|
||||||
if not(gdiobj) then
|
if not(gdiobj) then
|
||||||
begin
|
begin
|
||||||
gtk_object_set_data(hdc,"rgn",nil);
|
gtk_object_set_data(hdc,"rgn",nil);
|
||||||
gtk_object_set_data(hdc,"rgn-rec",nil);
|
|
||||||
cairo_reset_clip(hdc);
|
cairo_reset_clip(hdc);
|
||||||
end
|
end
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
|
function CreatePolygonRgn(ps:array of integer;len:integer;md:integer):pointer;
|
||||||
|
begin
|
||||||
|
global gtk_gdi_object_globals;
|
||||||
|
if ifarray(ps) and mrows(ps)>2 and mcols(ps)=2 then
|
||||||
|
begin
|
||||||
|
p := new t_points();
|
||||||
|
p.set_points(ps);
|
||||||
|
ptr := p._getptr_();
|
||||||
|
gtk_gdi_object_globals[inttostr(ptr)] := array(p,"rgn","poly");
|
||||||
|
return ptr;
|
||||||
|
end
|
||||||
|
end
|
||||||
function CreateRectRgn(nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer):pointer;
|
function CreateRectRgn(nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer):pointer;
|
||||||
begin
|
begin
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
|
|
@ -1208,7 +1242,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
p.right := nRightRect;
|
p.right := nRightRect;
|
||||||
p.bottom := nBottomRect;
|
p.bottom := nBottomRect;
|
||||||
ptr := p._getptr_();
|
ptr := p._getptr_();
|
||||||
gtk_gdi_object_globals[inttostr(ptr)] := array(p,"rgn");
|
gtk_gdi_object_globals[inttostr(ptr)] := array(p,"rgn","rect");
|
||||||
return ptr;
|
return ptr;
|
||||||
end
|
end
|
||||||
function CombineRgn(hrgnDest:pointer;hrgnSrc1:pointer;hrgnSrc2:pointer; fnCombineMode:integer):integer;
|
function CombineRgn(hrgnDest:pointer;hrgnSrc1:pointer;hrgnSrc2:pointer; fnCombineMode:integer):integer;
|
||||||
|
|
@ -2769,7 +2803,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
end
|
end
|
||||||
function ILCreateFromPathA(pszPath:string):pointer;
|
function ILCreateFromPathA(pszPath:string):pointer;
|
||||||
begin
|
begin
|
||||||
mt := static new aefclassobj_();
|
mt := unit(cstructurelib).get_mem_mgr();
|
||||||
len := length(pszPath)+1;
|
len := length(pszPath)+1;
|
||||||
bts := zeros(n);
|
bts := zeros(n);
|
||||||
for i:= 1 to len-1 do bts[i-1] :=ord(pszPath[i]);
|
for i:= 1 to len-1 do bts[i-1] :=ord(pszPath[i]);
|
||||||
|
|
@ -2779,7 +2813,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
end
|
end
|
||||||
procedure ILFree(pidl:pointer);
|
procedure ILFree(pidl:pointer);
|
||||||
begin
|
begin
|
||||||
mt := static new aefclassobj_();
|
mt := unit(cstructurelib).get_mem_mgr();
|
||||||
mt.tfree(pidl);
|
mt.tfree(pidl);
|
||||||
end
|
end
|
||||||
//caret 插入符号 处理
|
//caret 插入符号 处理
|
||||||
|
|
@ -3011,6 +3045,41 @@ type TGtkList = class( _gslist) //gtk
|
||||||
inherited;
|
inherited;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
type t_points=class(tslcstructureobj)
|
||||||
|
private
|
||||||
|
static fpoints;
|
||||||
|
static SSTRUCT;
|
||||||
|
function getstruct()
|
||||||
|
begin
|
||||||
|
if not SSTRUCT then SSTRUCT := MemoryAlignmentCalculate(array(
|
||||||
|
(0,"int",0)));
|
||||||
|
return SSTRUCT;
|
||||||
|
end
|
||||||
|
public
|
||||||
|
function create(ptr)
|
||||||
|
begin
|
||||||
|
if not ifarray(fpoints) then fpoints := array();
|
||||||
|
inherited create(getstruct(),ptr);
|
||||||
|
end
|
||||||
|
function set_points(d);
|
||||||
|
begin
|
||||||
|
p := _getptr_();
|
||||||
|
if p then
|
||||||
|
begin
|
||||||
|
//_setvalue_(0,length(d));
|
||||||
|
fpoints[inttostr(p)] := d;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function get_points();
|
||||||
|
begin
|
||||||
|
p := _getptr_();
|
||||||
|
if p then
|
||||||
|
begin
|
||||||
|
return fpoints[inttostr(p)];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
type ttmstruct=class(tslcstructureobj)
|
type ttmstruct=class(tslcstructureobj)
|
||||||
{**
|
{**
|
||||||
@explan(说明)矩形区域内存分配 %%
|
@explan(说明)矩形区域内存分配 %%
|
||||||
|
|
@ -4128,7 +4197,7 @@ type tgtkapis = class() //gtk
|
||||||
r := ##_f_(d);
|
r := ##_f_(d);
|
||||||
rr := r;
|
rr := r;
|
||||||
ret := array();
|
ret := array();
|
||||||
_tool := static new aefclassobj_();
|
_tool := unit(cstructurelib).get_mem_mgr();
|
||||||
while true do
|
while true do
|
||||||
begin
|
begin
|
||||||
p1 := _tool.readptr(r);
|
p1 := _tool.readptr(r);
|
||||||
|
|
@ -4451,9 +4520,13 @@ type tgtkapis = class() //gtk
|
||||||
begin
|
begin
|
||||||
fm := pango_cairo_font_map_get_default();
|
fm := pango_cairo_font_map_get_default();
|
||||||
pango_font_map_list_families(fm,ls,lsn);
|
pango_font_map_list_families(fm,ls,lsn);
|
||||||
mt := new aefclassobj_();
|
mt := unit(cstructurelib).get_mem_mgr();
|
||||||
r := array();
|
r := array();
|
||||||
psize := static getctypesize()["intptr"];
|
{$ifdef win32}
|
||||||
|
psize := 4;
|
||||||
|
{$else}
|
||||||
|
psize := 8;
|
||||||
|
{$endif }
|
||||||
for i:= 0 to lsn -1 do
|
for i:= 0 to lsn -1 do
|
||||||
begin
|
begin
|
||||||
pi := mt.readptr(ls+psize*i);
|
pi := mt.readptr(ls+psize*i);
|
||||||
|
|
@ -4614,7 +4687,7 @@ type tgtkapis = class() //gtk
|
||||||
_f_ := static procedure(c:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static procedure(c:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
||||||
return ##_f_(c);
|
return ##_f_(c);
|
||||||
end
|
end
|
||||||
procedure cairo_clip_preserve(c:pointer);
|
procedure cairo_clip_preserve(c:pointer); //µþ¼Ó²Ã¼ô
|
||||||
begin
|
begin
|
||||||
_f_ := static procedure(c:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static procedure(c:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
||||||
return ##_f_(c);
|
return ##_f_(c);
|
||||||
|
|
|
||||||
|
|
@ -822,6 +822,56 @@ type TRGNRoundRect=class(TRGNELLIP)
|
||||||
property EllipseWidth:integer read FEllipseWidth write SetEllipseWidth;
|
property EllipseWidth:integer read FEllipseWidth write SetEllipseWidth;
|
||||||
property EllipseHeight:integer read FEllipseHeight write SetEllipseHeight;
|
property EllipseHeight:integer read FEllipseHeight write SetEllipseHeight;
|
||||||
end
|
end
|
||||||
|
type TRGNPOLY=class(TRGN) //多边形
|
||||||
|
{**
|
||||||
|
@explan(说明)多边形区域%%
|
||||||
|
**}
|
||||||
|
private
|
||||||
|
FPoints;
|
||||||
|
FImode;
|
||||||
|
function points_ok(d);
|
||||||
|
begin
|
||||||
|
if ifarray(d) and mrows(d)>2 and mcols(d)=2 then
|
||||||
|
begin
|
||||||
|
for i,v in d do
|
||||||
|
begin
|
||||||
|
if not(ifnumber(v[0]) and ifnumber(v[1])) then return false;
|
||||||
|
end
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function SetImode(v);
|
||||||
|
begin
|
||||||
|
if(v in array(1,2))and v <> FImode then
|
||||||
|
begin
|
||||||
|
FImode := v;
|
||||||
|
DestroyHandle();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function SetPoints(v);
|
||||||
|
begin
|
||||||
|
if points_ok(v) and v <> FPoints then
|
||||||
|
begin
|
||||||
|
FPoints := v;
|
||||||
|
DestroyHandle();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
public
|
||||||
|
function create(); //点 和填充模式
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
FPoints := array();
|
||||||
|
FImode := ALTERNATE;
|
||||||
|
end
|
||||||
|
function CreateRgn();override;
|
||||||
|
begin
|
||||||
|
if not FPoints then return 0;
|
||||||
|
len := length(FPoints);
|
||||||
|
return _wapi.CreatePolygonRgn(FPoints,len,FImode);
|
||||||
|
end
|
||||||
|
property Points read FPoints write SetPoints;
|
||||||
|
property Imode read FImode write SetImode;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
type tcustomimage=class(TSLUIBASE)
|
type tcustomimage=class(TSLUIBASE)
|
||||||
|
|
@ -833,10 +883,12 @@ type tcustomimage=class(TSLUIBASE)
|
||||||
FGdi;
|
FGdi;
|
||||||
Static FImageTypes;
|
Static FImageTypes;
|
||||||
class function GetFileType(t_);
|
class function GetFileType(t_);
|
||||||
begin
|
begin
|
||||||
if not(t_ and ifstring(t_))then t := "png";
|
if not(t_ and ifstring(t_))then t := "png";
|
||||||
else t := lowercase(t_);
|
else t := lowercase(t_);
|
||||||
if not(t in array("png","jpeg","bmp","gif","tiff"))then exit;
|
if not(t in array("png","jpeg","bmp","gif","tiff"))then exit;
|
||||||
|
return FImageTypes[t]; //新代码
|
||||||
|
|
||||||
vp := FImageTypes[t];
|
vp := FImageTypes[t];
|
||||||
if vp then return vp;
|
if vp then return vp;
|
||||||
dt := MemoryAlignmentCalculate(array((0,"byte[20]",array())),1,nil,nil);
|
dt := MemoryAlignmentCalculate(array((0,"byte[20]",array())),1,nil,nil);
|
||||||
|
|
@ -874,7 +926,19 @@ type tcustomimage=class(TSLUIBASE)
|
||||||
inherited;
|
inherited;
|
||||||
if not ifarray(FImageTypes)then
|
if not ifarray(FImageTypes)then
|
||||||
begin
|
begin
|
||||||
//return ;
|
{$ifdef linux}
|
||||||
|
FImageTypes := array();
|
||||||
|
for i,v in array("png","jpeg","bmp","gif","tiff") do
|
||||||
|
begin
|
||||||
|
dt := MemoryAlignmentCalculate(array((0,"byte[20]",array())),1,nil,nil);
|
||||||
|
vp := new tslcstructureobj(dt,nil);
|
||||||
|
WriteStringToPtr(vp._getptr_(),"image/"+v);
|
||||||
|
FImageTypes[v] := vp;
|
||||||
|
end
|
||||||
|
return ;
|
||||||
|
{$endif}
|
||||||
|
FImageTypes := GetEncoderClsid();
|
||||||
|
return ;
|
||||||
FImageTypes := array();
|
FImageTypes := array();
|
||||||
for i,v in array("png","jpeg","bmp","gif","tiff") do
|
for i,v in array("png","jpeg","bmp","gif","tiff") do
|
||||||
begin
|
begin
|
||||||
|
|
@ -2827,6 +2891,7 @@ type TcustomCanvas = class(TSLUIBASE)
|
||||||
begin
|
begin
|
||||||
FCounter.DeCrease();
|
FCounter.DeCrease();
|
||||||
_wapi.RestoreDC(FHandle,-1);
|
_wapi.RestoreDC(FHandle,-1);
|
||||||
|
FState := 1+2+4+8+16+32;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -2862,6 +2927,7 @@ type TControlCanvs=class(TcustomCanvas)
|
||||||
FClipRect;
|
FClipRect;
|
||||||
end
|
end
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
type TResourcescache=class
|
type TResourcescache=class
|
||||||
{**
|
{**
|
||||||
|
|
@ -2987,6 +3053,11 @@ type tshape = class()
|
||||||
begin
|
begin
|
||||||
return self(true);
|
return self(true);
|
||||||
end
|
end
|
||||||
|
function requiregdi();
|
||||||
|
begin
|
||||||
|
if fcanvas then FCanvas.requiregdi();
|
||||||
|
return self(true);
|
||||||
|
end
|
||||||
protected
|
protected
|
||||||
[weakref]fcanvas;
|
[weakref]fcanvas;
|
||||||
end
|
end
|
||||||
|
|
@ -3374,6 +3445,68 @@ begin
|
||||||
"ProfileNotFound");
|
"ProfileNotFound");
|
||||||
return vs[v];
|
return vs[v];
|
||||||
end
|
end
|
||||||
|
function GdipGetImageEncodersSize(var numencoders:integer;var size:integer):integer;stdcall ;external "Gdiplus.dll" name "GdipGetImageEncodersSize";
|
||||||
|
Function GdipGetImageEncoders(numEncoders:integer;size:integer;encoders:pointer):pointer;stdcall;external "gdiplus.dll" name "GdipGetImageEncoders";
|
||||||
|
function GetEncoderClsid();
|
||||||
|
begin
|
||||||
|
num := 0; // number of image encoders
|
||||||
|
size := 0; // size of the image encoder array in bytes
|
||||||
|
GdipGetImageEncodersSize(num,size);
|
||||||
|
if size=0 then return -1;
|
||||||
|
mg := get_mem_mgr();
|
||||||
|
ptr := mg.tmalloc(size);
|
||||||
|
strc := get_imagecodec_(num);
|
||||||
|
o := static new tslcstructureobj(MemoryAlignmentCalculate(strc),ptr);
|
||||||
|
GdipGetImageEncoders(num, size, ptr);
|
||||||
|
r := array();
|
||||||
|
for i := 0 to num-1 do
|
||||||
|
begin
|
||||||
|
oa := o._getvalue_(i);
|
||||||
|
mt := oa._getvalue_("MimeType");
|
||||||
|
s := ReadStringFromPtr(mt,2*widestr_ptr_len(mt));
|
||||||
|
if mt then
|
||||||
|
begin
|
||||||
|
si := "";
|
||||||
|
for j:= 1 to length(s) step 2 do
|
||||||
|
begin
|
||||||
|
si+=s[j];
|
||||||
|
end
|
||||||
|
r[si[7:]] := oa._getvalue_("Clsid");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return r;
|
||||||
|
end
|
||||||
|
function get_imagecodec_(n);
|
||||||
|
begin
|
||||||
|
r := array();
|
||||||
|
g_s := array(
|
||||||
|
("data1","int",0xf59a8177),
|
||||||
|
("data2","short",0x2a0),
|
||||||
|
("data3","short",0x4019),
|
||||||
|
("data4","byte[8]",array(0xa3, 0x93, 0xaf, 0x7, 0x9f, 0x9a, 0xb3, 0x62)),
|
||||||
|
);
|
||||||
|
idx := 0;
|
||||||
|
r[idx++] := array("Clsid","user",g_s);
|
||||||
|
r[idx++] := array("FormatID","user",g_s);
|
||||||
|
r[idx++] := array("CodecName","pointer",0);
|
||||||
|
r[idx++] := array("DllName","pointer",0);
|
||||||
|
r[idx++] := array("FormatDescription","pointer",0);
|
||||||
|
r[idx++] := array("FilenameExtension","pointer",0);
|
||||||
|
r[idx++] := array("MimeType","pointer",0);
|
||||||
|
r[idx++] := array("Flags","int",0);
|
||||||
|
r[idx++] := array("Version","int",0);
|
||||||
|
r[idx++] := array("SigCount","int",0);
|
||||||
|
r[idx++] := array("SigSize","int",0);
|
||||||
|
r[idx++] := array("SigPattern","pointer",0);
|
||||||
|
r[idx++] := array("SigMask","pointer",0);
|
||||||
|
rt := array();
|
||||||
|
if n>0 then
|
||||||
|
begin
|
||||||
|
for i := 0 to n-1 do
|
||||||
|
rt[i] := array(i,"user",r);
|
||||||
|
end
|
||||||
|
return rt;
|
||||||
|
end
|
||||||
initialization
|
initialization
|
||||||
sinitgidplus();
|
sinitgidplus();
|
||||||
class(tcustomimage).sinit();
|
class(tcustomimage).sinit();
|
||||||
|
|
@ -3381,59 +3514,4 @@ class(tUIglobalData).uisetdata("G_T_BITMAP_",class(TcustomBitmap));
|
||||||
class(tUIglobalData).uisetdata("G_T_ICON_",class(TcustomIcon));
|
class(tUIglobalData).uisetdata("G_T_ICON_",class(TcustomIcon));
|
||||||
finalization
|
finalization
|
||||||
|
|
||||||
end.
|
end.
|
||||||
(*
|
|
||||||
type TRGNPOLY=class(TRGN) //多边形
|
|
||||||
{**
|
|
||||||
@explan(说明)多边形区域%%
|
|
||||||
**}
|
|
||||||
private
|
|
||||||
FPoints;
|
|
||||||
FImode;
|
|
||||||
function pointtovector(pts); //点转换为数组
|
|
||||||
begin
|
|
||||||
t := array();
|
|
||||||
lt := 0;
|
|
||||||
if not ifarray(pts)then return array();
|
|
||||||
for i,v in pts do
|
|
||||||
begin
|
|
||||||
if ifarray(v)and ifnumber(v[0])and ifnumber(v[1])then
|
|
||||||
begin
|
|
||||||
t[lt++]:= v[0];
|
|
||||||
t[lt++]:= v[1];
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return t;
|
|
||||||
end
|
|
||||||
function SetImode(v);
|
|
||||||
begin
|
|
||||||
if(v in array(1,2))and v <> FImode then
|
|
||||||
begin
|
|
||||||
FImode := v;
|
|
||||||
DestroyHandle();
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function SetPoints(v);
|
|
||||||
begin
|
|
||||||
if v <> FPoints then
|
|
||||||
begin
|
|
||||||
FPoints := v;
|
|
||||||
DestroyHandle();
|
|
||||||
end
|
|
||||||
end
|
|
||||||
public
|
|
||||||
function create(); //点 和填充模式
|
|
||||||
begin
|
|
||||||
inherited;
|
|
||||||
FImode := ALTERNATE;
|
|
||||||
end
|
|
||||||
function CreateRgn();override;
|
|
||||||
begin
|
|
||||||
t := pointtovector(FPoints);
|
|
||||||
len := length(t);
|
|
||||||
if len>5 then return _wapi.CreatePolygonRgn(t,len/2,FImode);
|
|
||||||
end
|
|
||||||
property Points read FPoints write SetPoints;
|
|
||||||
property Imode read FImode write SetImode;
|
|
||||||
end
|
|
||||||
*)
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -401,8 +401,8 @@ type twindowsapi = class()
|
||||||
function GetCaretBlinkTime():integer;stdcall;external "User32.dll" name "GetCaretBlinkTime";
|
function GetCaretBlinkTime():integer;stdcall;external "User32.dll" name "GetCaretBlinkTime";
|
||||||
function GetCaretPos(lp:array of integer):integer;stdcall;external "User32.dll" name "GetCaretPos";
|
function GetCaretPos(lp:array of integer):integer;stdcall;external "User32.dll" name "GetCaretPos";
|
||||||
|
|
||||||
function memcpy(dst:pointer;src:string;size_t:integer):pointer;cdecl;external "msvcrt.dll" name "memcpy";
|
function memcpy(dst:pointer;src:string;size_t:pointer):pointer;cdecl;external "msvcrt.dll" name "memcpy";
|
||||||
function memcpy2(var dst:string;src:pointer;size_t:integer):pointer;cdecl;external "msvcrt.dll" name "memcpy";
|
function memcpy2(var dst:string;src:pointer;size_t:pointer):pointer;cdecl;external "msvcrt.dll" name "memcpy";
|
||||||
function fopen(filename:string; mode:string):pointer;cdecl;external "msvcrt.dll" name "fopen";
|
function fopen(filename:string; mode:string):pointer;cdecl;external "msvcrt.dll" name "fopen";
|
||||||
function exec_command_line(cmd:string); //执行cmd 并获得打印结果
|
function exec_command_line(cmd:string); //执行cmd 并获得打印结果
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue