![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова вопрос по DrawTextEx
KIR © (2002-08-29 13:12:00)Вот процедура:
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. Но без него я не смогу выводить текст в несколько строк... может мне кто-нибудь помочь?
Ученик (2002-09-02 11:48:00) [1]procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
al: UINT;
s: string;
hi: integer;
R , R1: 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);
R1 := R;
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, R1,al,nil);
end;
KIR (2002-09-02 11:41:00) [2]Что действительно никто не знает...
KIR (2002-08-30 10:46:00) [3]Люди, ау...