Главная страница
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.017 c
8-56238
:: Joiro [unregistered] ::
2002-06-12 13:23
2002.10.17
Создания кликуемых регионов.


14-56312
VictorT
2002-09-24 15:28
2002.10.17
*.swf банер


1-56056
vilfred
2002-10-07 23:08
2002.10.17
помогите процедуру объявить, оно матерится почему-то...


1-56204
Just programmer
2002-10-07 16:39
2002.10.17
Прорисовка элементов спика


1-56185
denisww
2002-10-07 15:22
2002.10.17
как запихать сразу рисунок вмп в исходник