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

Вниз

вдогонку о вопросе "как прогнать все переменные"   Найти похожие ветки 

 
syte_ser78 ©   (2006-06-15 17:12) [0]

Замучился уже.
Подозреваю что делаю не правильно, а как правильно, не могу придумать.

Хочу чтобы мое приложение после перезагрузки запускалось в таком же виде в каком я с него вышел. К этому относится:
видимость столбцов дбгрида на нескольких формах
размеры столбцов дбгрида .....
шрифты гриды
колво строк в гридах (DBGridEx)
....
да всего уже не упомнишь.

Пишу все эти значения в ини по закрытию главной формы, по запуску - читаю.
А нельзя ли както попроще? Записать все это гамузом и так же прочесть?


 
Игорь Шевченко ©   (2006-06-15 17:14) [1]

RxLib TFormStorage


 
homm ©   (2006-06-15 17:22) [2]

Stream.WriteComponent
Или что-то подобное


 
Desdechado ©   (2006-06-15 20:44) [3]

> колво строк в гридах (DBGridEx)
тогда уж и копию состояния БД записывай, а то ведь набор данных может поменяться...


 
Marser ©   (2006-06-15 21:10) [4]

Я в TListView ручками делал, в ини-файл сохранял...


 
Жуков Олег   (2006-06-16 00:12) [5]

Есть идея. Обычно свойства, отвечающие за внешний вид у разных элементов одинаково называются и являются published. Поэтому, подключаем TypInfo, и вперёд:

const
 PropertiesToSave: Array[0..5] of string
   = ("Top", "Left", "Width", "Height", "Visible", "Columns");
 ClassesToSave: Array[0..0] of string
   = ("TListView");

procedure SaveComponent(
 const Component: TPersistent;
 const Inifile: TInifile;
 const Section: string
 );
var
 i: Integer;
 PropInfo: PPropInfo;
 ChildComponent: TObject;
 ComponentIndex: Integer;
 Ident: string;
begin

 Ident := Component.GetNamePath;

 for i := Low(PropertiesToSave) to High(PropertiesToSave) do
 begin
   PropInfo := GetPropInfo(Component, PropertiesToSave[i]);
   if PropInfo <> nil then

     case PropInfo^.PropType^.Kind of
       tkClass:
       begin
         ChildComponent := GetObjectProp(Component, PropInfo);
         if ChildComponent <> nil then
           if ChildComponent is TPersistent then
             SaveComponent(ChildComponent as TPersistent,
               Inifile, Section);
       end;
       tkInteger, tkEnumeration:
       begin
         Inifile.WriteInteger(
           Section,
           Ident + "." + PropertiesToSave[i],
           GetOrdProp(Component, PropInfo)
           );
       end;
     end; // case

 end; // for

 if Component is TComponent then
   for ComponentIndex := 0 to TComponent(Component).ComponentCount - 1 do
   begin
     ChildComponent := TComponent(Component).Components[ComponentIndex];
     for i := Low(ClassesToSave) to High(ClassesToSave) do
       if ChildComponent.ClassType.ClassNameIs(ClassesToSave[i]) then
          SaveComponent(ChildComponent as TComponent,
             Inifile, Section);
   end;

 if Component is TCollection then
   for i := 0 to (Component as TCollection).Count - 1 do
   begin
     ChildComponent := (Component as TCollection).Items[i];
     SaveComponent(ChildComponent as TCollectionItem,
         Inifile, Section);
   end;

end;

procedure TForm5.btnSaveClick(Sender: TObject);
var
 Inifile: TIniFile;
begin
 Inifile := TIniFile.Create("c:\test.INI");
 try
   SaveComponent(Self, Inifile, Name);
 finally
   Inifile.Destroy()
 end;
end;

Писал на скорую руку, поэтому возможны ошибки. Это только сохранение, но думаю, что и загрузку по тому же принципу можно сделать.

В результате получается такой Ini файл:
[Form5]
Form5.Top=220
Form5.Left=220
Form5.Width=500
Form5.Height=369
Form5.Visible=1
ListView1.Top=136
ListView1.Left=84
ListView1.Width=305
ListView1.Height=150
ListView1.Visible=1
ListView1.Columns[0].Width=50
ListView1.Columns[1].Width=50
ListView1.Columns[2].Width=50


 
syte_ser78 ©   (2006-06-16 08:59) [6]

Desdechado ©   (15.06.06 20:44) [3]
Ты не понял. Не колво записи в таблицах а количество строк в одной записи многострочного DBGridEx-a



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

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

Наверх





Память: 0.47 MB
Время: 0.009 c
3-1147618940
Express
2006-05-14 19:02
2006.07.16
Ошибка «Не удается найти строку для обновления», MySQL


2-1151172561
Паша666
2006-06-24 22:09
2006.07.16
Пабота с ComboBox


2-1151385233
bajenovv
2006-06-27 09:13
2006.07.16
помогите плиз новичку!!!!


2-1151260729
Noname27
2006-06-25 22:38
2006.07.16
SetDCBrushColor


15-1150277303
Nic
2006-06-14 13:28
2006.07.16
Я потрясён: Edward Yourdon "Death March"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский