PDA

View Full Version : چطور می شه برنامه جهت تولید فایل Dfm و Pas را در دلفی نوشت (ویزارد)



mahdy.asia
یک شنبه 12 دی 1389, 15:34 عصر
می می خواهم کد دلفی که در یک فایل اجرایی Genrate می کنم با فرمت dfm و pas ذخیره کنم بدون خارج شدن از فایل اجرایی
میال:
یک برنامه می نویسیم که بصورت Runtime یک edit روی فرم ایجاد می کند پس از اجرا و ایجاد edit فرم جدید را که یک edit روی آن است مانند سورس برنامه در دلفی ذخیره نماییم

vcldeveloper
یک شنبه 12 دی 1389, 15:45 عصر
خب، مشکل کجا ست؟ وقتی به مسئله ایی بر می خورید، به جای نوشتن کل صورت مسئله در اینجا، سعی کنید اون رو به بخش های کوچکتر تقسیم کنید، و از بین اون بخش های کوچکتر، بخش هایی را که در پیاده سازی شان مشکل دارید را اینجا مطرح کنید. الان این کار شما از اجزای مختلفی تشکیل شده؛ انتظار نداشته باشید که یکی بیاد مفت و مجانی همه این اجزاء مختلف را برای شما پیاده سازی کنه. اگر در ساخت اشیاء در runtime مشکل دارید، باید بیاد درباره همون بخش سوال کنید. اگر در ذخیره اشیاء در قالب dfm مشکل دارید، باید درباره همان بخش سوال کنید، و غیره.

mahdy.asia
چهارشنبه 15 دی 1389, 22:22 عصر
اشیاء تولید شده در حالت Runtime را چطور در قالب dfm ذخیره کنم؟

vcldeveloper
چهارشنبه 15 دی 1389, 22:51 عصر
اشیاء تولید شده در حالت Runtime را چطور در قالب dfm ذخیره کنم؟


procedure SaveComponentToFile(Component: TComponent; const FileName: TFileName);
var
FileStream : TFileStream;
MemStream : TMemoryStream;
begin
MemStream := nil;

if not Assigned(Component) then
raise Exception.Create('Component is not assigned');

FileStream := TFileStream.Create(FileName,fmCreate);
try
MemStream := TMemoryStream.Create;
MemStream.WriteComponent(Component);
MemStream.Position := 0;
ObjectBinaryToText(MemStream, FileStream);
finally
MemStream.Free;
FileStream.Free;
end;
end;

procedure LoadComponentFromFile(Component: TComponent; const FileName: TFileName);
var
FileStream : TFileStream;
MemStream : TMemoryStream;
i: Integer;
begin
MemStream := nil;

if not Assigned(Component) then
raise Exception.Create('Component is not assigned');

if FileExists(FileName) then
begin
FileStream := TFileStream.Create(FileName,fmOpenRead);
try
/// If we do not create an instance of the component which is supposed to
/// be loaded, the component instance and its properties are read before
/// the components it owns. If the component is a form, while form is loaded,
/// its DFM is loaded too; therefore, when its owned components are loading,
/// we will face component naming conflict!
/// If component instance is already created, and it is a form, then DFM data
/// is already loaded, so we will again face naming conflict!
/// To avoid the above issue, we are freeing all components the instance
/// owns, before loading the component from stream.
for i := Component.ComponentCount - 1 downto 0 do
Component.Components[i].Free;

MemStream := TMemoryStream.Create;
ObjectTextToBinary(FileStream, MemStream);
MemStream.Position := 0;
MemStream.ReadComponent(Component);
Application.InsertComponent(Component);
finally
MemStream.Free;
FileStream.Free;
end;
end;
end;

mahdy.asia
چهارشنبه 22 دی 1389, 07:33 صبح
فایل Pas رو چطور می شود ذخیره کرد؟

Felony
چهارشنبه 22 دی 1389, 08:27 صبح
فایل Pas رو چطور می شود ذخیره کرد؟
تابع و متد آماده ای برای این کار وجود نداره !!!

شما باید خودتون کد مربوطه رو تولید کنید و توسط TStringList یا ... تو یک فایل ذخیره کنید .

mahdy.asia
چهارشنبه 22 دی 1389, 19:18 عصر
اشیاء و متدهای تولید شده در حالت Runtime را چطور در قالب Pas ذخیره کنم؟

vcldeveloper
پنج شنبه 23 دی 1389, 05:16 صبح
اشیاء و متدهای تولید شده در حالت Runtime را چطور در قالب Pas ذخیره کنم؟
باید خودتون یک فایل pas بسازید، و اشیائی که در runtime تولید می کنید را به تعریف فرم مربوطه اضافه کنید.

mahdy.asia
یک شنبه 26 دی 1389, 22:14 عصر
با توجه به اینکه ساختار این کار ثابت می باشد آیا کدهای آماده جهت اینکار وجود دارد؟

vcldeveloper
یک شنبه 26 دی 1389, 23:16 عصر
با توجه به اینکه ساختار این کار ثابت می باشد آیا کدهای آماده جهت اینکار وجود دارد؟
خیر.

---------