![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение положения форм при последующем входе в программу. [D2005, 2003]
Abcdef123 © (2011-07-27 07:31:00)Здравствуйте, Мастера!
Некоторые клиенты наших программ стали использовать несколько мониторов на компе, и просят, чтобы мы изменили настройки положения форм на экране, так как не всегда для этих клиентов теперь удобно работать.
До сегодняшнего момента во всех рабочих проектах нашей компании главная форма проекта fsMDIForm и Position poDefault. Остальное большинство форм fsMDIChild и Position poScreenCenter. А вот клиенты хотят, чтоб если они сдвинут форму как им удобно, чтоб при последующих запусках программы положение формы такое же (измененное ими).
Думаю, что понятно объяснила проблему. В интернете я посмотрела, существуют компоненты на такой случай. Но, начальство не хочет использовать дополнительные компоненты (так как нужно будет при каждой инсталляции дельфи дополнительно еще на это время тратить, а также в будущем заботиться о совместимости версий компонента, когда версию Дельфи будем менять). Так что вопрос такой - поскольку "велосипед" уже кем-то изовретен, можно ли скачать исходники такого компонента, или программу-утилиту, которая поможет мне просто подключить это к проекту и не зависеть от сторонних инсталляций компонентов?
Принимаются любые дельные советы и замечания. Возможно я даже не в правильном направлении иду, и возможно надо бы просто использовать уже какой-то готовый компонент (хотя как я сказала, на данный момент у меня не большой выбор - это решение начальства).
Возможно, кто то уже использует что-то для решения данной задачи, какие бы посоветовали компоненты, в случае если прогу не найти? ...Буду признательна любой информации на эту тему.
Заранее благодарна,
Надежда.
Anatoly Podgoretsky (2011-07-29 12:13:00) [1]> brother (29.07.2011 11:31:35) [35]
мск это по Москве?
antonn (2011-07-29 12:12:00) [2]и после каждой удачной попытки модальное окошко с уведомлением :)
brother (2011-07-29 11:31:00) [3]тогда по таймеру на 25мск)
antonn (2011-07-29 11:15:00) [4]
> а ondestroy?)
а если "onreset" системника? =)
SQLEXPRESS (2011-07-29 09:40:00) [5]Удалено модератором
brother (2011-07-29 05:30:00) [6]> onclose может не наступить :)
а ondestroy?)
antonn (2011-07-28 21:22:00) [7]
> на onClose запоминаем координаты, потом после создания перемещаем
> по ним
>
я предпочитаю WM_EXITSIZEMOVE, т.к. onclose может не наступить :)
Anatoly Podgoretsky (2011-07-28 20:24:00) [8]> Dennis I. Komarov (28.07.2011 12:26:29) [29]
Если разумно относиться, то придется лет 100 загаживать.
Dennis I. Komarov (2011-07-28 12:26:00) [9]
> AppData\bla-bla..\в папке с именем пользователя\
не верю :) да и не зачем, ибо
> каждый под своим именем заходит
> либо в реестре, если не жаль загаживать..
точно жаль
MonoLife (2011-07-28 12:15:00) [10]AppData\bla-bla..\в папке с именем пользователя\
либо в реестре, если не жаль загаживать..
Игорь Шевченко (2011-07-28 12:14:00) [11]
> А еще установленные компоненты увеличивают время запуска
> IDE, что не приносит радости.
но уменьшают время на решение задач, что приносит радость
Dennis I. Komarov (2011-07-28 11:48:00) [12]
> Она же не сказала, что папки пользователей хранятся в папке
> приложения. Это вы додумали.
Возможно, но вот телепатор мне говорит именно так, ибо
> можно создавать для каждого пользователя его настройки,
> INI файл будет храниться в папке с именем пользователя.
>
а не в "AppData\bla-bla..."
Омлет (2011-07-28 11:41:00) [13]> Dennis I. Komarov © (28.07.11 09:55) [22]
>> INI файл будет храниться в папке с именем пользователя.
> Не верно. Папка с приложением должна быть с правами только чтение (вернее программа при таких правах обязана работать). Мелкомягкие отвели специальное место для хранения такого рода информации.
Она же не сказала, что папки пользователей хранятся в папке приложения. Это вы додумали.
Loginov Dmitry (2011-07-28 11:33:00) [14]
> Можно. Такой компонент есть в RxLib, ее исходники открыты
> и есть в Сети. Называется он TFormPlacement. Еще обратите
> внимание на компонент TFormStorage, он тоже может оказаться
> очень полезным.
В последнее время данный компонент (и всю библиотеку RxLib) не очень активно поддерживают. Не удивлюсь, если его версия для D2010 до сих пор не умеет сохранять местоположение формы в реестре в HKCU. Одним словом, есть риск.
Из-за этой проблемы мне пришлось переводить один из проектов на JEDI. Там есть все компоненты из RxLib и за ними кто-то до сих пор следит.
Плохиш (2011-07-28 10:43:00) [15]
> Abcdef123 (28.07.11 05:51) [20]
> Спасибо всем за отклики и активное обсуждение!!! Попробую
> некоторые прокомменировать
Так бы сразу и говорила, что вам шашечки нужны. За это время можно было реализовать минимум пять вариантов, а вы только до комментариев дотумкали.
Наймите программиста в конце концов.
Dennis I. Komarov (2011-07-28 09:55:00) [16]
> INI файл будет храниться в папке с именем пользователя.
Не верно. Папка с приложением должна быть с правами только чтение (вернее программа при таких правах обязана работать). Мелкомягкие отвели специальное место для хранения такого рода информации.
SQLEXPRESS (2011-07-28 08:52:00) [17]
> Надо, чтоб если уж сместили форму куда-то, чтоб она в следующий
> раз в тех же координатах и открылась.
на onClose запоминаем координаты, потом после создания перемещаем по ним
> свойство формы Position не published
и что?
File - new - other - project - MDIapplication
делаем чайлду Position = poScreenCenter
дописываем
в
TMainForm
public
x,y: Integer;
procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
Child.Left := x;
Child.Top := y;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;
---------------
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MainForm.x := Left;
MainForm.y := Top;
Action := caFree;
end;
все, где закрыли, там и открывается
Abcdef123 (2011-07-28 05:51:00) [18]Спасибо всем за отклики и активное обсуждение!!! Попробую некоторые прокомменировать, чтоб прояснить затачу более точно. К примеру насчет пользователей в сообщении [18] - у нас хранится информация о пользователе, каждый под своим именем заходит, так что тут думаю, проблем не будет, можно создавать для каждого пользователя его настройки, INI файл будет храниться в папке с именем пользователя.
По сообщению [17] - мне кажется тут не правильно поняли. Речь идет не об автоматическом открытии всех форм, которые были открыты в предыдущей сессии, этого как раз делать НЕ надо! Речь идет просто о восстановлении координат форм в случае если ее снова открывают. То есть сейчас все формы открываются в центре экрана, и пользователи, кто работает с 2мя мониторами каждую форму каждый развручную тянут влево (к примеру). Вот это и напрягает! Надо, чтоб если уж сместили форму куда-то, чтоб она в следующий раз в тех же координатах и открылась. Кстати, свойство формы Position не published, так что получается я не могу в рантайме поменять, а ведь если менять позицию формы я ж должна отменить значение poScreenCenter сначала. Неужели мне придется в дизайне каждую форму вручную менять? Пусть хоть и один раз, но столько форм и столько проектов, ужас. Или все же можно как то обойти это?
To [2]: Я как раз изначально, когда искала информацию в инете, то наткнулась на эту библиотеку компонент RxLib и по описанию подумала, что TFormPlacement как раз то что мне нужно, но на том сайте я не смогла найти исходники, и вообще показалось, что сайт давно не обновлялся, подумала, что может уже не поддерживается эта библиотека. Если не трудно, дайте пожалуйста линк, где можно взять исходники этой библиотеки!
Насчет остальных сообщений - пока еще осмысливаю, конкретно честно говоря пока не знаю, что могу сделать, так что вопрос остается открытым и жду продолжения обсуждений в связи с моими дополнительными пояснениями и вопросами.
SQLEXPRESS (2011-07-27 13:09:00) [19]
> Вася.. воткнул Пете.
??!
так ему и надо тогда :)
Dennis I. Komarov (2011-07-27 13:06:00) [20]
> а зачем тогда весь сыр-бор? :)
У меня нету :) Пускай думает сама далее, где весь этот мусор хранить, как загружать и т.п.
З.Ы. Еще один камень: Сделали все восстанавливается. Пришел Вася. Расставил, настроил, за... хорошо в общем все :) Потом Петя, ему не понравилось, он подвигал все как ему удобно. Потом Таня, у нее вообще три монитора... Возвращается Вася, ПИ-ПИ-ПИ - он доволен. От радости воткнул Пете...
Над вышеизложенным крепко подумать и принять к сведению при реализации. Еще не забыть о правах бедных пользователях, которым очень много низя...