Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Save и Load состояния Docked форм, восстановление dock-статуса при запуске 
:(
    Опции темы
kami
Дата 7.1.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Доброго времени суток, дамы и господа!

Имею следующий вопрос: для Drag&Dock (в D7) использую JVCL (JvDockServer&JvDockClient). Понравились простотой использования (о чем еще мечтать - бросил на форму и всё, пользуйся) и быстротой работы (в отличие от стандартного примера в Delphi, достаточно тормозящего при перемещении форм). Причем "ручные" манипуляции идут через стандартные функции типа ManualDock.

Собственно, что хотелось бы - при завершении работы приложения сохранять положение и "Dock-статус" форм, а при следующем запуске восстанавливать их состояние и положение.

Как сотворить подобное? DRKB молчит, отсылая к DockManager, а он в Runtime = nil на dock-нутых формах... Документации по JVCL ващпе кот наплакаль...
PM MAIL WWW   Вверх
Snowy
Дата 7.1.2011, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Сохранять куда?
Для сохранения состояний формы вполне подойдет метод TStream.WriteComponent(Form1);
Ну и аналогичная загрузка TStream.ReadComponent(Form1);
В качестве стрима можешь использовать, например, TFileStream.
Код
  with TFileStream.Create(FileName, fmCreate) do // сохраняем
  try
    WriteComponent(Form1);
  finally
    Free;
  end;
  
  // .... 
  
  while Form1.ControlCount > 0 do Form1.Controls[0].Free; // грузим
  with TFileStream.Create(FileName, fmOpenRead) do
  try
    ReadComponent(Form1);
  finally
    Free;
  end;
Замечание - код загрузки нельзя использовать из эвента контрола формы, т.к. все контролы уничтожаются перед загрузкой.
Эвенты самой формы использовать можно - она остается нетронутой. Разве что размеры и положение возьмутся из файла.
Сохраняемый файл имеет бинарную dfm структуру. Используя BinToHex, можно превратить его в обычный dfm.
PM MAIL   Вверх
kami
Дата 7.1.2011, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Snowy @  7.1.2011,  21:47 Найти цитируемый пост)
Сохранять куда?

Да без разницы. TFileStream более чем подойдет.
Наверное, я плохо объяснил, что мне нужно...

Цитата(Snowy @  7.1.2011,  21:47 Найти цитируемый пост)
Для сохранения состояний формы вполне подойдет метод TStream.WriteComponent(Form1);

Не подошло. Вернее, подошло, но не совсем...
Сделал 2 дочерние формы, за-Dock-ил их так.
user posted image
Что за окно, на котором они лежат, и как достучаться до него через jvcl - без понятия :(  (WinSpectorом пока не ковырял)
Сохранил (WriteComponent(fm)) *2.
При следующей загрузке загрузил (ReadComponent(fm))*2. И - само собой, получил это:
user posted image
То, что между окнами - это главное окно Delphi виднеется...

А хотелось бы, как на первой картинке... И я знаю, что это возможно (вот только - как?) - Delphi восстанавливает при загрузке проекта положение и Dock-состояние всех своих окон.

Это сообщение отредактировал(а) kami - 7.1.2011, 22:59
PM MAIL WWW   Вверх
northener
Дата 8.1.2011, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Когда-то ребята создавшие RxLib  делали что-то подобное.
Сейчас стоит посмотреть в сторону JEDI.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
kami
Дата 8.1.2011, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(northener @  8.1.2011,  03:42 Найти цитируемый пост)
Сейчас стоит посмотреть в сторону JEDI.

Дык я их и использую...
Вроде, нашел - у создателей jvcl хоть help и страдает на обе ноги, но демки неплохие. Есть у них функции LoadDockTreeFromAppStorage/SaveDockTreeToAppStorage. Вроде, то что мне нужно. Буду ковырять smile
PM MAIL WWW   Вверх
Frees
Дата 17.6.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(kami @  8.1.2011,  12:02 Найти цитируемый пост)
 Вроде, то что мне нужно. Буду ковырять 

Если не трудно, поделись что наковырял.


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
kami
Дата 17.6.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Frees @  17.6.2011,  13:39 Найти цитируемый пост)
Если не трудно, поделись что наковырял.

Увы - ничего не наковырял. Проект нужно было делать срочно, посему ввиду того, что все docked-формы создаются динамически, причем - только по клику пользователя, это дело было заброшено. By default оставлена возможность сделать dock, но без сохранения состояния.
PM MAIL WWW   Вверх
xkor
Дата 9.7.2011, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 2
Всего: 4



неужели процедуры SaveDockTreeToFile и LoadDockTreeFromFile в модуле JvDockControlForm так и не нашли?
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Frees
Дата 9.7.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(xkor @  9.7.2011,  03:54 Найти цитируемый пост)
неужели процедуры SaveDockTreeToFile и LoadDockTreeFromFile в модуле JvDockControlForm так и не нашли?

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

Это сообщение отредактировал(а) Frees - 9.7.2011, 14:56


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
xkor
Дата 9.7.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 2
Всего: 4



Frees, ну это да, но там переделывать в принципе немного, мне когда надо было за пару часов подправил
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
kami
Дата 9.7.2011, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(xkor @  9.7.2011,  20:45 Найти цитируемый пост)
но там переделывать в принципе немного, мне когда надо было за пару часов подправил

Так выложи код, помоги.
PM MAIL WWW   Вверх
Frees
Дата 9.7.2011, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(xkor @  9.7.2011,  23:45 Найти цитируемый пост)
Frees, ну это да, но там переделывать в принципе немного, мне когда надо было за пару часов подправил

менял исходники jedi? мне так нельзя...
а SaveDockTreeToFile и LoadDockTreeFromFile это даже не методы... в общем, решил не ездить на кривой козе вокруг кривых jedi


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
xkor
Дата 10.7.2011, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 2
Всего: 4



Цитата(kami @  9.7.2011,  22:24 Найти цитируемый пост)
Так выложи код, помоги. 

боюсь он не сохранился, для доков я уже стал использовать DevExpress компоненты, а jedi обновил до новой версии и за ненадобностью уже не правил...
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
kami
Дата 10.7.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(xkor @  10.7.2011,  11:01 Найти цитируемый пост)
боюсь он не сохранился

Хм.
И смысла было поднимать эту тему из небытия? Чтобы сказать 
Цитата(xkor @  9.7.2011,  20:45 Найти цитируемый пост)
мне когда надо было
 ?

Я очень рад за Вас, что Вы справились с задачей, когда Вам надо было. 
Но вот некоторое время назад было надо мне. 
В принципе, можно сказать что и сейчас надо. 
Большое спасибо Вам за содержательные ответы и неоценимую помощь в вопросе, заданном в форуме "Для новичков".

Dixi.

Это сообщение отредактировал(а) kami - 10.7.2011, 15:00
PM MAIL WWW   Вверх
xkor
Дата 13.7.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 2
Всего: 4



kami, ну когда я поднимал я думал что вам хватит оригинальных SaveDockTreeToFile и LoadDockTreeFromFile. Ну а дальше да, уже лишнего сказал...
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1251 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.