Tstringgrid(50)

  • 主题发起人 主题发起人 wf0156
  • 开始时间 开始时间
W

wf0156

Unregistered / Unconfirmed
GUEST, unregistred user!
这个控件能不能根据字数的多少自动把cell改成两行或三行?就是改变一格的行高,有一个defaultheight是所有的高都改了,我只想改文字很长显示不开的。谢谢。
 
改变一格的行高?不可以!
 
变通的方法,只有合并格子了~~
 
合并格子不行的,因为其它格字里也有信息要显示。那有没有其它控件可以达到这个要求呢?谢谢
 
不能自动但可以手动改变某行高度StringGrid1.RowHeights[3]:=20---------------------------- object StringGrid1: TStringGrid Left = 136 Top = 176 Width = 320 Height = 169 ColCount = 3 RowCount = 4 TabOrder = 1 RowHeights = ( 24 18 40 24) end
 
谢谢,不过我的意思是让它按字数的多少分配是两行还是三行有汉字也有字母
 
我试试,谢谢
 
StringGrid1.Canvas.TextHeight() 和TextWeight函数计算长度和高度,然后自己计算该行需要多高,自己绘制内容,因为StringGrid1不会自动换行
 
接受答案了.
 
procedure TFrmmain.SGjishiDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);begin if ACol = 0 then begin if SGjishi.Cells[6, ARow] = '货源' then with SGjishi.Canvas do Draw(Rect.Left, Rect.Top, ImageH.Picture.Graphic); if SGjishi.Cells[6, ARow] = '车源' then with SGjishi.Canvas do Draw(Rect.Left, Rect.Top, ImageC.Picture.Graphic); end; //rect.Top:=rect.Top+20; // stringgrid1.Canvas.TextOut(rect.left,rect.top+8,pchar(StringGrid1.Cells[Acol,Arow]) ); //DrawText(StringGrid1.Canvas.Handle,pchar(StringGrid1.Cells[Acol,Arow]),Length(StringGrid1.Cells[Acol,Arow]),Rect, DT_VCENTER or DT_WORDBREAK or DT_LEFT);end;DT_WORDBREAK 这个就是自动换行
 
procedure TForm1.btn1Click(Sender: TObject);begin strngrd1.Cells[1, 1] := '跑龙套右顺百夺大量右在大百在百在百颗基;百显而易见'; strngrd1.Cells[1, 2] := '1233';end;procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);var s: string; iTextHeight: Integer; iTextWidth: Integer; iRowNum: Integer; OldColor, BrushColor: TColor;begin with TStringGrid(Sender) do begin s := Cells[ACol, ARow]; if s = '' then Exit; iTextHeight := Canvas.TextHeight(s); iTextWidth := Canvas.TextWidth(s); iRowNum := iTextWidth div (Rect.Right - Rect.Left) + 1; if RowHeights[ARow] < iRowNum * iTextHeight then RowHeights[ARow] := iRowNum * iTextHeight; if gdSelected in State then BrushColor := clHighlight; else BrushColor := clWhite; Canvas.FillRect(Rect); Canvas.Brush.Color := BrushColor; DrawText(Canvas.Handle, pchar(s),Length(s),Rect, DT_VCENTER or DT_WORDBREAK or DT_LEFT); end;end;
 
后退
顶部