Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизРазмер окна всплывающей подсказки Найти похожие ветки
← →
Def (2004-08-04 22:03) [0]Можно ли, зная текст, который будет выводится в подсказке, определить ее размеры (особенно хотелось бы высоту)?
← →
Def (2004-08-04 22:32) [1]Сейчас использую
Function GetHintRect(HintWindow:hwnd;Text:string):TRect;
begin
Result := Types.Rect(0, 0, SendMessage(HintWnd, TTM_GETMAXTIPWIDTH, 0, 0), 0);
DrawText(GetWindowDC(HintWindow), PChar(Text), -1, Result, DT_CALCRECT or
DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
Inc(Result.Right, 6);
Inc(Result.Bottom, 2);
end;
Но для многострочных подсказок размер считается неправильно - чем больше строк, тем неправильнее.
← →
Timedrops © (2004-08-04 22:50) [2]Для получения размера текста надо вызвать API GetTextMetrics - она возвращает инфо о шрифте (TTextMetric).
И о его высоте, начертании, и межстрочном интервале кстати тоже.
← →
Ricks © (2004-08-05 00:10) [3]Твой вариант будет кушать очень много памяти. Вот так правильнее:
Function GetHintRect(HintWindow:hwnd;Text:string):TRect;
var DC : HDC;
begin
Result := Types.Rect(0, 0, SendMessage(HintWnd, TTM_GETMAXTIPWIDTH, 0, 0), 0);
DC:=GetWindowDC(HintWindow);
try
DrawText(DC, PChar(Text), -1, Result, DT_CALCRECT or
DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
Inc(Result.Right, 6);
Inc(Result.Bottom, 2);
finally
ReleaseDC(HintWindow, DC);
end;
end;
← →
Ajax © (2004-08-05 22:59) [4]>[3] Ricks
Мой код был взят из VCL с небольшой правкой. Так вот, он работает не вполне верно. Утечка памяти - это конечно плохо, но я о другом спрашиваю. Как избавиться от прибавления по паре пикселей на каждую строчку подсказки?
← →
Ajax © (2004-08-05 23:00) [5]Прошу прощения за разные ники - воеменами забываю пароль.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c