Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение расположения форм [D7, XP]


Страницы:   1 2 3

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;

Я пытался восстанавливать эти значения при активации формы...

(Значение 25 Screen.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/


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо