![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение расположения форм [D7, XP]
Juju © (2006-11-04 10:34:00)Задача:
Необходимо сохранять расположение окон программы на экране при последующих загрузках.
Возможные решения:
1) Сохранять значения Top и Left при закрытии формы в реестре Windows, при этом проверяя, чтобы Top и Left находились в области экрана.
2) Сохранять значения Top и Left при закрытии формы в ini-файле, при этом проверяя, чтобы Top и Left находились в области экрана.
3) На каждую форму повесить FormStorage (компонент из библиотеки RXLibrary), а при активации формы проверять, чтобы Top и Left находились в области экрана.
Вопрос:
Какой из возможных решений самый оптимальный или может есть другие решения?
Gydvin (2006-11-04 21:15:00) [21]
> Juju (04.11.06 20:01) [21]
Я имел в виду - если формацеликом скрывается за краем, то приследующей загрузки возвращать на центр, если НЕ целиком - оставлять как есть
RASkov (2006-11-04 20:13:00) [22]Сохранить куда либо без проверок Top и Left
Считать от туда(куда сохранили) и затем проверка:
if Form1.Left < - Form1.Width then Form1.Left := - Form1.Width+50 else
if Form1.Left > Screen.WorkAreaWidth then Form1.Left := Screen.WorkAreaWidth - 50;
if Form1.Top < - Form1.Height then Form1.Top := 0 else
if Form1.Top > Screen.WorkAreaHeight then Form1.Top := Screen.WorkAreaHeight - 50;
Juju (2006-11-04 20:01:00) [23]Anatoly Podgoretsky- Ваше мнение мне понятно, спасибо.
Gydvin- и какую величину брать за максимально возможное скрытие за краем? Окончание табличных данных или компонентов несущих какую-либо смысловую нагрузку или минимально допустимую, чтобы еще смочь мышкой передвинуть?
Тут скорее всего правильное решение оставить за пользователем выбор где в конце-концов должна находиться форма, а для "эмердженси" случаев - горячая клавиша, которая восстановит окно поpoScreenCenter.
Gydvin (2006-11-04 18:56:00) [24]
> Пиши код. Или хотя бы ссылки на доки. Объясни что есть TRegistry,
> TIniFile,
> TRegIniFile.
Не было просьбы "объяснить"
Gydvin (2006-11-04 18:53:00) [25]
> И пользователь проклиная автора будет опять уводить на свое
> место.
>
Проверять на полное скрытие формы за краем
Anatoly Podgoretsky (2006-11-04 18:09:00) [26]Надо вообще все формы восстанавливать по центру, поскольку не порядок, не там стоит и о боже не полностью на экране.
Anatoly Podgoretsky (2006-11-04 17:59:00) [27]
> sniknik © (04.11.06 17:12) [15]
> > это же неправильно.
> почему? если это желание пользователя... ну не нужна например
> вся форма для просмотра кому-то, достаточна одной цифры
> на ней, он ее упихнет так чтобы только ее и было видно..
> . а оно у тебя "по умному" все переиначит.
И пользователь проклиная автора будет опять уводить на свое место.
Juju (2006-11-04 17:24:00) [28]sniknik
К сожалению я работал с такими пользователями, которые не специально для дела, а с теми которые случайно так вышло! Поэтому мое "по умному" обосновано личным опытом.
А вот открытие формы по гарячей клавише с координатами по умолчанию - это мысль. Спасибо.
sniknik (2006-11-04 17:12:00) [29]> это же неправильно.
почему? если это желание пользователя... ну не нужна например вся форма для просмотра кому-то, достаточна одной цифры на ней, он ее упихнет так чтобы только ее и было видно... а оно у тебя "по умному" все переиначит.
вообще завести форму за край, так что будет не видно, можно, например завести максимально за правый край, а после закрытия (сохранения координат) изменить разрешение экрана на меньшее.
я на такие случаи делаю не проверку, а открытие с дефаултными координатами, при зажатых на открытии формы Ctrl+Shift например (комбинация меняется, вернее может меняться, но ее всегда оставляют как есть).
Juju (2006-11-04 16:54:00) [30]Percent
За Screen.WorkArea - спасибо!
> Попробуй умудриться. Умудришься - я тебе код напишу.
Речь идет даже о частичном заведении формы за пределы экрана. Если при восстановлении половина окна видна, а половина нет - это же неправильно.
Орион (2006-11-04 13:04:00) [31]
> [7] Shopot © (04.11.06 12:29)
> А что мы уже в Америке живем, все должно быть по правилам?
Мы живем в анархическом обществе?
Percent (2006-11-04 12:55:00) [32]А что мы уже в Америке живем, все должно быть по правилам?
Нет. Поэтому за требование кода можно получить нечто другое...
Percent (2006-11-04 12:52:00) [33]А если перед закрытием формы пользователь умудриться завести ее за пределы экрана?
Попробуй умудриться. Умудришься - я тебе код напишу.
Screen.Height - это немного не то
Screen.WorkArea<Left|Top|Width|Height>
Juju (2006-11-04 12:47:00) [34]Shopotспасибо за ответ, но Screen.Height - это немного не то. Панель задач это такая полосочка (обычно) внизу экрана, на которой находиться кнопка "Пуск".
Shopot (2006-11-04 12:32:00) [35]Screen.Height
Juju (2006-11-04 12:30:00) [36]
> Anatoly Podgoretsky © (04.11.06 10:55) [1]
> > 4. Сохранять Top и Left при закрытии формы в реестре Windows,
> без какой либо проверки, восстанавливать также.
Насторожило: без какой либо проверки, восстанавливать также.
А если перед закрытием формы пользователь умудриться завести ее за пределы экрана?
procedure FormPositionRestore(Form: TForm);
begin
if Form.Left < 0 then Form.Left := 0;
if (Form.Left > Screen.Width - Form.Width) then Form.Left := Screen.Width - Form.Width;
if Form.Top < 0 then Form.Top := 0;
if (Form.Top > Screen.Height - Form.Height) then Form.Top := Screen.Height - Form.Height-25;
end;
Я пытался восстанавливать эти значения при активации формы...
(Значение 25Screen.Height - Form.Height-25;взято мной приблизительно, чтобы форма находилась над Панелью задач.
Не хочу засорять тему дополнительными вопросами, но как определить какая по высоте Панель задач?
Shopot (2006-11-04 12:29:00) [37]
> Anatoly Podgoretsky © (04.11.06 11:53) [6]
> Не вижу требования писать код, может ты сам напишешь?
А что мы уже в Америке живем, все должно быть по правилам?
Anatoly Podgoretsky (2006-11-04 11:53:00) [38]Что бы не быть головословным, вот выписка из правил
> «Начинающим» (вспомогательная конференция. если вам трудно
> понять самим, что вам нужно или есть желание и способности
> помогать новичкам — вам сюда)
Не вижу требования писать код, может ты сам напишешь?
Anatoly Podgoretsky (2006-11-04 11:52:00) [39]Странное понимание предназначения форума, ты не перепутал с форумом работа?
Percent (2006-11-04 11:44:00) [40][2] Shopot © (04.11.06 11:29)
Пиши код.
http://lleo.aha.ru/na/