View Full Version : لود فایل Ini به حافظه و خواندن آن از حافظه
iamehsan56
سه شنبه 24 آذر 1388, 11:13 صبح
سلام
من یه فایل ini رو می فرستم تو حافظه و می خوام همونطوری که از فایل ini می خوندم از حافظه بخونم .
مثلا محتوای فایل ini اینه :
[Main]
top=17
اول لود تو حافظه :
stream:= TMemoryStream.Create;
stream.LoadFromFile('c:\b1.ini');
حالا می خوام مقدار top رو از تو حافظه بخونم . واسه اینکار باید چیکار بکنم
لطفا راهنماییم کنید
اصلا این کار شدنیه ؟ یا راه دیگه ای وجود داره
ممنون می شم کمکم کنید
hadisalahi2
سه شنبه 24 آذر 1388, 11:50 صبح
بله میشه
ببین با این کد ها کارت راه می افتد.
procedure ReadControl(Ctrl: TControl);
begin
Top := iniFile.ReadInteger(ctrl.Name,'Top',ctrl.Top);
Left := iniFile.ReadInteger(ctrl.Name,'Left',ctrl.Left);
Width := iniFile.ReadInteger(ctrl.Name,'Width',ctrl.Width);
Height := iniFile.ReadInteger(ctrl.Name,'Height',ctrl.Height );
ctrl.SetBounds(Left,Top,Width,Height);
end;
begin
iniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
ReadControl(Self);
for idx := 0 to -1 + Self.ComponentCount do
begin
if Components[idx] is TControl then ReadControl(TControl(Components[idx]));
end;
finally
FreeAndNil(iniFile);
end;
end; (*ReadControlPlacement*)
procedure TForm1.WriteControlPlacement;
var
iniFile : TIniFile;
idx : integer;
ctrl : TControl;
procedure WriteControl(Ctrl: TControl);
begin
iniFile.WriteInteger(ctrl.Name,'Top',ctrl.Top);
iniFile.WriteInteger(ctrl.Name,'Left',ctrl.Left);
iniFile.WriteInteger(ctrl.Name,'Width',ctrl.Width) ;
iniFile.WriteInteger(ctrl.Name,'Height',ctrl.Heigh t);
end;
begin
iniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
WriteControl(Self);
for idx := 0 to -1 + Self.ComponentCount do
begin
if Components[idx] is TControl then WriteControl(TControl(Components[idx]));
end;
finally
FreeAndNil(iniFile);
end;
end; (*WriteControlPlacement*)
iamehsan56
سه شنبه 24 آذر 1388, 12:06 عصر
راستش اینا مربوط به خوندن و نوشتن تو فایل ini هستش
اما من می خوام فایل ini رو تو حافظه load کنم و به جای خوندن از فایل از تو حافظه به محتویات دسترسی داشته باشم
hadisalahi2
سه شنبه 24 آذر 1388, 12:54 عصر
راستش اینا مربوط به خوندن و نوشتن تو فایل ini هستش
اما من می خوام فایل ini رو تو حافظه load کنم و به جای خوندن از فایل از تو حافظه به محتویات دسترسی داشته باشم
منظورتون از حافظه یعنی چی؟
میخواهید چه اطلاعاتی رو در حافظه ذخیره کنید؟
آیا کنترل ها رو میخواید در حافظه ذخیره کنید؟
iamehsan56
سه شنبه 24 آذر 1388, 13:19 عصر
من یه نمونه فایل Ini دارم
[Text1001]
comp=TJvTransparentButton
Top=124
Left=185
Width=40
Height=40
Tag=1001
Font=MS Sans Serif
Fsize=8
FCol=0
[butGL1002]
comp=TAdvGlassButton
Top=270
Left=279
Width=100
Height=32
Tag=1002
Font=Tahoma
Fsize=8
FCol=-16777208
که prperty های یه سری کنترل هستن
می خوام این فایل رو تو حافطه Stream لود کنم و هر وقت خواستم هر کدوم از اون property ها رو از هر کنترل بخونم .
hadisalahi2
سه شنبه 24 آذر 1388, 20:18 عصر
برای ذخیره کامپوننت ها در حافظه ، شما باید آرایه ای از نوع Tobject تعریف کنید و کنترل های خودتون رو درون اون قرار بدید
iamehsan56
چهارشنبه 25 آذر 1388, 08:24 صبح
دوست من . منظور من قرار دادن فایل ini در حافظه است حالا هر چی تو ini می خواد باشه .
راهشو پیدا کردم
AppIni := TmemIniFile.Create('c:\b1.ini');
AppIni.ReadSections(ListBox1.Items);
AppIni.ReadSection('GPanel1002',Listbox2.Items);
AppIni.ReadSectionValues('GPanel1002',ListBox3.Ite ms);
d:=appini.ReadInteger('GPanel1002','top',c);
باید از TMeminifile استفاده کرد مشابه TiniFile هستش فقط می شه بعد از خوندن فایل اونو تو یه TstringList قرار داد و به محتویاتش دسترسی داشت
tstr1:=TStringList.Create;
AppIni.ReadSections(tstr1);
for i:=0 to tstr1.Count-1 do
ListBox4.Items.Add(tstr1.Strings[i]);
tstr1.free;
hadisalahi2
پنج شنبه 26 آذر 1388, 08:53 صبح
دوست عزیز شما که نگفته بودید مقادیر داخل کنترلهای لیستی رو میخواید داخل حافظه قرار بدید.
روش پیشنهادی من برای خود کنترلهاست نه برای مقادیر رشته ای
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.