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

Вниз

Запись свойства компонента Visible в файл с помощью TFileStream   Найти похожие ветки 

 
azl   (2009-12-01 18:11) [0]

Здравствуйте, уважаемые мастера.
Есть такая проблема.
Вкратце, так:
Создаем форму, кидаем на нее 3 кнопки, пишем для первой и третьей кнопки следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
 fs: TFileStream;
begin
 Button2.Visible := false;
 fs := TFileStream.Create("C:\file.dat", fmCreate or fmOpenWrite);
 fs.WriteComponent(Button2);
 fs.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 fs: TFileStream;
begin
 fs := TFileStream.Create("C:\file.dat", fmOpenRead);
 fs.ReadComponent(Button2);
 fs.Free;
end;


Т.е., с помощью TFileStream создаем файл и записываем в него компонент Button2, а потом считываем из файла.
Проблема заключается в том, что свойство Visible не записывается в файл.
Я нажимаю Button1, потом закрываю приложение, запускаю его снова и нажимаю Button3. При нажатии Button3 кнопка 2 не исчезает, а по идее, должна, ведь при записи в файл у нее свойство Visible было равно false.

Если делать наоборот, тот же эффект. А именно, Button2.Visible присваиваю false в Object Inspector. Пишу следующий код.

procedure TForm1.Button1Click(Sender: TObject);
var
 fs: TFileStream;
begin
 Button2.Visible := true;
 fs := TFileStream.Create("C:\file.dat", fmCreate or fmOpenWrite);
 fs.WriteComponent(Button2);
 fs.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 fs: TFileStream;
begin
 fs := TFileStream.Create("C:\file.dat", fmOpenRead);
 fs.ReadComponent(Button2);
 fs.Free;
end;


В этом случае, Button2 не появляется при нажатии на Button3, а нужно, чтобы она была видимой.

Объясню, зачем мне это нужно. Есть приложение на котором расположено 6 кнопок и RxRichEdit. В ходе выполнения программы свойства кнопок меняются: Enabled и Visible на False или True, и Caption. А также, меняется текст RxRichEdit.
В определенный момент мне нужно сохранить состояние кнопок и их Caption, а также, текст из RxRixhEdit.
Потом мне нужно, например, на следующий день, загрузить данные и восстановить все состояния кнопок и их надписи, а также текст из RxRichEdit. Как в игре, сохраниться, а потом загрузить игру снова.
Все хорошо, но вот свойство Visible не меняется. Когда, нужно, чтобы кнопка была видна, она не видна и наоборот.
Что можете посоветовать?


 
Evgnevius ©   (2009-12-01 18:52) [1]

А все остальные свойства сохраняются и читаются? Ну например, положение объекта на форме? Или тебе нужна только видимость кнопки? А текст из RxRichEdit сохраняется?


 
Evgnevius ©   (2009-12-01 19:00) [2]

Я бы вообще не пользовался этим сомнительным классом (TFileStream), а использовал бы ini-файлы для хранения нужных мне параметров. Писанины больше, однако работает надёжно.


 
azl   (2009-12-01 19:23) [3]


> А все остальные свойства сохраняются и читаются? Ну например,
>  положение объекта на форме? Или тебе нужна только видимость
> кнопки? А текст из RxRichEdit сохраняется?

Да, все остальные свойства (по крайней мере, которые мне нужны) сохраняются и читаются. Положение кнопки на форме - однозначно. Проверил специально, хотя мне это и не нужно было, так в целях эксперимента.
Текст из RxRichEdit сохраняется и читается.
Сохраняется так: RxRichEdit1.Lines.SaveToStream(fs);
А читается так: RxRichEdit1.Lines.LoadFromStream(fs);

Отчего же "сомнительным классом"? Отнюдь не сомнительный, очень даже полезная вещь.
По поводу ini файлов думал, но есть свои нюансы, не с ini-файлами, а вообще. У меня много данных, которые я записываю в поток, помимо компонентов. Скажем, в этот же поток я пишу еще данные из 8 массивов [1..500]. И хочу, чтобы это все хранилось в одном файле, а не в нескольких.


 
Медвежонок Пятачок ©   (2009-12-01 19:34) [4]

Все хорошо, но вот свойство Visible не меняется.

1. Читаешь не оттуда куда реально пишешь.
2. Видимость кнопки где-то еще меняется кодом помимо чтения паблишед свойств из файла
3. Другая подобная ерунда.


 
Медвежонок Пятачок ©   (2009-12-01 19:42) [5]

Ну и забыл еще про приколы со свойствами имеющими директиву default

если кнопка по дефолту видима (так написан ее класс), то ее видимость=тру в файл не попадет.

и если на момент чтения из файла она была невидима, то чтение из того файла не сделает ее видимой. так как свойства в файле не будет вообще.


 
Медвежонок Пятачок ©   (2009-12-01 19:44) [6]

поэтому либо пропсторадж какой-нибудь юзать, либо писать свой механизм четния/записи. (без read/writecomponent)


 
azl   (2009-12-01 21:40) [7]


> Ну и забыл еще про приколы со свойствами имеющими директиву
> default
>
> если кнопка по дефолту видима (так написан ее класс), то
> ее видимость=тру в файл не попадет.
>
> и если на момент чтения из файла она была невидима, то чтение
> из того файла не сделает ее видимой. так как свойства в
> файле не будет вообще.

Все понятно, спасибо.
Ну можно с помощью массива. Перед записью в файл, в массив типа boolean записать состояние Visible и закатать это дело в поток. А потом считать из потока данные в массив и уже присвоить значения кнопкам.


 
azl   (2009-12-01 21:48) [8]


> Ну и забыл еще про приколы со свойствами имеющими директиву
> default

А как же тогда Button1.[b]Enabled[/b]? Ведь это тоже умолчание. Но это свойство меняется.



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

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

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1259665917
Xmen
2009-12-01 14:11
2010.01.24
Доступ к папкам через сеть


2-1259855245
Bellf
2009-12-03 18:47
2010.01.24
Тип данных TXSDecimal


15-1258207054
Спаситель человечества
2009-11-14 16:57
2010.01.24
Предлагаю средство для борьбы с вирусами (универсальное)


3-1233646344
Sergey2
2009-02-03 10:32
2010.01.24
неверно отображаются записи в таблице


3-1233671912
Pavel
2009-02-03 17:38
2010.01.24
Компонент SQLStoredProc





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