DM_
Давненько
Offline
Сообщений: 68
СПАСИБО
-вы поблагодарили: 7
-вас поблагодарили: 21
|
|
� : Май 24, 2013, 14:23:31 � |
|
Есть запись параметров динамических компонентов checkbox в ini for k:=1 to c do begin tmp:=FindComponent('CheckBox'+IntToStr(k)); if tmp<>nil then begin IniFile.WriteString((tmp as TCheckBox).name,(tmp as TCheckBox).name,(tmp as TCheckBox).name); IniFile.WriteString((tmp as TCheckBox).name,(tmp as TCheckBox).name+'.caption',(tmp as TCheckBox).caption); IniFile.WriteInteger((tmp as TCheckBox).name,(tmp as TCheckBox).name+'.top',(tmp as TCheckBox).Top); IniFile.WriteInteger((tmp as TCheckBox).name,(tmp as TCheckBox).name+'.left',(tmp as TCheckBox).Left); IniFile.WriteInteger((tmp as TCheckBox).name,(tmp as TCheckBox).name+'.width',(tmp as TCheckBox).width); IniFile.WriteInteger((tmp as TCheckBox).name,(tmp as TCheckBox).name+'.height',(tmp as TCheckBox).height); IniFile.WriteBool((tmp as TCheckBox).name,(tmp as TCheckBox).name+'.checked',(tmp as TCheckBox).checked); end; end; Собственно вопрос, как их можно считать?
|
|
|
Записан
|
|
|
|
iPhonograph
Гений-Говорун
Offline
Сообщений: 2100
СПАСИБО
-вы поблагодарили: 561
-вас поблагодарили: 1315
Дискоед
|
|
� Ответ #1 : Май 24, 2013, 15:48:46 � |
|
Через TMemIniFile
|
|
|
Записан
|
"Было бы величайшей ошибкой думать" (с) В.И.Ленин, Полн. cобр. cоч., т.34, стр.375
|
|
|
DM_
Давненько
Offline
Сообщений: 68
СПАСИБО
-вы поблагодарили: 7
-вас поблагодарили: 21
|
|
� Ответ #2 : Май 24, 2013, 15:51:07 � |
|
Через TMemIniFile
можешь код написать? насчет статических компонентов я вроде разобрался, а вот над динамическими уже два дня сижу
|
|
� Последнее редактирование: Май 24, 2013, 16:18:13 от DM_ �
|
Записан
|
|
|
|
iPhonograph
Гений-Говорун
Offline
Сообщений: 2100
СПАСИБО
-вы поблагодарили: 561
-вас поблагодарили: 1315
Дискоед
|
|
� Ответ #3 : Май 24, 2013, 16:50:53 � |
|
примеров в инете куча { This example demonstrates the use of Ini files in order to store and load form configurations between sessions. This example requires a RadioGroup and two buttons. } procedure TForm2.btLoadClick(Sender: TObject); var SettingsFile : TCustomIniFile; begin { Open an instance } SettingsFile := OpenIniFileInstance();
try { Read all saved values from the last session. The section name is the name of the form. Also use form's properties as defaults } Top := SettingsFile.ReadInteger(Name, 'Top', Top ); Left := SettingsFile.ReadInteger(Name, 'Left', Left ); Width := SettingsFile.ReadInteger(Name, 'Width', Width ); Height := SettingsFile.ReadInteger(Name, 'Height', Height ); Caption := SettingsFile.ReadString (Name, 'Caption', Caption);
{ Load last window state } case SettingsFile.ReadBool(Name, 'InitMax', WindowState = wsMaximized) of true : WindowState := wsMaximized; false: WindowState := wsNormal; end;
finally SettingsFile.Free; end; end;
procedure TForm2.btStoreClick(Sender: TObject); var SettingsFile: TCustomIniFile; begin { Open an instance } SettingsFile := OpenIniFileInstance();
{ Store current form properties to be used in later sessions. } try SettingsFile.WriteInteger (Name, 'Top', Top); SettingsFile.WriteInteger (Name, 'Left', Left); SettingsFile.WriteInteger (Name, 'Width', Width); SettingsFile.WriteInteger (Name, 'Height', Height); SettingsFile.WriteString (Name, 'Caption', Caption); SettingsFile.WriteBool (Name, 'InitMax', WindowState = wsMaximized ); SettingsFile.WriteDateTime(Name, 'LastRun', Now); finally SettingsFile.Free; end;
end;
function TForm2.OpenIniFileInstance: TCustomIniFile; begin { Open/create a new INI file that has the same name as our executable only with the INI extension. }
case RadioGroup1.ItemIndex of 0: begin { Registry mode selected: in HKEY_CURRENT_USER\Software\... } Result := TRegistryIniFile.Create('Software\' + Application.Title); end; 1: begin { Ini file mode selected } Result := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI')); end; 2: begin { Memory based Ini file mode selected } Result := TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.INI')); end; end; end;
|
"Было бы величайшей ошибкой думать" (с) В.И.Ленин, Полн. cобр. cоч., т.34, стр.375
|
|
|
iPhonograph
Гений-Говорун
Offline
Сообщений: 2100
СПАСИБО
-вы поблагодарили: 561
-вас поблагодарили: 1315
Дискоед
|
|
� Ответ #4 : Май 24, 2013, 19:00:55 � |
|
вот мой код из реального проекта, по которому легко разобраться как сохранять в ini-файл procedure TfrmSetup.SaveServicesGrids; var F: TMemIniFile; i, j: Integer; Grid: TStringGrid; Key, Value, SectionName: String; begin F := TMemIniFile.Create(ServicesDir + ServicesIniFile); // Записать все данные из закладок в ini-файл, предварительно очистив все его секции F.Clear; for i := 0 to NumberOfGrids-1 do begin Grid := All_Grids[i]; SectionName := (Grid.Parent as TTabSheet).Caption; for j := 1 to Grid.RowCount-1 do begin Key := Grid.Cells[0, j]; Value := Grid.Cells[1, j]; if Key <> '' then F.WriteString(SectionName, Key, Value); end; end; F.UpdateFile; F.Free; end;
|
|
|
Записан
|
"Было бы величайшей ошибкой думать" (с) В.И.Ленин, Полн. cобр. cоч., т.34, стр.375
|
|
|
iPhonograph
Гений-Говорун
Offline
Сообщений: 2100
СПАСИБО
-вы поблагодарили: 561
-вас поблагодарили: 1315
Дискоед
|
|
� Ответ #5 : Май 24, 2013, 19:37:56 � |
|
А вот как считывать секции, имена которых неизвестны на момент компиляции procedure TfrmSetup.LoadServicesGrids; var F: TMemIniFile; SectionNames_List, DataItems_List: TStringList; i, j, k: Integer; SectionName, KeyValue: String; begin F := TMemIniFile.Create(ServicesDir + ServicesIniFile); SectionNames_List := TStringList.Create; DataItems_List := TStringList.Create; // Считать все секции ini-файла F.ReadSections(SectionNames_List); for i := 0 to SectionNames_List.Count-1 do begin SectionName := SectionNames_List[i]; F.ReadSectionValues(SectionName, DataItems_List); for j := 0 to DataItems_List.Count-1 do begin KeyValue := DataItems_List[j]; k := Pos('=', KeyValue); параметр := Copy(KeyValue, 1, k-1); значение := Copy(KeyValue, k+1, Length(KeyValue)-k); // end; end; SectionNames_List.Free; DataItems_List.Free; F.Free; end;
|
|
|
Записан
|
"Было бы величайшей ошибкой думать" (с) В.И.Ленин, Полн. cобр. cоч., т.34, стр.375
|
|
|
DM_
Давненько
Offline
Сообщений: 68
СПАСИБО
-вы поблагодарили: 7
-вас поблагодарили: 21
|
|
� Ответ #6 : Май 25, 2013, 06:15:18 � |
|
оказалось все просто, кому интересно: c:=IniFile.ReadInteger('Form2','c',c); for i:=0 to c do if IniFile.ReadInteger('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.top',-100)<>-100 then begin tmp:=tcheckbox.Create(self); tmp.Parent := self; if tmp<>nil then begin tmp.Top := IniFile.ReadInteger('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.top',0); tmp.left := IniFile.ReadInteger('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.left',0); tmp.checked := IniFile.ReadBool('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.checked',false); tmp.width := IniFile.ReadInteger('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.width',0); tmp.height := IniFile.ReadInteger('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.height',0); tmp.name := IniFile.ReadString('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.name',tmp.name); tmp.caption := IniFile.ReadString('CheckBox'+inttostr(i),'CheckBox'+inttostr(i)+'.caption',tmp.caption); end; end;
|
|
|
Записан
|
|
|
|
Sirion
|
|
� Ответ #7 : Май 30, 2013, 11:36:10 � |
|
делфи не нужен
|
|
|
Записан
|
sirion=irion+srion+rion+siion+iion+sion+ion+siron+iron+sron+ron+sion+ion+son+on+sirin+ +irin+srin+rin+siin+iin+sin+in+sirn+irn+srn+rn+sin+in+sn+n+sirio+irio+srio+rio+siio+ +iio+sio+io+siro+iro+sro+ro+sio+io+so+o+siri+iri+sri+ri+sii+ii+si+i+sir+ir+sr+r+si+i+s
|
|
|
iPhonograph
Гений-Говорун
Offline
Сообщений: 2100
СПАСИБО
-вы поблагодарили: 561
-вас поблагодарили: 1315
Дискоед
|
|
� Ответ #8 : Май 30, 2013, 16:48:21 � |
|
сирион не нужен ))
|
"Было бы величайшей ошибкой думать" (с) В.И.Ленин, Полн. cобр. cоч., т.34, стр.375
|
|
|
|