![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с размером окна в XP.
Sagrer © (2003-07-14 16:20:00)В общем написал на KOL+MCK прогу, вроде все пашет, во время тестирования у одного из тестеров стоял XP, со стандартным скином (тема стола кажется - там у окон другие заголовки, и они чуть выше)
В общем за счет того что в ХР получился заголовок окна выше, а размер самого окна не изменился, мне обрезало кнопки внизу (отступ был маленький, в вин 98 и вообще когда обычный заголовок у окна все было нормально)........... в общем проблема получается в том, что высота формы фиксированная, и в нее входит заголовок, и если этот заголовок имеет нестандартную высоту, то часть окна без заголовка, получается имеет меньший размер в высоту...
Не знает ли кто, как мне вычислить именно расстояние от нижней границы заголовка окна до нижней границы самого окна?
Советовать проверять тип системы, и если XP - то увеличивать высоту окна - не надо, т.к. в ХР в частности есть и нормальный вариант отображения заголовка окна, и наверняка может быть вариант с самодельной темой стола когда заголовок будет и больше...
Кстати аналогично и с краями формы, правда там обрезается меньше, и не так заметно...
SPeller (2003-07-20 05:36:00) [1]Тоже с этим сталкивался. Помогала временная установка CanResize в True.
Dimaxx (2003-07-19 23:48:00) [2]У меня почти такая же ботва была. Состояние главной формы стояло Maximized. В ХР неправильно определялся размер окна - нижняя часть заезжала за панель задач, у кореша - еще и сверху оставался промежуток с обоями. Помогла тока ShowWindow(Form.GetWindowHandle,SW_MAXIXMIZED).
Sagrer (2003-07-18 02:23:00) [3]у меня в предыдущем посте опечатка :(
"Form.CanResize := true; //Когда false, CanResize почемуто не срабатывает"
означает
"Form.CanResize := true; //Когда false, SetClientSize почемуто не срабатывает"
, хотя это и так поняли, но на всякий случай это сказал.
Gandalf (2003-07-17 22:47:00) [4]
> Form.CanResize := true; //Когда false, CanResize почемуто
> не срабатывает
Фича KOL - если размер менять нельзя, то Width,Height и иже - не пашут, для VCL не привычно.
> Во вторых - непонятным образом изменяется Width и Heigh,
> становится меньше толи на 2, толи на 3 пиксела
Надо смотреть - может API шалит.
Sagrer (2003-07-17 20:47:00) [5]а я и не знал про SetClientSize. Поэтому делал сложнее -
If Form.Height - Form.ClientHeight <> 27 then begin
Form.Height := Form.Height - (27 - (Form.Height - Form.ClientHeight));
end;
Тоесть тут
1) привязка к высоте заголовка (27) - высчитал опытным путем для своих настроек - если вдруг форма будет проектироваться на другом компе с другой высотой заголовка - число надо пересчитывать, а это плохо.
2) Изменяется только выстоа окна, а там обрезаются и края (хотя это можно поправить).
Поэтому когда прочитал про SetClientSize, решил сделать по другому:
OldResize := Form.CanResize; //Запомнить как было
Form.CanResize := true; //Когда false, CanResize почемуто не срабатывает
Form.SetClientSize(444,28);
Form.CanResize := OldResize; //Вернуть как было
Но после использования Form.SetClientSize(444,28);, при попытке сменить Form.CanResize происходит непонятное - во первых, хотя оно и меняется (смотрел watch-ем), но реально форма остается как была в момент использования Form.SetClientSize(444,28);. - если была Form.CanResize = false;, то после
Form.SetClientSize(444,28);
Form.CanResize := true;
ее размер всеравно нельзя изменить
Во вторых - непонятным образом изменяется Width и Heigh, становится меньше толи на 2, толи на 3 пиксела - точно не смотрел, если честно, не смотрел меняются ли они вообще (в watch), но форма становится меньше.
Кладов (2003-07-16 16:28:00) [6]До сих пор SetClientSize использовался только для формы с CanResize=false. Нет проблем поправить, чтобы для всех форм использовался SetClientSize вместо SetSize, так и сделаю.
Gandalf (2003-07-16 09:14:00) [7]
> Но появились невеселые мысли - это что, получается, для
> всех окон такое надо делать?
Модет попросить Кладова ввести в MCK Form.UseClientSizes - что устанавливались ClientWidth/ClientHeight - или типа того.
> Кстати, в прогах, написанных на VCL под вин с нормальными
> настройками (когда визуально форма генерилась в винде с
> нормальными заголовками окна), и запущеных из под XP со
> скином ( с увеличенным заголовком), такое тоже наблюдается?
Да.
Sagrer (2003-07-16 02:01:00) [8]Спасибо, разобрался.
Но появились невеселые мысли - это что, получается, для всех окон такое надо делать? Кстати, в прогах, написанных на VCL под вин с нормальными настройками (когда визуально форма генерилась в винде с нормальными заголовками окна), и запущеных из под XP со скином ( с увеличенным заголовком), такое тоже наблюдается? Проверить это к сожалению не могу - у меня win2k PRO + win98 стоит.
Gandalf (2003-07-14 18:33:00) [9]Попробуй ClientWidth/Height/Rect.