Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

Длина поля 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.043 c
2-1174140292
sat
2007-03-17 17:04
2007.04.08
TChart


3-1169389719
Дед Маздай
2007-01-21 17:28
2007.04.08
Аналог Old и New в MS SQL


2-1173978351
Dmitry_177
2007-03-15 20:05
2007.04.08
как создать таблицу на WinAPI?


6-1161374305
DillerXX
2006-10-20 23:58
2007.04.08
Помогите с WinINet ом... :(


15-1173609003
oxffff
2007-03-11 13:30
2007.04.08
Встречаем Record Helper





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский