{ tsl界面设计器启动程序 } uses tslvcl,utslvclDesigner; oldlib := sysgettsllibpath(); isdebug := false; willopen := ""; i := 0; ct := sysparamcount(); while i<=ct do begin if ("-tpj"=sysparamstr(i)) then //打开工程 begin i++; if i<=ct then willopen := sysparamstr(i); end else if ("-DEBUGSERVER" = sysparamstr(i)) then begin isdebug := true; end else if ("-libpath" = sysparamstr(i)) then //设置libpahth begin i++; if i<=ct then begin ph := sysparamstr(i); if oldlib<>ph then begin try syssettsllibpath(ph); except end; end end end i++; end deletefuncacheini(); h := FindWindowA("tsluidesigner_a_a_1",nil); //查找唯一窗口 if not(isdebug) and h then begin return PostMessageA(h,0x400,303,10); end setprocessdpiawareness(2); app := InitializeApplication(); app.createform(class(TVclDesignerStart),Desginer); Desginer.Show(); if willopen then Desginer.OpenFileFromTpjFile(willopen); r := app.run(); return r; type TVclDesignerStart = class(TVclDesigner) //实现唯一的窗口 function create(AOwner); begin inherited; end function WMUSER(o,e):WM_USER;override; begin if e.wparam = 303 and e.lparam=10 then begin Show(SW_SHOWMINIMIZED); PostMessageA(self.handle,WM_USER,303,12); end else if e.wparam = 303 and e.lparam=12 then begin Show(SW_SHOWNORMAL); _wapi.bringWindowToTop(self.Handle); end inherited; end function CreateParams(p);override; begin inherited; p.WinClassName := "tsluidesigner_a_a_1"; end end function deletefuncacheini(); begin return filedelete("",(TS_ModulePath()+"FunCache.ini")); end {$ifdef linux} function PostMessageA(); begin end function FindWindowA(); begin end {$else} function PostMessageA(hWnd:pointer;Msg:integer;wParam:pointer;lParam:pointer):integer;stdcall;external "User32.dll" name "PostMessageA"; //引入api function FindWindowA(lpClassName:string;lpWindowName:string):pointer;stdcall;external "User32.dll" name "FindWindowA";//引入api {$endif}