Вниз
Скачать: CL | DM;

Почему не выполняется функция 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-56226
wer1
2002-10-07 08:46
2002.10.17
Мастера подскажите! Нужно чтобы при нажати на какой либо элемент


3-56007
Vikuksa
2002-09-20 15:22
2002.10.17
Кошмар


14-56279
LStranger
2002-09-21 21:47
2002.10.17
Новая доктрина США: ударить первыми


14-56269
BF7ru
2002-09-20 14:39
2002.10.17
Помогите с PHP, плиз


4-56411
NAlexey
2002-09-03 13:33
2002.10.17
Как узнать нажат ли CTRL




   Наверх