Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.17;
Скачать: 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 вся ветка

Текущий архив: 2002.10.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-56002
AM
2002-09-26 15:19
2002.10.17
Взаимодейтвие клиентов.... возможно???


3-55963
cypher
2002-09-11 22:07
2002.10.17
ODBC & BDE


1-56173
Yegor Derevenets
2002-10-06 18:53
2002.10.17
StringGrid -> файл


1-56140
DeMoN-777
2002-10-09 13:48
2002.10.17
Как добратся до переменной, котороя в другом окне ?


3-55979
ec
2002-09-23 15:19
2002.10.17
Как убрать окошко с паролем в Table ?