设计器

优化保存加载
This commit is contained in:
JianjunLiu 2022-10-19 11:19:00 +08:00
parent e2cc54dcbc
commit 85d5aea39e
4 changed files with 74 additions and 35 deletions

View File

@ -861,6 +861,10 @@ type TVclDesigner = class(tvcform)
end end
end end
end end
function isloadednode(wndnode);
begin
return fwindowinfos.getdata(wndnode);
end
function UnLoadTreeNode(wndnode); //卸载控件树 function UnLoadTreeNode(wndnode); //卸载控件树
begin begin
{** {**

View File

@ -818,11 +818,21 @@ type TProjectView = class(TVCForm) //
//打开界面 //打开界面
FDesigner.caption := "TVCL界面设计器 "+FprojName+"->"+FCurrentOpend["name"]; FDesigner.caption := "TVCL界面设计器 "+FprojName+"->"+FCurrentOpend["name"];
FTmfParser.fssourdirs := FCurrentOpend.gettmfdirs(); FTmfParser.fssourdirs := FCurrentOpend.gettmfdirs();
FTmfParser.ScriptPath := FCurrentOpend.gettmfname(); tfm := FCurrentOpend.gettmfname();
FTfmComponets := array(); it := FTslEditer.OpenAndGoLineByName(tfm);
FTmfParser.GetAllSubObjects(nil,FTfmComponets); if it then
FDesigner.LoadTreeNode(FTmfParser,inh,FCurrentOpend); begin
FDesigner.EditerCodeChanged(); //FTmfParser.ScriptPath := FCurrentOpend.gettmfname();
sc := it.FEditer.text;
FTmfParser.Script := sc;
FCurrentOpend.ftfmscript := sc;
FTslEditer.CloseScriptByFileName(tfm);
//FTfmComponets := array();
//FTmfParser.GetAllSubObjects(nil,FTfmComponets);
FDesigner.LoadTreeNode(FTmfParser,inh,FCurrentOpend);
FDesigner.EditerCodeChanged();
end
end else end else
begin begin
FDesigner.ExecuteCommand("hiddrennode",nil); FDesigner.ExecuteCommand("hiddrennode",nil);
@ -1070,26 +1080,30 @@ end
if ph then ph += fio; if ph then ph += fio;
else ph := ""; else ph := "";
ph := cprojpath+ph+n+".tsf"; ph := cprojpath+ph+n+".tsf";
tfm := FCProjectPath+"resource.tfm"+fio+n+".tfm";
if not(FileExists("",ph))then if not(FileExists("",ph))then
begin begin
r := CreateAForm(n); r := CreateAForm(n);
ReWriteString(ph,r); ReWriteString(ph,r);
r := CreateAtfm(n,n); r := CreateAtfm(n,n);
ReWriteString((FCProjectPath+"resource.tfm"+fio+n+".tfm"),r); ReWriteString(tfm,r);
end else //已经存在 end else //已经存在
begin begin
inh := getwindowinherited2(ph); if FileExists("",tfm) then
if inh = array("tdcreateform") then begin
begin inh := getwindowinherited2(ph);
fn["type"]:= "form"; if inh = array("tdcreateform") then
end else begin
if inh = array("tdcreatepanel") then fn["type"]:= "form";
begin end else
fn["type"]:= "panel"; if inh = array("tdcreatepanel") then
end else begin
begin fn["type"]:= "panel";
fn["type"]:= "tsf"; end else
end begin
fn["type"]:= "tsf";
end
end else fn["type"]:= "tsf";
end end
FTree.SetFileToNode(fn); FTree.SetFileToNode(fn);
SaveProjInfo(); SaveProjInfo();
@ -1105,26 +1119,31 @@ end
if ph then ph += fio; if ph then ph += fio;
else ph := ""; else ph := "";
ph := cprojpath+ph+n+".tsf"; ph := cprojpath+ph+n+".tsf";
tfm := (FCProjectPath+"resource.tfm"+fio+n+".tfm");
if not FileExists("",ph)then if not FileExists("",ph)then
begin begin
r := CreateAPanel(n); r := CreateAPanel(n);
ReWriteString(ph,r); ReWriteString(ph,r);
r := CreateAtfm(n,n); r := CreateAtfm(n,n);
ReWriteString((FCProjectPath+"resource.tfm"+fio+n+".tfm"),r); ReWriteString(tfm,r);
end else end else
begin begin
inh := getwindowinherited2(ph); if FileExists("",tfm) then
if inh = array("tdcreateform") then begin
begin inh := getwindowinherited2(ph);
fn["type"]:= "form"; if inh = array("tdcreateform") then
end else begin
if inh = array("tdcreatepanel") then fn["type"]:= "form";
begin end else
fn["type"]:= "panel"; if inh = array("tdcreatepanel") then
end else begin
begin fn["type"]:= "panel";
fn["type"]:= "tsf"; end else
end begin
fn["type"]:= "tsf";
end
end else fn["type"]:= "tsf";
end end
FTree.SetFileToNode(fn); FTree.SetFileToNode(fn);
SaveProjInfo(); SaveProjInfo();
@ -1341,6 +1360,10 @@ end
if not nd then nd := FCurrentOpend; if not nd then nd := FCurrentOpend;
if nd then if nd then
begin begin
if not(FDesigner.isloadednode(nd)) then //判断是否保存
begin
return ;
end
case nd["type"]of case nd["type"]of
"form","panel": "form","panel":
begin begin
@ -1349,7 +1372,17 @@ end
if fn then if fn then
begin begin
tfm := FDesigner.TreeNode2tfm(lib,items,nd); tfm := FDesigner.TreeNode2tfm(lib,items,nd);
ReWriteString(fn,tfm); if nd.ftfmscript<>tfm then //发生了改变
begin
nd.ftfmscript := tfm ;
it := FTslEditer.OpenAndGoLineByName(fn);
if it then
begin
it.FEditer.text := tfm;
FTslEditer.SaveFileByName(fn);
end
end
//ReWriteString(fn,tfm);
end end
end end
end; end;
@ -1901,6 +1934,7 @@ type TFileTree = class(TTreeCtl)
//function SetType() //function SetType()
FName; // a FName; // a
FFType; //dir FFType; //dir
ftfmscript;
private private
function setfileinfo(v); function setfileinfo(v);
begin begin
@ -2847,8 +2881,8 @@ begin
end end
hs := nil; hs := nil;
vt := ""; vt := "";
if f["virtual"]then vt := "virtual;"; if f["virtual"] then vt := "virtual;";
if ifstring(n)and ifstring(b)then if ifstring(n) and ifstring(b)then
begin begin
//hs := "\r\nfunction "+n+"("+ps+");"+vt+"\r\n\tbegin\r\n"+b+"\r\n\tend\r\n"; //hs := "\r\nfunction "+n+"("+ps+");"+vt+"\r\n\tbegin\r\n"+b+"\r\n\tend\r\n";
bs := str2array(b,"\r\n"); bs := str2array(b,"\r\n");

View File

@ -589,6 +589,7 @@ type TDComponent = class()
r := array(); r := array();
r["name"] := n; r["name"] := n;
r["event"] := n; r["event"] := n;
r["virtual"] := true;
r["param"] := array("o","e"); r["param"] := array("o","e");
r["body"] := r["body"] :=
format(" format("

View File

@ -552,7 +552,7 @@ public //
for i,vi in ps do for i,vi in ps do
begin begin
n := vi["name"]; n := vi["name"];
if ifarray(FChangedPropertiesflg) and FChangedPropertiesflg[n] then continue; if (f<>2) and ifarray(FChangedPropertiesflg) and FChangedPropertiesflg[n] then continue;
vv := FChangedProperties[n]; vv := FChangedProperties[n];
if ifnil(vv)then continue; if ifnil(vv)then continue;
vit := vi["type"]; vit := vi["type"];