Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длина поля Caption для TForm [D7, XP]


Страницы:   1 2

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 ©.
Если нет - ну извините...  :(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо