Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

Как правильно использовать функцию DrawTextEx?   Найти похожие ветки 

 
KIR ©   (2002-08-23 13:28) [0]

Народ, требуется выводить текст в различных колонках грида либо отцентрировано, либо справа, либо слева. Что-то я никак не могу разобраться с параметрами функции DrawTextEx. Я делаю так:

procedure TResultsForm.StringGrid3DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
al: UINT;
s: string;
hi: integer;
R: TRect;
begin
S:=StringGrid3.Cells[ACol,ARow];
al:=DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS or DT_NOPREFIX or DT_WORDBREAK;
R := Rect;
R.left:=R.Left+2;
R.Top:=R.Top+2;
R.Right:=Rect.Right-2;
StringGrid3.Canvas.FillRect(Rect);
hi:=DrawTextEx(StringGrid3.Canvas.Handle, PChar(s), Length(s), R, al or DT_CALCRECT, nil);
if StringGrid3.RowHeights[ARow] < hi then
StringGrid3.RowHeights[ARow]:=hi+6;
DrawTextEx(StringGrid3.Canvas.Handle,Pchar(s),-1,R,al,nil);
end;

Объясните тупому почему параметры пишутся через or. И как их нужно скомпановать, чтобы выровнять текст, например, по правой стороне ячейки?


 
Skier ©   (2002-08-23 13:32) [1]

>KIR

> Объясните тупому почему параметры пишутся через or


А чтобы сложить битики...



> как их нужно скомпановать, чтобы выровнять текст, например,
> по правой стороне ячейки


... or DT_RIGHT - Aligns text to the right.


 
KIR ©   (2002-08-27 09:57) [2]

а как тогда понять строку
...DT_LEFT or DT_VCENTER...?


 
Игорь Шевченко ©   (2002-08-27 10:01) [3]

KIR © (27.08.02 09:57)
а как тогда понять строку
...DT_LEFT or DT_VCENTER...?



Как бред :-)

Впрочем, DT_LEFT равно 0, так что не страшно, но все равно, бред :-)


 
KIR ©   (2002-08-27 10:35) [4]

Внесу небольшое пояснение: вышеприведенныы код был ответом на мой вопрос в этом форуме. Вопрос заключался в том, как сделать так, чтобы текст в Гриде выводился при необходимости в несколько строк. Мне кто-то написал это код. Я его использовал и все вроде работает. Теперь мне понадобилось выравнивание, я стал читать дельфийский Windows SDK. Набрел там на функцию DrawTextEx, и вот сейчас пытаюсь с ней разобраться, но что-то пока не выходит, хотя, казалось бы, все элементарно.

Отсюда, если позволите, все-таки вопрос:
Все-таки (если можно поподробнее) почему параметры вводятся через or, а не через and?


 
ZrenBy ©   (2002-08-27 10:43) [5]

>all
Я не помню, в школе начала матлогики дают или нет ?


 
Игорь Шевченко ©   (2002-08-27 10:49) [6]


> Все-таки (если можно поподробнее) почему параметры вводятся
> через or, а не через and?


Это тайное знание.


 
KIR ©   (2002-08-27 10:56) [7]

м..ки


 
ЮЮ ©   (2002-08-27 11:03) [8]

Двоичная арифметика:
1 or 0 = 1,
1 and 0 = 0.
Формирование пораметра - это заполнение 1-ми, каждая их констант - это 2 в степени N, т.е. 1 в определённой позиции


 
KIR ©   (2002-08-28 10:59) [9]

>> ЮЮ
Большое спсибо


 
KIR ©   (2002-08-29 10:47) [10]

Вот процедура:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
al: UINT;
s: string;
hi: integer;
R: TRect;
begin
S:=StringGrid1.Cells[ACol,ARow];
al:=DT_RIGHT or DT_END_ELLIPSIS or DT_NOPREFIX or DT_WORDBREAK;
R := Rect;
R.left:=R.Left+2;
R.Top:=R.Top+2;
R.Right:=Rect.Right-2;
StringGrid1.Canvas.FillRect(Rect);
hi:=DrawTextEx(StringGrid1.Canvas.Handle, PChar(s), Length(s), R, al or DT_CALCRECT, nil);
if StringGrid1.RowHeights[ARow] < hi then
StringGrid1.RowHeights[ARow]:=hi+6;
DrawTextEx(StringGrid1.Canvas.Handle,Pchar(s),-1,R,al,nil);
end;

она НЕ ВЫРАВНИВАЕТ текст по правому краю, НО как только я комментирую след. строки:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
al: UINT;
s: string;
hi: integer;
R: TRect;
begin
S:=StringGrid1.Cells[ACol,ARow];
al:=DT_RIGHT or DT_END_ELLIPSIS or DT_NOPREFIX or DT_WORDBREAK;
R := Rect;
R.Left:=R.Left+2;
R.Top:=R.Top+2;
R.Right:=Rect.Right-2;
StringGrid1.Canvas.FillRect(Rect);
// hi:=DrawTextEx(StringGrid1.Canvas.Handle, PChar(s), Length(s), R, al or DT_CALCRECT, nil);
// if StringGrid1.RowHeights[ARow] < hi then
// StringGrid1.RowHeights[ARow]:=hi+6;
DrawTextEx(StringGrid1.Canvas.Handle,Pchar(s),-1,R,al,nil);
end;

все получается. Я так понимаю, что проблема в использовании параметра DT_CALCRECT. Но без него я не смогу выводить текст в несколько строк... может мне кто-нибудь помочь?



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

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

Наверх




Память: 0.49 MB
Время: 0.011 c
1-26936
kerkonst
2002-08-27 12:14
2002.09.09
Управление битами


1-26991
MCFire
2002-08-29 18:11
2002.09.09
Как скопировать файл???


1-26989
Леша
2002-08-29 09:39
2002.09.09
Преобразование сроки в формулу


1-27097
MsGuns
2002-08-27 20:02
2002.09.09
Вылет на попытке высветить форму-заставку


1-26938
Igel
2002-08-27 11:14
2002.09.09
Подскажите где найти инфу по интерфейсам?