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

Вниз

Почему не выполняется функция GetCharWidth32?   Найти похожие ветки 

 
N   (2002-09-02 08:15) [0]

Нигде не могу найти ответ, почему не выполняется функция GetCharWidth32. :( Есть какие мысли? Спасибо.


procedure TForm1.Button1Click(Sender: TObject);
var
CharWidth: Integer;
begin
with Canvas.Font do begin
Name := "System"; //Выбираем шрифт не TrueType.
Style := [];
Size := 12;
end; //with

MessageDlg(
BoolToStr(GetCharWidth32(Canvas.Handle, 65, 65, CharWidth)),
mtWarning,
[mbOK],
0); // Никогда не выполняется успешно :(.
end;


 
MBo   (2002-09-02 08:36) [1]

а почему бы не ичпользовать TCanvas.TextWidth?


 
N   (2002-09-02 10:30) [2]

Нормальные герои всегда идут в обход? :)

Потому что это медленно (вдруг я захочу узнать ширину не одного, а всех символов в шрифте)? Ну и наконец, это интересно теоретичски: такая же фигня и с функцией GetCharWidthFloat, а это уже не весело. :( Кой черт она не робит?


 
N   (2002-09-02 11:11) [3]

Блин, я томоз :(. Мораль: всегда смотрите Requirements.

Requirements
Windows NT/2000/XP: Included in Windows NT 3.5 and later.
Windows 95/98/Me: Unsupported.
Header: Declared in Wingdi.h; include Windows.h.
Library: Use Gdi32.lib.
Unicode: Implemented as Unicode and ANSI versions.


 
Bachin   (2002-09-02 13:27) [4]

и это еще не все!!! вот так работает....

function GetCharWidth32_(DC: HDC; FirstChar, LastChar: UINT; Widths: PInteger): BOOL; stdcall; external gdi32 name "GetCharWidth32A";

procedure TForm1.Button1Click(Sender: TObject);
var
CharWidth: PInteger;
begin
with Canvas.Font do begin
Name := "System"; //Выбираем шрифт не TrueType.
Style := [];
Size := 12;
end; //with

GetMem(CharWidth, SizeOf(integer));

GetCharWidth32_(Canvas.Handle, Ord("A"), Ord("A"), CharWidth);
ShowMessage(IntToStr(CharWidth^));

FreeMem(CharWidth);
end;


 
N   (2002-09-02 16:23) [5]

Увы, вышеприведенный код, по крайней мере у меня на Win 98 не работает: выдается какой-то мусор и функция возвращает False. Ну да фиг с ней, плохо другое: код ниже выполняется на Win XP, а на Win 98 не хочет, хотя в доке написано:

Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.

Вот и думай теперь :(


procedure TForm1.Button1Click(Sender: TObject);
var
Widths: array[0..9] of Single;
begin
Canvas.Font.Name := "Arial";

if GetCharWidthFloat(
Canvas.Handle, // handle to DC
65, // first-character code point
74, // last-character code point
Widths // buffer for widths
) then
ShowMessage("Ты сделал это!")
else
ShowMessage("Попробуй еще раз! " + SysErrorMessage(GetLastError));
end;


 
Игорь Шевченко   (2002-09-02 16:48) [6]

А что в GetLastError ?



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

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

Наверх





Память: 0.45 MB
Время: 0.008 c
3-55915
alf_
2002-09-26 21:28
2002.10.17
DBGrid


3-55988
maxim2
2002-09-26 09:19
2002.10.17
Выбрать все разные значения полей из поля


1-56160
SinnerPro
2002-10-07 12:11
2002.10.17
Вопрос о форме ( окне программы )


3-56000
kaif
2002-09-26 04:14
2002.10.17
Чем же занимается таинственный модуль Proxies в ?


3-55981
Солер
2002-09-25 13:21
2002.10.17
Не выполняется SQL запрос





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