Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизStringGrid Найти похожие ветки
← →
adogg (2003-06-09 15:55) [0]Можно ли в ячейке СтрингГрида вывести текст в две строки.
Если можно, то как?
← →
Palladin (2003-06-09 15:58) [1]можно, выводя текст вручную на OnDrawCell
пример в соседней ветке...
← →
namor (2003-06-09 16:08) [2]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var iLeft, iTop: integer;
begin
iLeft := Rect.Left + 2;
iTop := Rect.Top + TStringGrid(Sender).Canvas.TextHeight( "Wg" );
with TStringGrid(Sender).Canvas do begin
FillRect( Rect );
// здесь проверяешь номер строки/столбца
if (ARow = 1) and (ACol = 1) then begin
Font.Style := [fsBold];// просто для примера :)
//первая строка
TextOut( ileft, Rect.Top, "123123123123" );
Font.Style := [];
//вторая
TextOut( ileft, iTop, "qweqweqwe" );
end else
// прорисовываем как обычно
TStringGrid(Sender).DefaultDrawing := true; end;
end;
← →
Song (2003-06-09 16:45) [3]DrawText()
← →
han_malign (2003-06-09 16:50) [4]D5
unit TextGrid;
interface
uses Windows, Grids, classes;
type
TTextGrid = class(TStringGrid)
private
F_fAutoSize : boolean;
protected
procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TGridDrawState); override;
function ChangeSizeByMax(ARow,AOldHeight: Longint) : boolean;virtual;
public
constructor Create(AOwner: TComponent); override;
published
property AutoSize : boolean read F_fAutoSize
write F_fAutoSize;
end;
implementation
procedure TTextGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TGridDrawState);
var ss : TStringList;
s,_s : String;
i,h : integer;
chComma : char;
_Rect : TRect;
const _fChangeSize : boolean = false;
begin
if not ChangeSizeByMax(aRow,ARect.Bottom-ARect.Top) then begin
ss:=TStringList.Create;
s:=Cells[ACol,aRow];
_s:="";
chComma:=" ";
if s="" then ss.Append(s);
for i:=1 to Length(s) do begin
if s[i] in [#0,#13,#10] then begin
if (s[i]<>#10)or(chComma<>#13) then
begin ss.Add(_s); _s:=""; end;
chComma:=s[i];
end else begin
_s:=_s+s[i];
chComma:=" ";
end;
end;
if (_s<>"") or (chComma in [#0,#13,#10]) then ss.Append(_s);
h:=(Canvas.TextHeight("Wy")+4);
if DefaultDrawing then begin
_Rect:=ARect;
_Rect.Bottom:=_Rect.Top+h-1;
for i:=0 to ss.Count-1 do begin
Canvas.TextRect(_Rect, _Rect.Left+2, _Rect.Top+2, ss[i]);
inc(_Rect.Top,h);inc(_Rect.Bottom,h);
end;
end;
// inherited DrawCell(ACol, ARow, ARect, AState);
ss.Free;
end;
end;
function TTextGrid.ChangeSizeByMax(ARow,AOldHeight: Longint) : boolean;
var s,_s : String;
i,j,k,h : integer;
chComma : char;
_NewHeight : integer;
begin
_NewHeight:=0;
for i:=0 to ColCount-1 do begin
s:=Cells[i,aRow];
j:=1;
chComma:=" ";
for k:=1 to Length(s) do begin
if s[k] in [#0,#13,#10] then begin
if (s[k]<>#10)or(chComma<>#13) then
begin inc(j); end;
chComma:=s[k];
end else chComma:=" ";
end;
if (_s<>"") or (chComma in [#0,#13,#10]) then inc(j);
h:=(Canvas.TextHeight("Wy")+4)*j;
if h>_NewHeight then _NewHeight:=h;
end;
Result:=F_fAutoSize and (_NewHeight>0)and(AOldHeight<>_NewHeight);
if Result then RowHeights[aRow]:=_NewHeight;
end;
constructor TTextGrid.Create(AOwner: TComponent);
begin
inherited;
F_fAutoSize:=true;
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.027 c