Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.032 c
6-1161452263
_stdcall
2006-10-21 21:37
2007.04.08
Разборка FLAP пакетов.


6-1161273743
Antoxa2005
2006-10-19 20:02
2007.04.08
Подскажите, как отловить подключение по локальной сети и если


2-1173955723
Max459
2007-03-15 13:48
2007.04.08
Тень от формы.


1-1170676693
Kolan
2007-02-05 14:58
2007.04.08
Canvas.TextWidth вешает программу.


2-1173314268
Wind
2007-03-08 03:37
2007.04.08
В несколько колонок