|
|
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
Приветствую, форумчане! Параметры открываемых клиентом форм приложения сохраняю и восстанавливаю с помощью компоненты. Сколько лет работал, бед не знал, и тут решил реализовать в приложении SDI и MDI на выбор юзера, и тут понеслось... :) посыпались давнишние недоработки: В дизайнере формы указываю WindowState = wsMaximized. А при открытии формы в процедурах восстановления размеров из прошлого сеанса работы с формой выставляю: WindowState := wsNormal; setBounds(любые положения и размеры); После SetBounds свойство WindowState выставилось обратно в wsMaximized. Почему, как этого избежать? Если сделаю сначала SetBounds, а потом WindowState = wsNormal, то в итоге получаю окно с координатами, выставленными в дизайнере формы, а мои установки форма напрочь проигнорировала. Ну, я-то решил проблему с помощью магического затыка: стараюсь в дизайнере wsMaximized не ставить, а если надо, то руками это делаю. Но это затык, а не решение. Хотелось бы, чтобы когда мне надо, чтобы приложение изначально включалось в режиме Maximized, а это касается главной формы приложения, не усложнять решение, а просто в дизайнере это указывать, а восстановление формы уже от этого бы и плясало. Вторая проблема, и что-то показывает, что она связана с первой очень тесно: окно когда-то было в режиме wsNormal с такими-то координатами. Потом юзер перевел его в режим wsMaximized и закрыл окно, координаты, ну, то есть Left,Top,Width и Height сбились, они показывали столько, сколько окно имело в максимизированном размере. Но те, что были в Normal, мы сохранили ранее, допустим. Когда открываем окно заново, мы восстановили режим Maximized, но хотим, чтобы при переводе в Normal юзер получил эти сохраненные координаты. Как задать окну эти координаты при создании окна? Логично было бы, что при создании окна сначала выставить координаты в нормальные, а потом уже сделать максимизированным размер окна. Хрена, после того, как юзер переведет окно в Normal, он получит опять дефолтные координаты. И тут вообще непонятно вот что: берем окно, вот его координаты имеем в свойствах Left,Top,Width,Height, делаем ему wsMaximized, теперь значения этих свойств сбились, и те, что были в режиме Normal - утеряны, по крайней мере я не нашел никаких переменных и свойств в форме, отвечающих за их хранение. Откуда тогда форма берет их, когда восстанавливает при переводе окна в wsNormal? Заранее спасибо всем за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 16:09 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
V.BorzovПочему, как этого избежать? Неверно выбрана точка вызова процедуры восстановления размеров. Накатывание значений из родительской формы происходит уже после нее. Ты ведь в курсе, что MDI формы не могут быть максимизированы по отдельности, только все вместе?.. И, конечно, знаешь, что сам MDI интерфейс был объявлен нерекомендуемым к использованию более десяти лет назад. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 16:15 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
Ой, еще забыл: хитрые люди как-то делают в SDI, чтобы при максимизации окошек они не перекрывали собой главное. И даже я в своих экспериментах так сам делал, помню, когда-то, лет 18 назад... Но потом ушел безоговорочно в MDI, и теперь всё забыл... А SVN тогда еще не пользовался... :) Теперь сижу и туплю жестко, начинаю думать о пенсии.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 16:16 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНеверно выбрана точка вызова процедуры восстановления размеров. Накатывание значений из родительской формы происходит уже после нее. Вообще компонента моя в Loaded делает, но пробовал то же самое повторять в OnCreate - результаты, вроде, те же. Дальше что унас, OnShow? Ты ведь в курсе, что MDI формы не могут быть максимизированы по отдельности, только все вместе?.. И, конечно, знаешь, что сам MDI интерфейс был объявлен нерекомендуемым к использованию более десяти лет назад. А я всегда, как что-то сделаю, так выясняется, что это что-то уже давно устарело. Написал программу на парадоксе под BDE, так всё никак ее на фаерберд не переведу уже сколько лет ))) А при переводе воспользовался FibPlus, а он тоже уже устарел... Щас решил опционально вернуться к SDI, ибо начиналось приложение с него ровно 20 лет назад.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 16:20 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
автор. Ты ведь в курсе, что MDI формы не могут быть максимизированы по отдельности, только все вместе?. Тут меня больше заинтересовала главная форма приложения, а также возможность делать это для всех остальных форм SDI-приложения. Поэтому в MDI вооще не парился с Maximized, а в главной форме всегда выставлял максимизацию, и вот один клиент заявил, что ему так неудобно, что он хочет, чтобы приложение восстанавливало свой размер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 16:23 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
V.Borzovхитрые люди как-то делают в SDI, чтобы при максимизации окошек они не перекрывали собой главное RTFM WM_GETMINMAXINFO Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 17:58 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
V.BorzovDimitry SibiryakovНеверно выбрана точка вызова процедуры восстановления размеров. Накатывание значений из родительской формы происходит уже после нее. Вообще компонента моя в Loaded делает, но пробовал то же самое повторять в OnCreate - результаты, вроде, те же. Дальше что унас, OnShow? Совершенно верно. Читать можно где угодно, а устанавливать - в OnShow. Причём помимо размеров в нормальном состоянии ( rcNormalPosition ) вне зависимости от текущего, нужно сохранять и состояние окна ( showCmd ). В своих проектах для этого использую GetWindowPlacement При восстановлении сначала устанавливаются размеры формы, а потом её состояние в зависимости от showCmd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 18:40 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
V.Borzov, я у себя TJvFormStorage. Правда, конкретно с mdi child не использовал. С остальными всем особых вопросов не видел. Только что жедаи свежие стоит ставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 19:07 |
|
||
|
статус формы и ее координаты
|
|||
|---|---|---|---|
|
#18+
V.BorzovВ дизайнере формы указываю WindowState = wsMaximized. А при открытии формы в процедурах восстановления размеров из прошлого сеанса работы с формой выставляю: Я обычно в дизайнере всегда ставлю wsNormal, а потом при необходимости в OnShow делаю `WindowState = wsMaximized`. При этом если в реестре сохраняются размеры окна, то сначала устанавливаем их, а потом уже WindowState, тогда оно при восстановлении само встаёт куда надо. Всё вместе это выглядит как-то так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 19:31 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=119&tid=2041303]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 367ms |

| 0 / 0 |
