如何在应用程序中生成一个Delphi工程文件?(100分)

  • 主题发起人 主题发起人 yx12
  • 开始时间 开始时间
Y

yx12

Unregistered / Unconfirmed
GUEST, unregistred user!
类似DeDe,当然我要的不是象它那么复杂还要去破解别的程序,只要能够生成一个空白
的*.dpr,*.pas文件即可
 
自己用记事本写一个.dpr和.pas文件,结构恨简单:.dpr是这样:
program myexe;
interface

implementation

end.

.pas 是这样:
unit myunit;
interface

implementation

end.
上述即可。非常简单。
 
to ~风之彼端~:
谢谢你的回复 不过你也未免太夸张了哈哈哈
另*.dfm文件也是要的
 
这个问题应该是直接运行Project,中的Bulid ALL Project即可以自动生成一个空的工程文件。不知这样回答是否可行,请试试看。
 
哈,这个.dfm文件也简单呀?你可以打开*.dfm文件(用记事本)看看,结构很简单的,许多属性不用写,保持一个默认的TForm的Object即可,再在.pas中假如一个TForm的声明和一个{$ *.dfm}编译指令即可。本来就简单嘛。
 
to ~风之彼端~ :)
to all: 继续等待中...
 
楼上两位不会不想用Delphi了吧。想到什么了,贴出来我也想向你们两位学习的呀!
 
怀疑我表达能力是不是有问题-:)
其实就是如何在非IDE环境中生成一个Delphi文件。
例如在系统右键菜单新建中就可以建立一个Word文件、Winamp文件等等,
类似的我希望直接建立一个Delphi文件该怎么做(当然不是外壳扩展的问题)?
另外相关的过程必须有扩展性,可以再往窗体上增加组件及过程代码
 
很久以前的代码,for d5-d7
作用是把保存在书库中的源代码转成delphi工程,参考一下吧
var i,j,Level,Count,ii:integer;
s,sourcePath:string;
ProjList,FileList:PStringList;
stm1:TFileStream;
stm2:TMemoryStream;
sfmt:TStreamOriginalFormat;
begin
if FMemo<>nil then begin
SourcePath:=ExtractFilePath(projectName);
Result:=False;
if FTV.Selected=nil then exit;
// ParentID:=FTV.Selected.AbsoluteIndex;
Level:=FTV.Selected.Level;
if FileExists(ProjectName) then
if MessageDlg('文件已存在,覆盖吗?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
exit;
if FMemo.Text='' then exit;
New(ProjList);
ProjList^:=TStringList.Create;
new(FileList);
FileList^:=TStringList.Create;
ProjList^.Text:=FMemo.Text;
for i:=0 to ProjList^.Count-1 do begin
if trim(ProjList^.Strings)<>'//' then begin
break;
end;
end;
s:=UpperCase(copy(trim(ProjList^.Strings),1,7));

try
GetProjectFilesName(ProjList,FileList);
for i:=0 to Filelist^.count-1 do
begin
if ExtractFilePath(Filelist^.Strings)<>'' then
if not DirectoryExists(ExtractFilePath(Filelist^.Strings)) then
mkdir(ExtractFilePath(Filelist^.strings));
if pbar<>nil then
pbar.Position:=((i+1)*100 div FileList.Count);
application.ProcessMessages;
end;

if IsDelphiProjectFile(s) then begin
ProjList^.Text:=FMemo.Text;
ProjList^.SaveToFile(ProjectName);
i:=FTV.Selected.AbsoluteIndex+1;
// Count:=0;
while (i<FTV.Items.Count)and (level<FTV.Items.Level) do begin
i:=i+1;
end;
Count:=i;
i:=FTV.Selected.AbsoluteIndex+1;
ii:=i;
while (i<Count) and (level<FTV.Items.Level) do begin
s:='';
for j:=0 to Filelist^.Count-1 do
begin
FTV.Items[j].Selected:=True;
TVChange(FTV,FTV.Selected);
// application.ProcessMessages;
if pos(uppercase(copy(FTV.Items.Text,1,length(FTV.Items.Text)-4)),uppercase(Filelist^.Strings[j]))>0 then
begin
s:=ExtractFilePath(Filelist^.Strings[j]);
break;
end;
end;
FTV.Items.Selected:=True;
TVChange(FTV,FTV.Selected);
// Application.ProcessMessages;
if pos('.PAS',uppercase(FTV.Items.Text))>0 then begin
ProjList^.Text:=FMemo.Text;
ProjList^.SaveToFile(sourcePath+s+FTV.Items.Text);
end else if pos('.DFM',uppercase(FTV.Items.Text))>0 then begin
ProjList^.Text:=FMemo.Text;
stm2:=TMemoryStream.Create;
ProjList^.SaveToStream(stm2);
stm1:=TFileStream.Create(SourcePath+s+FTV.Selected.Text,fmCreate);
try
stm2.Position:=0;
stm1.Position:=0;
sfmt:=TestStreamFormat(stm2);
ObjectTextToResource(stm2,stm1,sfmt);
finally
stm1.Destroy;
stm2.Destroy;
end;
end;
if Pbar<>nil then
pbar.Position:=(i-ii+1)*100 div (Count-ii);
Application.ProcessMessages;
i:=i+1;
end;
showMessage('工程文件导出完毕');
Result:=True;
end;
finally
ProjList^.Destroy;
FIleList^.Destroy;
dispose(ProjList);
dispose(FileList);
pbar.Position:=0;
if PBar<>nil then
PBar.Position:=0;
end;
end else
Result:=False;
end;
 
to wfzha:
多谢!TStringList.SaveToFile确实很好用。
加上ObjectTextToResource转换资源 一切搞定哈哈哈~~~
 
接受答案了.
 
后退
顶部