Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
ВнизКак правильно использовать функцию 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c