diff --git a/designer/tslvcldesigner.tsf b/designer/tslvcldesigner.tsf index 6c7acf3..8d13aa4 100644 --- a/designer/tslvcldesigner.tsf +++ b/designer/tslvcldesigner.tsf @@ -861,6 +861,10 @@ type TVclDesigner = class(tvcform) end end end + function isloadednode(wndnode); + begin + return fwindowinfos.getdata(wndnode); + end function UnLoadTreeNode(wndnode); //卸载控件树 begin {** diff --git a/designer/udesignerproject.tsf b/designer/udesignerproject.tsf index 8a3c698..408c5a0 100644 --- a/designer/udesignerproject.tsf +++ b/designer/udesignerproject.tsf @@ -818,11 +818,21 @@ type TProjectView = class(TVCForm) // //打开界面 FDesigner.caption := "TVCL界面设计器 "+FprojName+"->"+FCurrentOpend["name"]; FTmfParser.fssourdirs := FCurrentOpend.gettmfdirs(); - FTmfParser.ScriptPath := FCurrentOpend.gettmfname(); - FTfmComponets := array(); - FTmfParser.GetAllSubObjects(nil,FTfmComponets); - FDesigner.LoadTreeNode(FTmfParser,inh,FCurrentOpend); - FDesigner.EditerCodeChanged(); + tfm := FCurrentOpend.gettmfname(); + it := FTslEditer.OpenAndGoLineByName(tfm); + if it then + begin + //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 begin FDesigner.ExecuteCommand("hiddrennode",nil); @@ -1070,26 +1080,30 @@ end if ph then ph += fio; else ph := ""; ph := cprojpath+ph+n+".tsf"; + tfm := FCProjectPath+"resource.tfm"+fio+n+".tfm"; if not(FileExists("",ph))then begin r := CreateAForm(n); ReWriteString(ph,r); r := CreateAtfm(n,n); - ReWriteString((FCProjectPath+"resource.tfm"+fio+n+".tfm"),r); + ReWriteString(tfm,r); end else //已经存在 begin - inh := getwindowinherited2(ph); - if inh = array("tdcreateform") then - begin - fn["type"]:= "form"; - end else - if inh = array("tdcreatepanel") then - begin - fn["type"]:= "panel"; - end else - begin - fn["type"]:= "tsf"; - end + if FileExists("",tfm) then + begin + inh := getwindowinherited2(ph); + if inh = array("tdcreateform") then + begin + fn["type"]:= "form"; + end else + if inh = array("tdcreatepanel") then + begin + fn["type"]:= "panel"; + end else + begin + fn["type"]:= "tsf"; + end + end else fn["type"]:= "tsf"; end FTree.SetFileToNode(fn); SaveProjInfo(); @@ -1105,26 +1119,31 @@ end if ph then ph += fio; else ph := ""; ph := cprojpath+ph+n+".tsf"; + tfm := (FCProjectPath+"resource.tfm"+fio+n+".tfm"); if not FileExists("",ph)then begin r := CreateAPanel(n); ReWriteString(ph,r); r := CreateAtfm(n,n); - ReWriteString((FCProjectPath+"resource.tfm"+fio+n+".tfm"),r); + ReWriteString(tfm,r); end else begin - inh := getwindowinherited2(ph); - if inh = array("tdcreateform") then - begin - fn["type"]:= "form"; - end else - if inh = array("tdcreatepanel") then - begin - fn["type"]:= "panel"; - end else - begin - fn["type"]:= "tsf"; - end + if FileExists("",tfm) then + begin + inh := getwindowinherited2(ph); + if inh = array("tdcreateform") then + begin + fn["type"]:= "form"; + end else + if inh = array("tdcreatepanel") then + begin + fn["type"]:= "panel"; + end else + begin + fn["type"]:= "tsf"; + end + end else fn["type"]:= "tsf"; + end FTree.SetFileToNode(fn); SaveProjInfo(); @@ -1341,6 +1360,10 @@ end if not nd then nd := FCurrentOpend; if nd then begin + if not(FDesigner.isloadednode(nd)) then //判断是否保存 + begin + return ; + end case nd["type"]of "form","panel": begin @@ -1349,7 +1372,17 @@ end if fn then begin 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; @@ -1901,6 +1934,7 @@ type TFileTree = class(TTreeCtl) //function SetType() FName; // a FFType; //dir + ftfmscript; private function setfileinfo(v); begin @@ -2847,8 +2881,8 @@ begin end hs := nil; vt := ""; - if f["virtual"]then vt := "virtual;"; - if ifstring(n)and ifstring(b)then + if f["virtual"] then vt := "virtual;"; + if ifstring(n) and ifstring(b)then begin //hs := "\r\nfunction "+n+"("+ps+");"+vt+"\r\n\tbegin\r\n"+b+"\r\n\tend\r\n"; bs := str2array(b,"\r\n"); diff --git a/designer/utslvcldcomponents.tsf b/designer/utslvcldcomponents.tsf index feac2c8..df21287 100644 --- a/designer/utslvcldcomponents.tsf +++ b/designer/utslvcldcomponents.tsf @@ -589,6 +589,7 @@ type TDComponent = class() r := array(); r["name"] := n; r["event"] := n; + r["virtual"] := true; r["param"] := array("o","e"); r["body"] := format(" diff --git a/funcext/tvclib/tcomponent.tsf b/funcext/tvclib/tcomponent.tsf index 87001df..4ce6a76 100644 --- a/funcext/tvclib/tcomponent.tsf +++ b/funcext/tvclib/tcomponent.tsf @@ -552,7 +552,7 @@ public // for i,vi in ps do begin 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]; if ifnil(vv)then continue; vit := vi["type"];