Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2011, 10:56   #1
fins
Новичок
Джуниор
 
Регистрация: 29.04.2011
Сообщений: 1
По умолчанию сохранение действий в программе после закрытия

Здраствуйте, помогите пожалуйста, как сделать чтобы программа открывалась с того же момента на котором ее закрыли, те как будто не закрывали?? Обьяснил как смог
fins вне форума Ответить с цитированием
Старый 29.04.2011, 11:04   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от fins Посмотреть сообщение
Здраствуйте, помогите пожалуйста, как сделать чтобы программа открывалась с того же момента на котором ее закрыли, те как будто не закрывали?? Обьяснил как смог
"Как будто", - это для Вас. В систему - она закрыта...
Об этом можно узнать по классу (типу(сам не до конца разобрался)) HANDLE. (Дескриптор окна). Политика дескрипторов Вам в помощь->.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 29.04.2011 в 11:10.
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.04.2011, 11:14   #3
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от fins Посмотреть сообщение
Здраствуйте, помогите пожалуйста, как сделать чтобы программа открывалась с того же момента на котором ее закрыли, те как будто не закрывали?? Обьяснил как смог
На каждый такой вопрос у меня всегда возникает вопрос: Зачем?
Например, можно загружать данные из файла или из чего-нибудь другого
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 29.04.2011, 11:31   #4
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Если нужно сохранять настройки, то самое простое- запись оных в INI-файлы.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 29.04.2011, 11:42   #5
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию

Для того, что бы программа открывалась с сохраненного места необходимо использовать ini файл(ы).
Например: сохранение позиции формы и последних изменений при выходе

Код:
procedure TForm1.FormShow(Sender: TObject); 
Var f:file of Integer; // файловая переменная, тип integer 
i:Integer; // целочистенная переменная 
begin 
AssignFile(f,'pos.ini'); 
{$I-} // Отключаем контроль ошибок 
Reset(f); 
{$I+} // Включаем контроль ошибок
if IOResult<>0 then Exit; 
Read(f,i); //считать из файла значение 
Form1.Top:=i; // верхнее положение окна 
Read(f,i); 
Form1.Left:=i; // левое положение окна 
Read(f,i); 
Form1.Width:=i; // ширина окна 
Read(f,i); 
Form1.Height:=i; // высота окна 
CloseFile(f); 
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
Var f:file of Integer; // файловая переменная, тип integer
begin 
AssignFile(f,'pos.ini'); // Привязываем строку пути файла к файловой переменной
{$I-} // Отключаем контроль ошибок 
Rewrite(f); 
{$I+} // Включаем контроль ошибок
if IOResult<>0 then Exit; // Если ошибка то выходим 
Write(f,Form1.Top); // Записываем в файл положение окна по верикали 
Write(f,Form1.Left); // Записываем в файл положение окна по горизонтали 
Write(f,Form1.Width); // Записываем в файл ширину формы 
Write(f,Form1.Height); // Записываем в файл высоту формы 
CloseFile(f); // Завершаем работу с файлом 
end;
при компиляции будет ошибка. для этого необходимо в раздел описания USES добавить модуль inifiles;

Вроде так.........

ПОМОГ?????????



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.04.2011 в 13:55.
kholoshchak вне форума Ответить с цитированием
Старый 01.07.2015, 18:12   #6
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Позволю себе продолжить эту тему со странным названием конкретным вопросом (расширяющим последний ответ). Надеюсь, никто не против.
Через какие процедуры лучше сохранять позицию, размер и состояние (развёрнутое/свёрнутое/нормальное) окна для восстановления этих данных при загрузке?
OnClose и OnDestroy не подходят, т.к. при развёрнутости запоминаются именно эти значения, и при попытке вернуть форме "нормальные" значения - они возвращаются равными развёрнутому окну, а не те, которые были перед разворачиванием.
Пробовал сохранить координаты этим методом. Лэйбл показывал текущие координаты, но при запуске программы координаты оказывались равными poDesigned. Попробовал перенести блок присвоения координат из Create в Show и перед этим поставил
Код:
Panel1.Caption:=''
А в OnMove стал "загонять" значения в ini только при условии
Код:
If Panel1.Caption=''
Положение по X стало нормально восстанавливаться. Но странным образом по-прежнему остаётся poDesigned значениеY...
Фрагмент кода из OnMove
Код:
If  Panel1.Caption='' then
begin
  Inherited;
  Label1.Caption:='Ôîðìó ñäâèíóëè...'+IntToStr(form1.top);
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'Настройки.ini');
  Ini.WriteInteger('Интерфейс','Позиция X',form1.left);
  Ini.WriteInteger('Интерфейс','Позиция Y',form1.top);
  Ini.Free;
