Форум: "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