Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

запись в один .ini состояния MainForm и Form2   Найти похожие ветки 

 
Garacio ©   (2007-01-14 10:30) [0]

Я сохраняю содержимое 2-х Edit на главной форме в save.ini. Как мне дополнить код, чтобы в этом-же save.ini сохранялись состояния CheckBox-ов на Form2? (и, соответственно, восстанавливались при запуске приложения)


 
Джо ©   (2007-01-14 10:31) [1]

Ну, пиши в разные секции.


 
Джо ©   (2007-01-14 10:37) [2]

Вот, когда-то для форума писал. Можешь доработать и пользоваться.

// Расширение класса TIniFile для записи/чтения объектов.
type
 TExtendedIniFile = class (TIniFile)
 public
   procedure WriteObject (AObject: TObject; const Section: string);
   procedure ReadObject (AObject: TObject; const Section: string);
 end;

implementation

{$R *.dfm}

uses TypInfo;

type
 TPropInfo = record
   Name: string;
   Kind: TTypeKind;
 end;

 TPropInfoArray = array of TPropInfo;

function GetPropertyNames (AClass: TClass): TPropInfoArray;
var
 I,Cnt: Integer;
 Pti: PTypeInfo;
 PPropLst: PPropList;
begin
 Pti := PTypeInfo(AClass.ClassInfo);

 GetMem (PPropLst,High(TPropList));
 try
   Cnt := GetPropList(
     Pti,
     [tkInteger, tkChar, tkEnumeration, tkFloat, tkString,
     tkSet, tkWChar, tkLString, tkWString,tkInt64],
     PPropLst
   );

   SetLength(Result,Cnt);

   for I := 0 to Cnt-1 do
   begin
     Result[I].Name := PPropLst^[I].Name;
     Result[I].Kind := PPropLst^[I].PropType^.Kind;
   end;

 finally
   FreeMem (PPropLst);
 end;

end;

{ TExtendedIniFile }

procedure TExtendedIniFile.ReadObject(AObject: TObject; const Section: string);
var
 I: Integer;
 Props: TPropInfoArray;
 V: Variant;
begin
 Props := GetPropertyNames(AObject.ClassType);
 for I := 0 to High(Props) do
 begin
   case Props[I].Kind of
     tkInteger,tkInt64:
       SetOrdProp(AObject,Props[I].Name,ReadInteger(Section,Props[I].Name,0));

     tkString,tkLString,tkWString,tkChar,tkWChar:
       SetStrProp(AObject,Props[I].Name,ReadString(Section,Props[I].Name,""));

     tkFloat:
       SetFloatProp(AObject,Props[I].Name,ReadFloat(Section,Props[I].Name,0));

     tkEnumeration:
       SetEnumProp(AObject,Props[I].Name,ReadString(Section,Props[I].Name,""));

     tkSet:
       SetSetProp(
         AObject,
         Props[I].Name,
         ReadString (Section,Props[I].Name,"")
       );
   end;
 end;
end;

procedure TExtendedIniFile.WriteObject(AObject: TObject; const Section: string);
var
 I: Integer;
 Props: TPropInfoArray;
 V: Variant;
begin
 Props := GetPropertyNames(AObject.ClassType);

 for I := 0 to High(Props) do
 begin
   V := GetPropValue(AObject,Props[I].Name);

   case Props[I].Kind of
     tkInteger,tkInt64:
       WriteInteger (Section,Props[I].Name,V);

     tkString,tkLString,tkWString,tkChar,tkWChar:
       WriteString (Section,Props[I].Name,V);

     tkFloat:
       WriteFloat (Section,Props[I].Name,V);

     tkEnumeration:
         WriteString (Section,Props[I].Name,
           GetEnumProp(AObject,Props[I].Name));
     tkSet:
       begin
         WriteString(
           Section,
           Props[I].Name,
           GetSetProp(AObject,Props[I].Name,True)
         );
       end;
     else
       begin
         // Этого не должно случиться
         // ибо в GetPropertyNames мы фильтруем
         // только нужные нам типы свойств
         Assert (False,"Unsupported property type");
       end;
   end;

 end;
end;


Использование.

// запись объекта
var
 Ini: TExtendedIniFile;
begin
 Ini := TExtendedIniFile.Create("d:\form.ini");
 try
   // Сохраняем, что угодно
   Ini.WriteObject(Self,"Form");
   Ini.WriteObject(Font,"Font");
 finally
   Ini.Free;
 end;
end;

// чтение объекта
var
 Ini: TExtendedIniFile;
begin
 Ini := TExtendedIniFile.Create("d:\form.ini");
 try
   Ini.ReadObject(Font,"Font");
   Ini.ReadObject(Self,"Form");
 finally
   Ini.Free;
 end;
end;


 
Garacio ©   (2007-01-14 10:49) [3]

Вот, за второй ответ, спасибо! Пригодится!
Я только немного уточню свой вопрос:
В Интернете гора примеров создания .ini (автосохранения), но почти все сохраняют положение окна приложения на рабочем столе. Я немного разобрался, теперь моя программа сохраняет
> содержимое 2-х Edit на главной форме в save.ini
но:
1. Как выглядят строки (сохранение/запись) для CheckBox-ов;
2. Как выглядят строки (сохранение/запись), допустим, содержимое тех-же Edit только с Form2?


 
Джо ©   (2007-01-14 10:57) [4]

> [3] Garacio ©   (14.01.07 10:49)

Не понял вопроса.


 
FAskerQ   (2007-01-14 11:08) [5]

Uses
 Unit2;

procedure TForm2.FormCreate(Sender: TObject);
begin
 Ini:= TIniFile.Create(ExtractFilePath(ParamStr(0)) + "save.ini");
//Текс в Edit1 на Form1
 Form1.Edit1.Text := Ini .ReadString("tools", "edit1", "text");
//CheckBox1 на Form2
 CheckBox1.Checked := Ini F.ReadBool("tools", "check", true);
 Ini .Destroy;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
 Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + "save.ini");
//Текс в Edit1 на Form1
 Ini .WriteString("tools", "edit1", Form1.Edit1.Text);
//CheckBox1 на Form2
 Ini .WriteBool("tools", "check", CheckBox1.Checked);
 Ini .Free;
end;


 
FAskerQ   (2007-01-14 11:11) [6]


> [3] Garacio ©   (14.01.07 10:49)


То же не конца наверно понял


 
Garacio ©   (2007-01-14 11:12) [7]

Благодарю, FAskerQ! Это тот ответ, который был нужен!



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.101 c
2-1168195004
Ламер 2.Х
2007-01-07 21:36
2007.01.28
Посылаем файл!!!!


15-1167910472
Kostya_86
2007-01-04 14:34
2007.01.28
dbase


4-1158337668
maxistent
2006-09-15 20:27
2007.01.28
Информация о процессе


1-1164903061
CaSH_
2006-11-30 19:11
2007.01.28
TreeView при выделении строки иконка меняется (продолжение 2)


6-1151302066
WhiteBarin
2006-06-26 10:07
2007.01.28
Программа-Дозвонщик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский