Текущий архив: 2007.04.08;
Скачать: CL | DM;
Вниз
Длина поля Caption для TForm Найти похожие ветки
← →
Alex_C © (2007-03-20 15:48) [0]Как узнать макс длинну Caption у TForm, чтоб надпись полностью умещалась?
← →
clickmaker © (2007-03-20 16:40) [1]Canvas.TextWidth
← →
Neket (2007-03-20 16:40) [2]Может как-то так?
if label1.Width<form1.Canvas.TextWidth(Label1.Caption) then exit;
← →
Knight © (2007-03-20 16:42) [3]Удалено модератором
Примечание: Флуд
← →
clickmaker © (2007-03-20 16:45) [4]Удалено модератором
Примечание: Флуд
← →
Alex_C © (2007-03-20 16:54) [5]То clickmaker: Canvas.TextWidth - ширина текста канваса, а поле Caption для TForm - это то, что в заголовке написано и не зависит от Canvas"а, а зависит от установок сис-темы (мелкий, крупный шрифт). В этом-то и загвоздка.
← →
Ega23 © (2007-03-20 16:56) [6]Удалено модератором
Примечание: Флуд
← →
Neket (2007-03-20 16:57) [7]Удалено модератором
Примечание: Флуд
← →
Neket (2007-03-20 16:58) [8]Удалено модератором
Примечание: Флуд
← →
clickmaker © (2007-03-20 16:58) [9]
> зависит от установок сис-темы (мелкий, крупный шрифт). В
> этом-то и загвоздка
нужно выбрать в Canvas это шрифт перед TextWidth, всего и делов
← →
Ega23 © (2007-03-20 17:29) [10]
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 ©.
Если нет - ну извините... :(
← →
Alex_C © (2007-03-21 08:35) [11]To Ega23: ну просто огромное спасибо :) Буду пробовать!
← →
Alex_C © (2007-03-21 09:51) [12]Разобрался. К сожалению тоже не то. Этот пример опять же позвращает длинну текста для Canvas формы, но не для Caption. Вопрос остается открытым: как определить фонт у Caption формы?
← →
Alex_C © (2007-03-21 09:58) [13]В итоге получается: как определить системный шрифт в заголовке окна?
← →
MBo © (2007-03-21 10:25) [14]>чей копирайт - не помню в точности. вроде - MBo ©.
нет, Игоря
← →
Ega23 © (2007-03-21 10:42) [15]
> MBo © (21.03.07 10:25) [14]
>
> >чей копирайт - не помню в точности. вроде - MBo ©.
> нет, Игоря
Спасибо, сейчас помечу на будущее.
← →
MBo © (2007-03-21 10:43) [16]
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;
← →
Elen © (2007-03-21 10:43) [17]
> Alex_C © (21.03.07 09:58) [13]
Попробуй использоватьSystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(lf),@lf,0);
Где :lf:LOGFONTA;
Ну може еще EnumFontFamilies...
← →
Alex_C © (2007-03-21 10:48) [18]То MBo: Во! Теперь то что надо! Я уже сам дошел до SystemParametrInfo, но вот до этой строчки не додумался:
Canvas.Font.Handle := CreateFontIndirect(NKM.lfCaptionFont);
Спасибо!
← →
Alex_C © (2007-03-21 10:57) [19]Теперь собственно к 1 вопросу темы: как узнать, сколько символов уместится в заголовке окна?
Сейчас мы знаем, как определить длинну текста в заголовке. Теперь осталось определить саму длинну заголовка.
← →
EvChul © (2007-03-21 11:15) [20]Я боюсь показаться назойливым, но
clickmaker © (20.03.07 16:40) [1]
← →
MBo © (2007-03-21 11:38) [21]>как узнать, сколько символов уместится в заголовке окна
Таких средств нет, так что подбором
← →
Alex_C © (2007-03-21 11:42) [22]То EvChul: так конечно не пойдет.
То MBo: да, похоже на то. Пересмотрел все GetSystem... - ничего подходячего (((
← →
ЮЮ © (2007-03-21 12:09) [23]
> Таких средств нет, так что подбором
Т.к. в случае невозможности отрисовки целиком Винда рисует точки, значит она знает реальный Rect.
← →
MBo © (2007-03-21 12:22) [24]>Т.к. в случае невозможности отрисовки целиком Винда рисует точки, значит она знает реальный Rect.
Ну Rect -то известен, а дальше DrawText с dt_ellipsis модифицирует строку
← →
ЮЮ © (2007-03-21 12:36) [25]а DrawText с DT_CALCRECT скажет какая ширинв нужна, чтобы всё влезло. Проблема, насколько я понял, в том, что Rect-а как раз нет
← →
MBo © (2007-03-21 12:52) [26]>ЮЮ © (21.03.07 12:36) [25]
Это поможет, если многострочность допускается, а в заголовке-то такой свободы маневра нет.
← →
homm © (2007-03-21 13:03) [27]> Т.к. в случае невозможности отрисовки целиком Винда рисует
> точки, значит она знает реальный Rect.
Знает, но, имхо, не скажет
← →
ЮЮ © (2007-03-21 13:06) [28]>>Т.к. в случае невозможности отрисовки целиком Винда рисует точки, >значит она знает реальный Rect.
>Ну Rect -то известен, а дальше DrawText с dt_ellipsis модифицирует строку
И я о том же. Если модифицирует, значит известен. Если бы автору был тоже известен, он бы тоже мог модифицировать её до тех пор, пока бы она не уместилась.
>Это поможет, если многострочность допускается, а в заголовке-то такой свободы маневра нет.
При многострочности изменется высота Rect, а при её отсутствии - ширина, ИМНО. Да и ТехтWidth помог бы, да Rect области, доступной для рисования Caption всё равно нужен.
← →
clickmaker © (2007-03-21 13:07) [29]
> Alex_C © (20.03.07 15:48)
а чего, собственно, надо добиться? Ну узнал, что максимум 123 символа влезет. И что? Сокращать текст, что-ли? По какому принципу?
И чем троеточия не устраивают?
Страницы: 1 вся ветка
Текущий архив: 2007.04.08;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.039 c