ایجاد و ذخیره خصوصیات عنصر توسط کاربر
با عرض سلام و وقت بخیر به اساتید محترم
من میخوام برنامم به کاربر امکان ایجاد عناصر رو بده.
چونکه نمی خوام اشتباهات گذشته رو تکرار کنم از اساتید میخوام راهنمایی کنند بهترین روش برای این کار چیه.
خصوصیات عنصر (رنگ - فونت - سایز - اندازه - مکان عنصر - قابلیت نمایش و... ) ساخته شده توسط کاربر ذخیره و عنصر هنگام باز شدن برنامه خودکار بازسازی بشه.
چیزی که تو ذهنم هستش اینه که کلیه خصوصیات رو توی دیتا بیس ذخیره کنم.
ممنون میشم اساتید راهنمایی کنند ایا روش بهتری هستش با نه؟
نقل قول: ایجاد و ذخیره خصوصیات عنصر توسط کاربر
روش منطقی همین ذخیره در بانک اطلاعاتی هستش
اما میتونی از فایلهای XML و INI هم استفاده کنی
نقل قول: ایجاد و ذخیره خصوصیات عنصر توسط کاربر
روش درستش Serialize کردن شی هست تا تبدیل بشه به متن و برعکس. شما نمی دونید اشیای جدید چه خصوصیاتی دارند.
نقل قول: ایجاد و ذخیره خصوصیات عنصر توسط کاربر
ضمن عرض سلام خدمت استاد گرامی You-Seeاگه امکان داره یکم توضیح بدین یا یک مثال بزارین ممنون میشم
نقل قول: ایجاد و ذخیره خصوصیات عنصر توسط کاربر
نقل قول: ایجاد و ذخیره خصوصیات عنصر توسط کاربر
سلام جناب you-see عزیز
ببخشید من هرکار کردم نتونستم از روشی که گفته بودین استفاده کنم
نمی دونم شاید باید از یونیت یا چیزی استفاده کنم ولی هرچی جستجو کردم به نتیجه ای نرسیدم.
اگه امکان داره یک مثال از نحوه ذخیره و بازیابی اطلاعات بزارین
قبلا از شما متشکرم
coTest: TStorage;
coStore: TStorageItem;
i: Integer;
begin
coTest := TStorage.Create(TStorageItem);
with TXMLSerializer.Create(self) do
begin
XMLSettings.WellFormated := true;
SpecialClasses := [scTCollection];
LoadFromFile('C:\test.xml');
LoadObject(coTest, 'Test');
end;
ListBox1.Clear;
for i := 0 to coTest.Count - 1 do
begin
ListBox1.AddItem(coTest.Items[i].Text, nil); end;
نقل قول: ایجاد و ذخیره خصوصیات عنصر توسط کاربر
خودم به یه جاهایی رسیدم اینجا میزارم شاید به درد کسی بخوره
این کد مشخصات یک لیبل رو درون یک ممو نمایش میده و دوباره از طریق همین مشخصات لیبل رو میسازه
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;
type
TForm1 = class(TForm)
lbl1: TLabel;
btn1: TBitBtn;
btn2: TBitBtn;
btn3: TBitBtn;
dlgFont1: TFontDialog;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
lbl1 = class(Tlabel)
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ComponentToStringProc(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
function StringToComponentProc(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result:= BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
Mmo1.Text:= ComponentToStringProc(lbl1);
end;
procedure TForm1.btn2Click(Sender: TObject);
var
lbl2:Tlabel;
begin
lbl1.Free;
lbl1:=(StringToComponentProc(Mmo1.Text) as TLabel);
lbl1.Parent:= Form1;
lbl1.Visible:= TRUE;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
if dlgFont1.Execute then lbl1.Font:=dlgFont1.Font;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
lbl1.Free;
end;
initialization
RegisterClass(Tlabel);
end.