end;
Фрагмент кода OnShow:
Код:
  Panel1.Caption:='';

  Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\Настройки.ini');
  form1.left:=Ini.ReadInteger('Интерфейс','Позиция X',90);
  form1.top:= Ini.ReadInteger('Интерфейс','Позиция Y',200);
  Ini.Free;
Что за проблема тут такая странная?
Ну и как лучше всё-таки организовать сохранение параметров состояния окна, размеров и положения? С учётом, что если оно запускается развёрнутым - при переходе в нормальный режим должно принять размеры и позицию, которыебыли перед разворачиванием до предыдущего закрытия.
Ship_1 вне форума Ответить с цитированием
Старый 01.07.2015, 18:30   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
ПОМОГ?????????
Убери немедленно говнокод с паблика и больше никогда так не делай!!!!!!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.07.2015, 18:38   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Убери немедленно говнокод
Ты хоть бы на дату поста посмотрел... Это же некромантика.
Цитата:
OnClose и OnDestroy не подходят, т.к. при развёрнутости запоминаются именно эти значения, и при попытке вернуть форме "нормальные" значения - они возвращаются равными развёрнутому окну, а не те, которые были перед разворачиванием.
Чет я этого утверждения не понял...
Цитата:
Фрагмент кода из OnMove
ИНИ файл там создавать не комильфо. Всякие создавания делай при создании формы.
Цитата:
С учётом, что если оно запускается развёрнутым - при переходе в нормальный режим должно принять размеры и позицию, которыебыли перед разворачиванием до предыдущего закрытия.
А где ты запоминаешь состояние развернутости-свернутости?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2015, 18:43   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Ты хоть бы на дату поста посмотрел... Это же некромантика.
оймля, и правда, не обратил внимание, просто тыкнул в общем списке на верхнюю жирную ссылку.

Вообще, видал форумы, где на старых темах семафоры висят, типа "ахтунг, камраден, ласт каммент воз постед блин стопицот йеарс эгоу!" красным шрифтом.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.07.2015, 18:59   #10
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Чет я этого утверждения не понял...
Если развернуть окно, а потом свернуть его не закрывая - форма вернётся к размеру позиции, которое были перед разворачиванием.
Если её развернуть и закрыть, а сохранение позиции и размера записывать в ini в событии Close или Destroy, то значения, соответствующие развёрнутому окну и запишутся. И после следующего запуска при переходе в нормальный режим форма примет состояние wsNormal, но размеры и положение оставит соответствующие wsMaximized.

Цитата:
Сообщение от Stilet Посмотреть сообщение
ИНИ файл там создавать не комильфо. Всякие создавания делай при создании формы.
Т.е. Create ini-файла делать вместе с Create формы, а Ini.Free только при FormClose? Я их создаю там, где к ним обращаюсь, делаю необходимое и уничтожаю сразу. Какие у этого минусы?

Цитата:
Сообщение от Stilet Посмотреть сообщение
А где ты запоминаешь состояние развернутости-свернутости?
После неудачи с Close/Destroy я начал с координат. Развёрнутость-свёрнутость можно поместить в OnResize, впринципе, да и на Close/Destroy именно с этой переменной проблем не возникает.

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Вообще, видал форумы, где на старых темах....
И плодится тонна тем с одинаковым смыслом но чуть разными названиями. И при выполнении поиска по форуму (что некоторые особо умные очень любят советовать) вылетает несколько листов одного и того же с небольшими вариациями. Не думаю, что этот вариант лучше.

Последний раз редактировалось Stilet; 23.07.2015 в 20:10.
Ship_1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Восстановить файл после закрытия и сохранения m_v_v Microsoft Office Excel 26 03.02.2017 02:39
загадочная ошибка после действий в Webrowser DELPHI designer999 Работа с сетью в Delphi 3 16.11.2010 01:15
Хранение изображения после закрытия в Image artemavd Общие вопросы Delphi 14 18.01.2010 10:29
записанное в Edit сохранить после закрытия IVANSour Общие вопросы Delphi 6 21.01.2009 03:33
Как сохранить значение Edit после закрытия tarakan1983 Помощь студентам 14 11.09.2008 08:25