Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Проблема с размером окна в XP.   Найти похожие ветки 

 
Sagrer   (2003-07-14 16:20) [0]

В общем написал на KOL+MCK прогу, вроде все пашет, во время тестирования у одного из тестеров стоял XP, со стандартным скином (тема стола кажется - там у окон другие заголовки, и они чуть выше)

В общем за счет того что в ХР получился заголовок окна выше, а размер самого окна не изменился, мне обрезало кнопки внизу (отступ был маленький, в вин 98 и вообще когда обычный заголовок у окна все было нормально)........... в общем проблема получается в том, что высота формы фиксированная, и в нее входит заголовок, и если этот заголовок имеет нестандартную высоту, то часть окна без заголовка, получается имеет меньший размер в высоту...

Не знает ли кто, как мне вычислить именно расстояние от нижней границы заголовка окна до нижней границы самого окна?

Советовать проверять тип системы, и если XP - то увеличивать высоту окна - не надо, т.к. в ХР в частности есть и нормальный вариант отображения заголовка окна, и наверняка может быть вариант с самодельной темой стола когда заголовок будет и больше...
Кстати аналогично и с краями формы, правда там обрезается меньше, и не так заметно...


 
Gandalf ©   (2003-07-14 18:33) [1]

Попробуй ClientWidth/Height/Rect.


 
Sagrer   (2003-07-16 02:01) [2]

Спасибо, разобрался.

Но появились невеселые мысли - это что, получается, для всех окон такое надо делать? Кстати, в прогах, написанных на VCL под вин с нормальными настройками (когда визуально форма генерилась в винде с нормальными заголовками окна), и запущеных из под XP со скином ( с увеличенным заголовком), такое тоже наблюдается? Проверить это к сожалению не могу - у меня win2k PRO + win98 стоит.


 
Gandalf ©   (2003-07-16 09:14) [3]


> Но появились невеселые мысли - это что, получается, для
> всех окон такое надо делать?


Модет попросить Кладова ввести в MCK Form.UseClientSizes - что устанавливались ClientWidth/ClientHeight - или типа того.


> Кстати, в прогах, написанных на VCL под вин с нормальными
> настройками (когда визуально форма генерилась в винде с
> нормальными заголовками окна), и запущеных из под XP со
> скином ( с увеличенным заголовком), такое тоже наблюдается?


Да.


 
Кладов   (2003-07-16 16:28) [4]

До сих пор SetClientSize использовался только для формы с CanResize=false. Нет проблем поправить, чтобы для всех форм использовался SetClientSize вместо SetSize, так и сделаю.


 
Sagrer   (2003-07-17 20:47) [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), но форма становится меньше.


 
Gandalf ©   (2003-07-17 22:47) [6]


> Form.CanResize := true; //Когда false, CanResize почемуто
> не срабатывает


Фича KOL - если размер менять нельзя, то Width,Height и иже - не пашут, для VCL не привычно.


> Во вторых - непонятным образом изменяется Width и Heigh,
> становится меньше толи на 2, толи на 3 пиксела


Надо смотреть - может API шалит.


 
Sagrer   (2003-07-18 02:23) [7]

у меня в предыдущем посте опечатка :(

"Form.CanResize := true; //Когда false, CanResize почемуто не срабатывает"

означает

"Form.CanResize := true; //Когда false, SetClientSize почемуто не срабатывает"

, хотя это и так поняли, но на всякий случай это сказал.


 
Dimaxx ©   (2003-07-19 23:48) [8]

У меня почти такая же ботва была. Состояние главной формы  стояло Maximized. В ХР неправильно определялся размер окна - нижняя часть заезжала за панель задач, у кореша - еще и сверху оставался промежуток с обоями. Помогла тока ShowWindow(Form.GetWindowHandle,SW_MAXIXMIZED).


 
SPeller ©   (2003-07-20 05:36) [9]

Тоже с этим сталкивался. Помогала временная установка CanResize в True.



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
3-1078895405
Janbolat
2004-03-10 08:10
2004.04.04
Опять про печать


11-1058329802
Александр |
2003-07-16 08:30
2004.04.04
Ресурсы


14-1079013272
Denrom
2004-03-11 16:54
2004.04.04
ИК волны (область применения)


3-1078912232
mixam
2004-03-10 12:50
2004.04.04
BDE


3-1078920213
Kein
2004-03-10 15:03
2004.04.04
Сохранение массива в базе