Если кто-то скажет разумный и надежный способ спросить у окна preferred size — буду признателен.
В WM_NCCALCSIZE какая-то каша написана — все мои попытки задействовать только продемонстрирвали что народ
просто забивает на обработку WM_NCCALCSIZE.
CS>Ну и spy++ должен сказать где то окно оказалось.
CS>Если кто-то скажет разумный и надежный способ спросить у окна preferred size — буду признателен. CS>В WM_NCCALCSIZE какая-то каша написана — все мои попытки задействовать только продемонстрирвали что народ CS>просто забивает на обработку WM_NCCALCSIZE.
Я всегда делал что то подобное: GetWindowRect — взяли RECT окна GetClientRect — взяли RECT клиентской области
Отняли от высоты windowRect выстоту clientRect (также и с длинной) — получили насколько меньше клиетская область.
Ну и исользуем эти величины для вычисления нового размера окна.
Здравствуйте, Danchik, Вы писали:
CS>>Если кто-то скажет разумный и надежный способ спросить у окна preferred size — буду признателен. CS>>В WM_NCCALCSIZE какая-то каша написана — все мои попытки задействовать только продемонстрирвали что народ CS>>просто забивает на обработку WM_NCCALCSIZE.
D>Я всегда делал что то подобное: D>GetWindowRect — взяли RECT окна D>GetClientRect — взяли RECT клиентской области
D>Отняли от высоты windowRect выстоту clientRect (также и с длинной) — получили насколько меньше клиетская область. D>Ну и исользуем эти величины для вычисления нового размера окна.
Я о другом.
Автор, скажем, написал следующее: <input type=sys-datetime>.
Какой размер этому окну мне ставить? И очень хотелось бы знать еще где у него baseline проходит.
[Skip]
CS>Я о другом.
CS>Автор, скажем, написал следующее: <input type=sys-datetime>. CS>Какой размер этому окну мне ставить?
Высоту, например, можна подсмотреть как делает VCL:
procedure TDateTimePicker.AdjustHeight;
var
DC: HDC;
SaveFont: HFont;
SysMetrics, Metrics: TTextMetric;
begin
DC := GetDC(0);
try
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Font.Handle); // шрифт который будет использоваться
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
finally
ReleaseDC(0, DC);
end;
Height := Metrics.tmHeight + (GetSystemMetrics(SM_CYBORDER) * 8);
end;
C длиной повеселее, но тоже решабельно.
CS>И очень хотелось бы знать еще где у него baseline проходит.
Наверное туплю, но что вы подразумеваете под baseline?
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, c-smile, Вы писали:
D>[Skip]
CS>>Я о другом.
CS>>Автор, скажем, написал следующее: <input type=sys-datetime>. CS>>Какой размер этому окну мне ставить?
D>Высоту, например, можна подсмотреть как делает VCL:
Это не работает в общем случае. Я не знаю тип элемента, какой он single или multi-line.
Например:
<input type=sys-datetime> и <input type=sys-calendar>
D>C длиной повеселее, но тоже решабельно.
Похоже что в общем случае никак не решабельно.
Т.е. остается только способ явного описания размеров в CSS.
CS>>И очень хотелось бы знать еще где у него baseline проходит. D>Наверное туплю, но что вы подразумеваете под baseline?
Скажем вот эти два элемента:
Date:<input type=sys-datetime /> and note: <input type=text />
по умолчанию имеют vertical-align:baseline; т.е. их baseline должна совпадать с baseline окружающего текста.
[Skip]
CS>Похоже что в общем случае никак не решабельно.
Похоже на то. BTW, для календаря еcть message — MCM_GETMINREQRECT
CS>Т.е. остается только способ явного описания размеров в CSS.
высоту все-таки желательно было бы вычислить Хотя бы для известных контролов.
CS>>>И очень хотелось бы знать еще где у него baseline проходит. D>>Наверное туплю, но что вы подразумеваете под baseline?
CS>http://en.wikipedia.org/wiki/Baseline_(typography)
CS>Скажем вот эти два элемента: CS>Date:<input type=sys-datetime /> and note: <input type=text /> CS>по умолчанию имеют vertical-align:baseline; т.е. их baseline должна совпадать с baseline окружающего текста.