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

Вниз

ширина текста-подсчет   Найти похожие ветки 

 
musk   (2004-09-03 21:39) [0]

проблемка определения ширины текста
с помощью gettextextentPoint32
возращает ширину больше чем на самом деле
куда копать?


 
Cobalt ©   (2004-09-03 22:36) [1]

Код давай!
Как ты определяешь ширину? как рисуешь текст?
Телепатов нету :(


 
musk   (2004-09-04 11:21) [2]

:)

hdc:=getDC(hwnd);
getTextexterntpoint32(hdc,"TESTING",7,SS{TSize});

SS.sx= шрина вроде ничего
но если фонт не 7,а 18 то оно длинее будет в два раза,
это на api


 
Cobalt ©   (2004-09-04 15:04) [3]

GetTextExtentPoint32
Remarks

The GetTextExtentPoint32 function uses the currently selected font to compute the dimensions of the string. The width and height, in logical units, are computed without considering any clipping.
Because some devices kern characters, the sum of the extents of the characters in a string may not be equal to the extent of the string.
The calculated string width takes into account the intercharacter spacing set by the SetTextCharacterExtra function.

"Читайте доки - они рулез!"  © кто-то там (кажется, anonymous)


 
musk   (2004-09-04 18:04) [4]

вы про что намекаете по логические единицы
(in logical units, are ) или что,хелп я
читал  Microsoft Win2000 Api 2002 Diasoft (1080 страниц)
функция возращает больше пиксел,чем на самом деле,
чем больше кегель,не пропорционально как то,
межсимсольный интервал =1


 
GrayFace ©   (2004-09-05 08:52) [5]

Посмотри, как это сделано в TCanvas


 
Anatoly Podgoretsky ©   (2004-09-05 11:37) [6]

musk   (04.09.04 18:04) [4]
А что ты хотел, что бы при маштабировании в целые сохранялось и дробное :-)


 
musk   (2004-09-05 19:45) [7]

Простейший код для проверки работы->

на форму кидаем 2 panel + SpinEdit1 + Button и вешаем на нее ниже

procedure TForm1.Button1Click(Sender: TObject);
var
hdc:cardinal;
AA:TSIZE;
begin
Panel1.Left:=0;
Panel1.Width:=193;
Panel2.Left:=0;
Panel2.Width:=193;
panel1.Font.Size:=8;
//panel1.Font.Size:=24;    {PROBA}
panel1.caption:="PROVERKA";

hdc:=getdc(panel1.Handle);
GetTextExtentPoint32(hdc,"PROVERKA",8,AA);

Panel2.Width:=AA.cx;
SpinEdit1.Value:=AA.cx;
end;

при нажатии кнопки текст увеличевается и
ширина панели №2 должна быть ширине текста панели №1

задаю size=8 получается в  SpinEdit1 73
визуально вроде правельно

задаю size=24 получается тоже 73 ! пиксел
Взял панель потому-что у label нет handle

Замена значений в hdc:=getdc на Application.Handle ,
Form1.Handle ,panel1.ParentWindow ничего не меняет

а в TCanvas GetTextExtentPoint32 не используется D4 (unit Graphics;)


 
Kaminski Sergey   (2004-09-06 01:40) [8]

Эх, а не нужно было "Взял панель потому-что у label нет handle"...
Нужно нормально эксперимент поставить, а не глюки у уважаемой функции искать ;)

Вот этот момент:

 hdc:=getdc(panel1.Handle);

 Ты создаешь ДЦ на основе хэндла окна  твоей Panel. С чего ты взял, что у новосозданного ДЦ будет фонт и прочие атрибуты, как у твоей панельки в Object Inspector. Как минимум выбери нужный фонт в новосозданный DeviceContext после создания:

 hdc:=getdc(panel1.Handle);
 SelectObject(hdc,Panel1.Font.Handle);
 GetTextExtentPoint32(hdc,"PROVERKA",8,AA);

и сделай работу над ошибками ;-)


 
musk   (2004-09-06 18:24) [9]

заработало ,как ни странно=
Спасибо Kaminski Sergey   !
Читаю Интерфейс графических устройств GDI !



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.033 c
1-1095888698
Константинов
2004-09-23 01:31
2004.10.10
Подскажите, как правильно работать со свойствами-массивами


4-1094144591
Einstein
2004-09-02 21:03
2004.10.10
Окно на WinApi


10-1044343249
JibSkeart
2003-02-04 10:20
2004.10.10
приммеры COM DCOM на Bulder C++


4-1094532736
Duka
2004-09-07 08:52
2004.10.10
USB


3-1094920725
Master Kolyan
2004-09-11 20:38
2004.10.10
Организация виртуальной памяти используя принципы работы БД





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский