parent
c7d8491b45
commit
bd8664d429
|
|
@ -282,7 +282,6 @@ object ed_script:t_compile_config
|
||||||
end
|
end
|
||||||
object ck_s_rp:tcheckbtn
|
object ck_s_rp:tcheckbtn
|
||||||
caption="资源文件保留相对路径"
|
caption="资源文件保留相对路径"
|
||||||
enabled=false
|
|
||||||
height=25
|
height=25
|
||||||
left=253
|
left=253
|
||||||
top=25
|
top=25
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ type t_compile_config=class(tdcreateform)
|
||||||
else
|
else
|
||||||
cb_type.ItemIndex := 0;
|
cb_type.ItemIndex := 0;
|
||||||
end
|
end
|
||||||
|
flibpath := r["libpath"];
|
||||||
e_script.text := r["buildfile"];
|
e_script.text := r["buildfile"];
|
||||||
ed_output.text := r["output"];
|
ed_output.text := r["output"];
|
||||||
ed_out_f.text := r["exports"] ;
|
ed_out_f.text := r["exports"] ;
|
||||||
|
|
@ -125,6 +126,7 @@ type t_compile_config=class(tdcreateform)
|
||||||
end
|
end
|
||||||
r["buildfile"] := e_script.text;
|
r["buildfile"] := e_script.text;
|
||||||
r["output"] := ed_output.text;
|
r["output"] := ed_output.text;
|
||||||
|
r["libpath"] := flibpath;
|
||||||
r["exports"] := ed_out_f.text;
|
r["exports"] := ed_out_f.text;
|
||||||
r["dependsdir"]:=ed_f_dirs.text;
|
r["dependsdir"]:=ed_f_dirs.text;
|
||||||
r["depends"]:=ed_include_f.text;
|
r["depends"]:=ed_include_f.text;
|
||||||
|
|
@ -154,6 +156,7 @@ type t_compile_config=class(tdcreateform)
|
||||||
ck_gui.Checked := "";
|
ck_gui.Checked := "";
|
||||||
ed_ico.text := "";
|
ed_ico.text := "";
|
||||||
ck_s_rp.Checked := "";
|
ck_s_rp.Checked := "";
|
||||||
|
flibpath := "";
|
||||||
end
|
end
|
||||||
function bt_outputname_clk(o;e);virtual;
|
function bt_outputname_clk(o;e);virtual;
|
||||||
begin
|
begin
|
||||||
|
|
@ -446,4 +449,5 @@ type t_compile_config=class(tdcreateform)
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
fcmd_shower;
|
fcmd_shower;
|
||||||
|
flibpath;
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -36,14 +36,14 @@ begin
|
||||||
//return sleep(5000); //Í£Áô5Ãë
|
//return sleep(5000); //Í£Áô5Ãë
|
||||||
echo "\r\n press enter exit";
|
echo "\r\n press enter exit";
|
||||||
sleep(5000);
|
sleep(5000);
|
||||||
return readln();
|
return ;
|
||||||
end else
|
end else
|
||||||
if (i<=sysparamcount())and ("-uninstall" = sysparamstr(i) ) then //Ð¶ÔØÓÒ¼ü´ò¿ª
|
if (i<=sysparamcount())and ("-uninstall" = sysparamstr(i) ) then //Ð¶ÔØÓÒ¼ü´ò¿ª
|
||||||
begin
|
begin
|
||||||
UnInStallToMenu();
|
UnInStallToMenu();
|
||||||
echo "\r\n press enter exit";
|
echo "\r\n press enter exit";
|
||||||
sleep(5000); //Í£Áô5Ãë
|
sleep(5000); //Í£Áô5Ãë
|
||||||
return readln();
|
return ;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -155,8 +155,25 @@ type TRunEditorForm = class(TEditorForm)
|
||||||
end
|
end
|
||||||
function InStallToMenu(); //×¢²á
|
function InStallToMenu(); //×¢²á
|
||||||
begin
|
begin
|
||||||
k1 := new TRegKey(class(TRegKey).HKEY_CLASSES_ROOT);
|
uses utslvclinstall;
|
||||||
tek := k1.openKeyA("*\\shell\\tslediter");
|
o := new t_tsl_window_reg();
|
||||||
|
o.installforall := true;
|
||||||
|
if o.has_reg_authority() then
|
||||||
|
begin
|
||||||
|
reg := 0;
|
||||||
|
if o.install_info_set()=0 then echo "\r\nset install info ok!!";
|
||||||
|
if o.install_backmenuopen()=0 then echo "\r\nset open menu ok!!";
|
||||||
|
if o.install_backmenu()=0 then echo "\r\nset back menu ok!!";
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
return echo "\r\nPlease run with administrator rights!!";
|
||||||
|
end
|
||||||
|
return ;
|
||||||
|
|
||||||
|
//k1 := new TRegKey(class(TRegKey).HKEY_CLASSES_ROOT);
|
||||||
|
k := class(TRegKey).GetRegKeyMachine();
|
||||||
|
k1 := k.openKeyA("SOFTWARE\\Classes");
|
||||||
|
tek := k1.openKeyA("*\\shell\\tsleditor");
|
||||||
if not ifobj(tek) then
|
if not ifobj(tek) then
|
||||||
begin
|
begin
|
||||||
return echo "Please run with administrator rights!!";
|
return echo "Please run with administrator rights!!";
|
||||||
|
|
@ -170,17 +187,42 @@ begin
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
tc.SetValueStringA(nil,SysExecName()+ ' "%1"');
|
tc.SetValueStringA(nil,SysExecName()+ ' "%1"');
|
||||||
bkcl := k1.openKeyA("Directory\\Background\\shell\\tslediter\\command");
|
bkcl := k1.openKeyA("Directory\\Background\\shell\\tsleditor\\command");
|
||||||
if bkcl then bkcl.SetValueStringA(nil,SysExecName());
|
if bkcl then bkcl.SetValueStringA(nil,SysExecName());
|
||||||
bkcl := k1.openKeyA("Directory\\Background\\shell\\tslediter");
|
bkcl := k1.openKeyA("Directory\\Background\\shell\\tsleditor");
|
||||||
bkcl.SetValueStringA(nil,"TSL Editor");
|
bkcl.SetValueStringA(nil,"TSL Editor");
|
||||||
if bkcl then bkcl.SetValueStringA("Icon",SysExecName());
|
if bkcl then bkcl.SetValueStringA("Icon",SysExecName());
|
||||||
echo "register tslediter ok ~~";
|
|
||||||
|
|
||||||
|
echo "register tsleditor ok ~~";
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function UnInStallToMenu(); //Ð¶ÔØ
|
function UnInStallToMenu(); //Ð¶ÔØ
|
||||||
begin
|
begin
|
||||||
k1 := new TRegKey(class(TRegKey).HKEY_CLASSES_ROOT);
|
uses utslvclinstall;
|
||||||
|
o := new t_tsl_window_reg();
|
||||||
|
o.installforall := true;
|
||||||
|
if o.has_reg_authority() then
|
||||||
|
begin
|
||||||
|
reg := o.get_uninstall_reg(1);
|
||||||
|
if ifobj(reg) then
|
||||||
|
begin
|
||||||
|
reg := nil;
|
||||||
|
if 0=o.uninstall_backmenu() then echo "\r\ndelete back menu ok ";
|
||||||
|
if 0=o.uninstall_backmenuopen() then echo "\r\ndelete open menu ok ";
|
||||||
|
if 0=o.install_info_remove() then echo "\r\ndelete install info ok ";
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
return echo "\r\nnot installed!!";
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
return echo "\r\n try run with administrator rights!!";
|
||||||
|
end
|
||||||
|
return ;
|
||||||
|
//k1 := new TRegKey(class(TRegKey).HKEY_CLASSES_ROOT);
|
||||||
|
k := class(TRegKey).GetRegKeyMachine();
|
||||||
|
k1 := k.openKeyA("SOFTWARE\\Classes");
|
||||||
tc := k1.openKeyA("*\\shell");
|
tc := k1.openKeyA("*\\shell");
|
||||||
if not ifobj(tc) then
|
if not ifobj(tc) then
|
||||||
begin
|
begin
|
||||||
|
|
@ -188,26 +230,26 @@ begin
|
||||||
return;
|
return;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
if 0=tc.DeleteKeyA("tslediter\\command") then
|
if 0=tc.DeleteKeyA("tsleditor\\command") then
|
||||||
begin
|
begin
|
||||||
if 0=tc.DeleteKeyA("tslediter") then
|
if 0=tc.DeleteKeyA("tsleditor") then
|
||||||
begin
|
begin
|
||||||
bkcl := k1.openKeyA("Directory\\Background\\shell");
|
bkcl := k1.openKeyA("Directory\\Background\\shell");
|
||||||
if ifobj(bkcl) then
|
if ifobj(bkcl) then
|
||||||
begin
|
begin
|
||||||
if 0=bkcl.DeleteKeyA("tslediter\\command") then
|
if 0=bkcl.DeleteKeyA("tsleditor\\command") then
|
||||||
begin
|
begin
|
||||||
if 0=bkcl.DeleteKeyA("tslediter") then
|
if 0=bkcl.DeleteKeyA("tsleditor") then
|
||||||
begin
|
begin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
echo "unregister tslediter ok~~";
|
echo "unregister tsleditor ok~~";
|
||||||
return ;
|
return ;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
echo "tslediter not installed~~";
|
echo "tsleditor not installed~~";
|
||||||
return ;
|
return ;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2232,7 +2232,6 @@ type TEditer=class(TCustomcontrol) //
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ds := getlibpathstr();
|
ds := getlibpathstr();
|
||||||
|
|
||||||
r["libpath"] := ds;
|
r["libpath"] := ds;
|
||||||
if ot then r["output"] := ot;
|
if ot then r["output"] := ot;
|
||||||
r["dependsdir"] := replacetext(ds,";",",");
|
r["dependsdir"] := replacetext(ds,";",",");
|
||||||
|
|
|
||||||
|
|
@ -4947,6 +4947,54 @@ type TRegKey = class
|
||||||
static const HKEY_PERFORMANCE_NLSTEXT = 0x80000060;
|
static const HKEY_PERFORMANCE_NLSTEXT = 0x80000060;
|
||||||
static const KEY_WOW64_32KEY = 0x0200;
|
static const KEY_WOW64_32KEY = 0x0200;
|
||||||
static const KEY_WOW64_64KEY = 0x0100;
|
static const KEY_WOW64_64KEY = 0x0100;
|
||||||
|
static const REG_NONE = 0;// No value type
|
||||||
|
static const REG_SZ = 1;// Unicode nul terminated string
|
||||||
|
static const REG_EXPAND_SZ = 2;// Unicode nul terminated string(with environment variable references)
|
||||||
|
static const REG_BINARY = 3;// Free form binary
|
||||||
|
static const REG_DWORD = 4;// 32-bit number
|
||||||
|
static const REG_DWORD_LITTLE_ENDIAN = 4;// 32-bit number (same as REG_DWORD)
|
||||||
|
static const REG_DWORD_BIG_ENDIAN = 5;// 32-bit number
|
||||||
|
static const REG_LINK = 6;// Symbolic Link (unicode)
|
||||||
|
static const REG_MULTI_SZ = 7;// Multiple Unicode strings
|
||||||
|
static const REG_RESOURCE_LIST = 8;// Resource list in the resource map
|
||||||
|
static const REG_FULL_RESOURCE_DESCRIPTOR = 9;// Resource list in the hardware description
|
||||||
|
static const REG_RESOURCE_REQUIREMENTS_LIST = 10;// Multiple Unicode strings
|
||||||
|
static const REG_QWORD = 11;// 64-bit number
|
||||||
|
static const REG_QWORD_LITTLE_ENDIAN = 11;// 64-bit number (same as REG_QWORD)
|
||||||
|
|
||||||
|
static const KEY_ALL_ACCESS = 0xF003F;
|
||||||
|
static const KEY_CREATE_LINK = 0x0020;
|
||||||
|
static const KEY_CREATE_SUB_KEY = 0x0004;
|
||||||
|
static const KEY_ENUMERATE_SUB_KEYS =0x0008;
|
||||||
|
static const KEY_EXECUTE = 0x20019;
|
||||||
|
static const KEY_NOTIFY = 0x0010;
|
||||||
|
static const KEY_QUERY_VALUE = 0x0001;
|
||||||
|
static const KEY_READ = 0x20019;
|
||||||
|
static const KEY_SET_VALUE = 0x0002;
|
||||||
|
static const KEY_WRITE = 0x20006;
|
||||||
|
|
||||||
|
static const ERROR_MORE_DATA = 234L ; // dderror
|
||||||
|
static const REG_OPTION_RESERVED = (0x00000000L) ; // Parameter is reserved
|
||||||
|
|
||||||
|
static const REG_OPTION_NON_VOLATILE =0x00000000L; // Key is preserved
|
||||||
|
// when system is rebooted
|
||||||
|
|
||||||
|
static const REG_OPTION_VOLATILE = (0x00000001L); // Key is not preserved
|
||||||
|
// when system is rebooted
|
||||||
|
|
||||||
|
static const REG_OPTION_CREATE_LINK=(0x00000002L) ; // Created key is a
|
||||||
|
// symbolic link
|
||||||
|
|
||||||
|
static const REG_OPTION_BACKUP_RESTORE=(0x00000004L); // open for backup or restore
|
||||||
|
// special access rules
|
||||||
|
// privilege required
|
||||||
|
static const REG_OPTION_OPEN_LINK=(0x00000008L); // Open symbolic link
|
||||||
|
|
||||||
|
static const REG_OPTION_DONT_VIRTUALIZE=(0x00000010L) ; // Disable Open/Read/Write
|
||||||
|
// virtualization for this
|
||||||
|
// open and the resulting
|
||||||
|
// handle.
|
||||||
|
|
||||||
{$ifdef linux}
|
{$ifdef linux}
|
||||||
class function RegEnumValueA(hKey:pointer;dwIndex:integer;var lpValueName:string;var lpcchValueName:integer;lpReserved:pointer;lpType:pointer;lpData:pointer;lpcbData:pointer):integer;
|
class function RegEnumValueA(hKey:pointer;dwIndex:integer;var lpValueName:string;var lpcchValueName:integer;lpReserved:pointer;lpType:pointer;lpData:pointer;lpcbData:pointer):integer;
|
||||||
class function RegEnumKeyA(hKey:pointer;dwindex:integer;var lpName:string;ccname:integer):integer;
|
class function RegEnumKeyA(hKey:pointer;dwindex:integer;var lpName:string;ccname:integer):integer;
|
||||||
|
|
@ -5053,29 +5101,54 @@ type TRegKey = class
|
||||||
begin
|
begin
|
||||||
CloseRegKey();
|
CloseRegKey();
|
||||||
end
|
end
|
||||||
function openKeyA(vn);
|
function openKeyA(vn,exist);
|
||||||
begin
|
begin
|
||||||
{**
|
{**
|
||||||
@explan(说明) 打开或者新建 key%%
|
@explan(说明) 打开或者新建 key%%
|
||||||
@param(vn)(string) value 名字 %%
|
@param(vn)(string) value 名字 %%
|
||||||
|
@param(exist)(bool) 只打开存在的 %%
|
||||||
@return(TRegKey) 值 %%
|
@return(TRegKey) 值 %%
|
||||||
**}
|
**}
|
||||||
if not FHandle then return -1;
|
if not FHandle then return -1;
|
||||||
if not(ifstring(vn)and vn)then return -1;
|
if not(ifstring(vn)and vn)then return -1;
|
||||||
|
|
||||||
|
if exist>0 then
|
||||||
|
begin
|
||||||
|
ac := 0;
|
||||||
|
if (exist .& 2) then //写
|
||||||
|
begin
|
||||||
|
ac .|=KEY_CREATE_LINK;
|
||||||
|
ac .|=KEY_CREATE_SUB_KEY;
|
||||||
|
ac .|=KEY_SET_VALUE;
|
||||||
|
ac .|=KEY_WRITE;
|
||||||
|
end
|
||||||
|
if (exist .& 1) then //读
|
||||||
|
begin
|
||||||
|
ac .|= KEY_QUERY_VALUE;
|
||||||
|
ac .|= KEY_ENUMERATE_SUB_KEYS;
|
||||||
|
ac .|= KEY_READ;
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
ac := KEY_ALL_ACCESS;
|
||||||
|
end
|
||||||
h2 := 0;
|
h2 := 0;
|
||||||
rr := RegOpenKeyExA(FHandle,vn,0,0xF003F,h2);
|
rr := RegOpenKeyExA(FHandle,vn,REG_OPTION_OPEN_LINK,ac,h2);
|
||||||
if 0=rr then
|
if 0=rr then
|
||||||
begin
|
begin
|
||||||
r := new TRegKey(h2);
|
r := new TRegKey(h2);
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
|
if exist then return rr;
|
||||||
state := 0;
|
state := 0;
|
||||||
hk2 := 0;
|
hk2 := 0;
|
||||||
rr := RegCreateKeyExA(FHandle,vn,0,"",0,0,0,hk2,state);
|
rr := RegCreateKeyExA(FHandle,vn,0,"",REG_OPTION_NON_VOLATILE,0,0,hk2,state);
|
||||||
if rr=0 then
|
if rr=0 then
|
||||||
begin
|
begin
|
||||||
r := openKeyA(vn); //new TRegKey(hk2);
|
RegCloseKey(hk2);
|
||||||
return r;
|
//r := new TRegKey(hk2); //openKeyA(vn,exist); //
|
||||||
|
//return r;
|
||||||
|
return openKeyA(vn,3);
|
||||||
end
|
end
|
||||||
return rr;
|
return rr;
|
||||||
end
|
end
|
||||||
|
|
@ -5085,15 +5158,23 @@ type TRegKey = class
|
||||||
@explan(说明) 获得value值%%
|
@explan(说明) 获得value值%%
|
||||||
@param(vn)(string) value 名字 %%
|
@param(vn)(string) value 名字 %%
|
||||||
@param(vt)(integer) 类型 %%
|
@param(vt)(integer) 类型 %%
|
||||||
@return(string) ֵ %%
|
@return(string|number) 值 | err %%
|
||||||
**}
|
**}
|
||||||
if not FHandle then return-1;
|
if not FHandle then return-1;
|
||||||
if not(ifstring(vn)or ifnil(vn))then return-1;
|
if not(ifstring(vn)or ifnil(vn))then return-1;
|
||||||
if not ifnumber(vt)then vt := 0;
|
if not ifnumber(vt)then vt := 0;
|
||||||
|
n := 512;
|
||||||
d := "";
|
d := "";
|
||||||
setlength(d,2064);
|
setlength(d,n);
|
||||||
len := 2063;
|
len := n-1;
|
||||||
rr := RegQueryValueExA(FHandle,vn,0,vt,d,len);
|
rr := RegQueryValueExA(FHandle,vn,0,vt,d,len);
|
||||||
|
while rr=ERROR_MORE_DATA do
|
||||||
|
begin
|
||||||
|
n+=512;
|
||||||
|
setlength(d,n);
|
||||||
|
len := n-1;
|
||||||
|
rr := RegQueryValueExA(FHandle,vn,0,vt,d,len);
|
||||||
|
end
|
||||||
if 0=rr then
|
if 0=rr then
|
||||||
begin
|
begin
|
||||||
return d[1:len-1];
|
return d[1:len-1];
|
||||||
|
|
@ -5113,6 +5194,20 @@ type TRegKey = class
|
||||||
tp := 1;
|
tp := 1;
|
||||||
return RegSetValueExA(FHandle,vn,rs,tp,v,length(v));
|
return RegSetValueExA(FHandle,vn,rs,tp,v,length(v));
|
||||||
end
|
end
|
||||||
|
function setvalueA(vn,v,tp);
|
||||||
|
begin
|
||||||
|
{**
|
||||||
|
@explan(说明) 设置value值%%
|
||||||
|
@param(vn)(string) value 名字,nil为默认值%%
|
||||||
|
@param(v)(string) 值 %%
|
||||||
|
@param(tp)(Number) 类型 默认字符串类型 %%
|
||||||
|
**}
|
||||||
|
if not FHandle then return -1;
|
||||||
|
if not(ifstring(vn)or ifnil(vn))then return -1;
|
||||||
|
rs := 0;
|
||||||
|
if not(tp>=0 ) then tp := 1;
|
||||||
|
return RegSetValueExA(FHandle,vn,rs,tp,v,length(v));
|
||||||
|
end
|
||||||
|
|
||||||
function DeleteValueA(vn);
|
function DeleteValueA(vn);
|
||||||
begin
|
begin
|
||||||
|
|
@ -5161,7 +5256,7 @@ type TRegKey = class
|
||||||
begin
|
begin
|
||||||
ls := 1024;
|
ls := 1024;
|
||||||
sc := RegEnumValueA(FHandle,idx,s,ls,0,0,0,0);
|
sc := RegEnumValueA(FHandle,idx,s,ls,0,0,0,0);
|
||||||
if sc=0 then
|
if sc=0 and (ls>0) then
|
||||||
begin
|
begin
|
||||||
r[idx]:= s[1:ls];
|
r[idx]:= s[1:ls];
|
||||||
idx++;
|
idx++;
|
||||||
|
|
@ -5191,7 +5286,7 @@ type TRegKey = class
|
||||||
begin
|
begin
|
||||||
for i := 1 to 1024 do
|
for i := 1 to 1024 do
|
||||||
begin
|
begin
|
||||||
if s[i]="\0" then
|
if (s[i]="\0") and (i>2) then
|
||||||
begin
|
begin
|
||||||
r[idx]:= s[1:(i-1)];
|
r[idx]:= s[1:(i-1)];
|
||||||
break;
|
break;
|
||||||
|
|
@ -5208,6 +5303,7 @@ type TRegKey = class
|
||||||
{**
|
{**
|
||||||
@param(Handle)(pointer) regkey句柄 %%
|
@param(Handle)(pointer) regkey句柄 %%
|
||||||
**}
|
**}
|
||||||
|
private
|
||||||
end
|
end
|
||||||
type TWinEnviroment=class()
|
type TWinEnviroment=class()
|
||||||
{**
|
{**
|
||||||
|
|
@ -5933,8 +6029,7 @@ type Ttfm2Component = class(TTmfParser)
|
||||||
end
|
end
|
||||||
function hastfmresource(o,cn);
|
function hastfmresource(o,cn);
|
||||||
begin
|
begin
|
||||||
global g_w_tfm_resource;
|
data := get_resource_by_name(cn+".tfm");
|
||||||
data := g_w_tfm_resource[cn+".tfm"];
|
|
||||||
if data then
|
if data then
|
||||||
begin
|
begin
|
||||||
LoadFromTfmScript(o,data);
|
LoadFromTfmScript(o,data);
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ function intersectrect(rec1,rec2,irec);
|
||||||
function bitcombination(s,v,f);
|
function bitcombination(s,v,f);
|
||||||
function IsTextUTF8(str);
|
function IsTextUTF8(str);
|
||||||
function exportjsonformat(d,tbw,ct);
|
function exportjsonformat(d,tbw,ct);
|
||||||
function get_resource_by_name(n);
|
function get_resource_by_name(n,full);
|
||||||
//****************************
|
//****************************
|
||||||
///////////////////
|
///////////////////
|
||||||
function ParserCommandLine(s); //½âÎöÃüÁîÐвÎÊý
|
function ParserCommandLine(s); //½âÎöÃüÁîÐвÎÊý
|
||||||
|
|
@ -3789,22 +3789,64 @@ begin
|
||||||
end
|
end
|
||||||
return "";
|
return "";
|
||||||
end
|
end
|
||||||
function get_resource_by_name(n);
|
function get_resource_by_name(n,full);
|
||||||
begin
|
begin
|
||||||
global g_w_tfm_resource;
|
return static get_resource_by_name_sub(n,full) name (n$":"$full);
|
||||||
return g_w_tfm_resource[n];
|
end
|
||||||
|
function get_resource_by_name_sub(n,full);
|
||||||
|
begin
|
||||||
|
global g_w_tfm_resource,g_w_tfm_resource_withdir,g_w_tfm_resource_names;
|
||||||
|
if n=1 then return g_w_tfm_resource;
|
||||||
|
if n=2 then return g_w_tfm_resource_withdir;
|
||||||
|
if n=3 then return (g_w_tfm_resource union g_w_tfm_resource_withdir);
|
||||||
|
if n=4 then return g_w_tfm_resource_names;
|
||||||
|
p := filesize("","d:\\test\\get_source.txt");
|
||||||
|
|
||||||
|
r := g_w_tfm_resource[n];
|
||||||
|
if r then return r;
|
||||||
|
if full then
|
||||||
|
begin
|
||||||
|
return g_w_tfm_resource_withdir[n];
|
||||||
|
end
|
||||||
|
if not(ifstring(n) and n) then return 0;
|
||||||
|
for i,v in g_w_tfm_resource_withdir do
|
||||||
|
begin
|
||||||
|
nn := replacetext(n,".","\\.");
|
||||||
|
{$ifdef linux}
|
||||||
|
ctl := "/"+nn+"$|^"+nn+"$";
|
||||||
|
{$else}
|
||||||
|
ctl := "\\\\"+nn+"$|^"+nn+"$";
|
||||||
|
{$endif}
|
||||||
|
if 1= parseregexpr(ctl,i,"i",m,mp,ml) then
|
||||||
|
begin
|
||||||
|
return v;
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function uinit();
|
function uinit();
|
||||||
begin
|
begin
|
||||||
global g_w_tfm_resource;
|
global g_w_tfm_resource,g_w_tfm_resource_withdir,g_w_tfm_resource_names;
|
||||||
|
sep := ioFileseparator();
|
||||||
g_w_tfm_resource := array();
|
g_w_tfm_resource := array();
|
||||||
|
g_w_tfm_resource_withdir := array();
|
||||||
|
g_w_tfm_resource_names := array();
|
||||||
|
idx := 0;
|
||||||
try
|
try
|
||||||
getglobalcache("@@tsl-resource@@",rs);
|
getglobalcache("@@tsl-resource@@",rs);
|
||||||
for i,v in rs do
|
for i,v in rs do
|
||||||
begin
|
begin
|
||||||
if ifstring(i) and ifstring(v) then
|
if ifstring(i) and ifstring(v) then
|
||||||
begin
|
begin
|
||||||
g_w_tfm_resource[lowercase(i)] := v;
|
li := lowercase(i);
|
||||||
|
g_w_tfm_resource_names[i] := li;
|
||||||
|
if pos(sep,li) then
|
||||||
|
begin
|
||||||
|
g_w_tfm_resource_withdir[li] := v;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
g_w_tfm_resource[li] := v;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
except
|
except
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,213 @@
|
||||||
|
unit utslvclinstall;
|
||||||
|
interface
|
||||||
|
uses tslvcl;
|
||||||
|
type t_tsl_window_reg = class()
|
||||||
|
function create();
|
||||||
|
begin
|
||||||
|
exe := sysexecname();
|
||||||
|
end
|
||||||
|
///////////////安装uninstall//////////////////////////
|
||||||
|
function get_install_values();
|
||||||
|
begin
|
||||||
|
reg := getuninstallregkey(fexename,1);
|
||||||
|
if ifobj(reg) then
|
||||||
|
begin
|
||||||
|
r := array();
|
||||||
|
for i,v in reg.GetValueNames() do
|
||||||
|
begin
|
||||||
|
r[v] := reg.GetValueA(v,vt);
|
||||||
|
end
|
||||||
|
return r;
|
||||||
|
end else return reg;
|
||||||
|
end
|
||||||
|
function set_install_values(vs);
|
||||||
|
begin
|
||||||
|
reg := getuninstallregkey(fexename,2);
|
||||||
|
if ifobj(reg) then
|
||||||
|
begin
|
||||||
|
for i,v in vs do
|
||||||
|
begin
|
||||||
|
reg.SetValueStringA(i,v);
|
||||||
|
end
|
||||||
|
return r;
|
||||||
|
end else return reg;
|
||||||
|
end
|
||||||
|
function install_info_set(); //设置默认的value
|
||||||
|
begin
|
||||||
|
reg := getuninstallregkey(fexename);
|
||||||
|
if not ifobj(reg) then return reg; //打开注册表错误
|
||||||
|
reg.SetValueStringA("DisplayIcon",fexe);
|
||||||
|
reg.SetValueStringA("DisplayName",getdisplayname());
|
||||||
|
reg.SetValueStringA("DisplayVersion",getdisplayversion());
|
||||||
|
reg.SetValueStringA("Publisher",getpublisher());
|
||||||
|
reg.SetValueStringA("UninstallString",getuninstallstring());
|
||||||
|
reg.SetValueStringA("InstallLocation",fdefaultexedir);
|
||||||
|
reg.SetValueStringA("InstallTime",datetimetostr(now()));
|
||||||
|
return install_info_setex(reg);
|
||||||
|
end
|
||||||
|
function install_info_setex(reg);virtual; //写入额外信息
|
||||||
|
begin
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
function install_info_remove();virtual; //移除安装信息
|
||||||
|
begin
|
||||||
|
reg := getuninstallregkey();
|
||||||
|
if not ifobj(reg) then return reg; //打开注册表错误
|
||||||
|
return reg.DeleteKeyA(fexename);
|
||||||
|
end
|
||||||
|
function has_reg_authority();
|
||||||
|
begin
|
||||||
|
return ifobj(getuninstallregkey(nil,rw));
|
||||||
|
end
|
||||||
|
function get_uninstall_reg(rw);
|
||||||
|
begin
|
||||||
|
return getuninstallregkey(fexename,rw);
|
||||||
|
end
|
||||||
|
///////////////安装右键菜单//////////////////////////////////////
|
||||||
|
function install_backmenu(); //背景菜单
|
||||||
|
begin
|
||||||
|
if not fexe then return -1; //软件错误
|
||||||
|
////////////////////////写入背景菜单////////////////////////////////////
|
||||||
|
reg := getbackregkey(fexename);
|
||||||
|
if not ifobj(reg) then return -2; //打开注册表错误
|
||||||
|
reg.SetValueStringA(nil,fexename);
|
||||||
|
reg.SetValueStringA("Icon",fexe);
|
||||||
|
regcmd := reg.openKeyA("command");
|
||||||
|
regcmd.SetValueStringA(nil,backmenuparam());
|
||||||
|
end
|
||||||
|
|
||||||
|
function uninstall_backmenu(); //卸载
|
||||||
|
begin
|
||||||
|
reg := getbackregkey(nil,2);
|
||||||
|
if not ifobj(reg) then return reg; //打开注册表错误
|
||||||
|
return reg.DeleteTreeA(fexename);
|
||||||
|
end
|
||||||
|
///////////////////安装右键打开菜单/////////////////////////////////
|
||||||
|
function install_backmenuopen();//右键打开菜单
|
||||||
|
begin
|
||||||
|
if not fexe then return -1; //软件错误
|
||||||
|
////////////////////////写入到打开菜单//////////////////////////////////////////////
|
||||||
|
reg := getshellkey(fexename);
|
||||||
|
if not ifobj(reg) then return reg; //打开注册表错误
|
||||||
|
reg.SetValueStringA(nil,fexename);
|
||||||
|
reg.SetValueStringA("Icon",fexe);
|
||||||
|
regcmd := reg.openKeyA("command");
|
||||||
|
regcmd.SetValueStringA(nil,(backmenuopenparam()));
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
function uninstall_backmenuopen();//卸载
|
||||||
|
begin
|
||||||
|
reg := getshellkey(nil,2);
|
||||||
|
if not ifobj(reg) then return reg; //打开注册表错误
|
||||||
|
return reg.DeleteTreeA(fexename);
|
||||||
|
end
|
||||||
|
|
||||||
|
//////////////////////////重写函数///////////////////////////////////////////
|
||||||
|
function getdisplayname();virtual; //显示
|
||||||
|
begin
|
||||||
|
return fexename;
|
||||||
|
end
|
||||||
|
function getdisplayversion();virtual; //版本
|
||||||
|
begin
|
||||||
|
return "1.0.0";
|
||||||
|
end
|
||||||
|
function getpublisher();virtual; //开发者
|
||||||
|
begin
|
||||||
|
return "tinysoft";
|
||||||
|
end
|
||||||
|
function getuninstallstring();virtual; //卸载字符串
|
||||||
|
begin
|
||||||
|
return format('"%s" "%s"',funexe,"-uninstall");
|
||||||
|
end
|
||||||
|
function backmenuparam();virtual; //背景菜单参数
|
||||||
|
begin
|
||||||
|
return format('"%s"',fexe);
|
||||||
|
end
|
||||||
|
function backmenuopenparam();virtual; //
|
||||||
|
begin
|
||||||
|
return format('"%s" "%s"',fexe,"%1");
|
||||||
|
end
|
||||||
|
property installforall read finstallforall write finstallforall;
|
||||||
|
property exe read fexe write setexe;
|
||||||
|
property unexe read funexe write setunexe;
|
||||||
|
property exename read fexename write setexename;
|
||||||
|
private
|
||||||
|
|
||||||
|
fexe;
|
||||||
|
funexe;
|
||||||
|
fexename;
|
||||||
|
fdefaultexedir;
|
||||||
|
finstallforall;
|
||||||
|
private
|
||||||
|
function setexename(s);
|
||||||
|
begin
|
||||||
|
if ifstring(s) and s and (s<>fexename) and not(pos("\\",s)) then
|
||||||
|
begin
|
||||||
|
fexename := s;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function setunexe(e);
|
||||||
|
begin
|
||||||
|
if (funexe<> e) and (ifstring(e) and fileexists("",e)) then
|
||||||
|
begin
|
||||||
|
funexe := e;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function setexe(e);
|
||||||
|
begin
|
||||||
|
if (fexe<>e) and (ifstring(e) and fileexists("",e)) then
|
||||||
|
begin
|
||||||
|
fexe := e;
|
||||||
|
funexe := e;
|
||||||
|
fexename := "";
|
||||||
|
for i:= length(fexe) downto 1 do
|
||||||
|
begin
|
||||||
|
vi := fexe[i];
|
||||||
|
if vi="\\" then
|
||||||
|
begin
|
||||||
|
fdefaultexedir := fexe[1:i];
|
||||||
|
for j := i+1 to length(fexe) do
|
||||||
|
begin
|
||||||
|
vj := fexe[j];
|
||||||
|
if vj ="." then break;
|
||||||
|
fexename+=vj;
|
||||||
|
end
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
///////////////////////常量/////////////////////
|
||||||
|
{$ifdef win32}
|
||||||
|
const c_uninstall_regkey = "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
|
||||||
|
{$else}
|
||||||
|
const c_uninstall_regkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
|
||||||
|
{$endif}
|
||||||
|
const c_install_backshell = "SOFTWARE\\Classes\\Directory\\background\\shell";
|
||||||
|
const c_install_Starshell = "SOFTWARE\\Classes\\*\\shell";
|
||||||
|
function getbasereg(); //基准
|
||||||
|
begin
|
||||||
|
if finstallforall then return class(TRegKey).GetRegKeyMachine(); ;
|
||||||
|
return class(TRegKey).GetRegKeyUser();
|
||||||
|
end
|
||||||
|
function getuninstallregkey(n,rw);//
|
||||||
|
begin
|
||||||
|
o := getbasereg();
|
||||||
|
if n then return o.openKeyA((c_uninstall_regkey+"\\"+n),rw);
|
||||||
|
return o.openKeyA(c_uninstall_regkey,rw);
|
||||||
|
end
|
||||||
|
function getshellkey(n,rw) ; //右键打开菜单
|
||||||
|
begin
|
||||||
|
o := getbasereg();
|
||||||
|
if n then return o.openKeyA((c_install_Starshell+"\\"+n),rw);
|
||||||
|
return o.openKeyA(c_install_Starshell,rw);
|
||||||
|
end
|
||||||
|
function getbackregkey(n,rw); //右键菜单
|
||||||
|
begin
|
||||||
|
o := getbasereg(flg);
|
||||||
|
if n then return o.openKeyA((c_install_backshell+"\\"+n),rw);
|
||||||
|
return o.openKeyA(c_install_backshell,rw);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -2154,10 +2154,9 @@ type ttfmnode = class()
|
||||||
function initinherited();
|
function initinherited();
|
||||||
begin
|
begin
|
||||||
s := finheritedname;
|
s := finheritedname;
|
||||||
global g_w_tfm_resource;
|
|
||||||
if s and ifstring(s) then
|
if s and ifstring(s) then
|
||||||
begin
|
begin
|
||||||
data := g_w_tfm_resource[s+".tfm"];
|
data := get_resource_by_name( s+".tfm");
|
||||||
if data then
|
if data then
|
||||||
begin
|
begin
|
||||||
return get_inherited(data);
|
return get_inherited(data);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue