![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длина поля Caption для TForm [D7, XP]
Alex_C © (2007-03-20 15:48:00)Как узнать макс длинну Caption у TForm, чтоб надпись полностью умещалась?
clickmaker (2007-03-21 13:07:00) [1]
> Alex_C © (20.03.07 15:48)
а чего, собственно, надо добиться? Ну узнал, что максимум 123 символа влезет. И что? Сокращать текст, что-ли? По какому принципу?
И чем троеточия не устраивают?
ЮЮ (2007-03-21 13:06:00) [2]>>Т.к. в случае невозможности отрисовки целиком Винда рисует точки, >значит она знает реальный Rect.
>Ну Rect -то известен, а дальше DrawText с dt_ellipsis модифицирует строку
И я о том же. Если модифицирует, значит известен. Если бы автору был тоже известен, он бы тоже мог модифицировать её до тех пор, пока бы она не уместилась.
>Это поможет, если многострочность допускается, а в заголовке-то такой свободы маневра нет.
При многострочности изменется высота Rect, а при её отсутствии - ширина, ИМНО. Да и ТехтWidth помог бы, да Rect области, доступной для рисования Caption всё равно нужен.
homm (2007-03-21 13:03:00) [3]> Т.к. в случае невозможности отрисовки целиком Винда рисует
> точки, значит она знает реальный Rect.
Знает, но, имхо, не скажет
MBo (2007-03-21 12:52:00) [4]>ЮЮ © (21.03.07 12:36) [25]
Это поможет, если многострочность допускается, а в заголовке-то такой свободы маневра нет.
ЮЮ (2007-03-21 12:36:00) [5]а DrawText с DT_CALCRECT скажет какая ширинв нужна, чтобы всё влезло. Проблема, насколько я понял, в том, что Rect-а как раз нет
MBo (2007-03-21 12:22:00) [6]>Т.к. в случае невозможности отрисовки целиком Винда рисует точки, значит она знает реальный Rect.
Ну Rect -то известен, а дальше DrawText с dt_ellipsis модифицирует строку
ЮЮ (2007-03-21 12:09:00) [7]
> Таких средств нет, так что подбором
Т.к. в случае невозможности отрисовки целиком Винда рисует точки, значит она знает реальный Rect.
Alex_C (2007-03-21 11:42:00) [8]То EvChul: так конечно не пойдет.
То MBo: да, похоже на то. Пересмотрел все GetSystem... - ничего подходячего (((
MBo (2007-03-21 11:38:00) [9]>как узнать, сколько символов уместится в заголовке окна
Таких средств нет, так что подбором
EvChul (2007-03-21 11:15:00) [10]Я боюсь показаться назойливым, но
clickmaker © (20.03.07 16:40) [1]
Alex_C (2007-03-21 10:57:00) [11]Теперь собственно к 1 вопросу темы: как узнать, сколько символов уместится в заголовке окна?
Сейчас мы знаем, как определить длинну текста в заголовке. Теперь осталось определить саму длинну заголовка.
Alex_C (2007-03-21 10:48:00) [12]То MBo: Во! Теперь то что надо! Я уже сам дошел до SystemParametrInfo, но вот до этой строчки не додумался:
Canvas.Font.Handle := CreateFontIndirect(NKM.lfCaptionFont);
Спасибо!
Elen (2007-03-21 10:43:00) [13]
> Alex_C © (21.03.07 09:58) [13]
Попробуй использовать
SystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(lf),@lf,0);
Где :lf:LOGFONTA;
Ну може еще EnumFontFamilies...
MBo (2007-03-21 10:43:00) [14]
var
NKM: NONCLIENTMETRICS;
begin
NKM.cbSize := SizeOf(NKM);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NKM, 0);
Canvas.Font.Handle := CreateFontIndirect(NKM.lfCaptionFont);
Caption := Caption + ' width = ' + IntToStr(Canvas.TextWidth(Caption));
end;
Ega23 (2007-03-21 10:42:00) [15]
> MBo © (21.03.07 10:25) [14]
>
> >чей копирайт - не помню в точности. вроде - MBo ©.
> нет, Игоря
Спасибо, сейчас помечу на будущее.
MBo (2007-03-21 10:25:00) [16]>чей копирайт - не помню в точности. вроде - MBo ©.
нет, Игоря
Alex_C (2007-03-21 09:58:00) [17]В итоге получается: как определить системный шрифт в заголовке окна?
Alex_C (2007-03-21 09:51:00) [18]Разобрался. К сожалению тоже не то. Этот пример опять же позвращает длинну текста для Canvas формы, но не для Caption. Вопрос остается открытым: как определить фонт у Caption формы?
Alex_C (2007-03-21 08:35:00) [19]To Ega23: ну просто огромное спасибо :) Буду пробовать!
Ega23 (2007-03-20 17:29:00) [20]
function GetTextWidthInPixels(AText: string; AControl: TControl): integer;
var
propInfo: PPropInfo;
thisFont: TFont;
begin
Result := 0;
propInfo := GetPropInfo(AControl.ClassInfo, 'Font');
if propInfo <> nil then begin
thisFont := TFont(GetObjectProp(AControl, 'Font'));
if Assigned(thisFont) then
with TControlCanvas.Create do
try
Control := AControl;
Font.Assign(thisFont);
Result := TextWidth(AText);
finally
Free;
end;
end;
end;
чей копирайт - не помню в точности. вроде - MBo ©.
Если нет - ну извините... :(