如何根据内容修改TStringGrid控件中的行距和列距?(50分)

  • 主题发起人 主题发起人 php2
  • 开始时间 开始时间
P

php2

Unregistered / Unconfirmed
GUEST, unregistred user!
在TStringGrid控件中的行距如果用默认值,当系统的字体改变时总是显得不好看。
而列距在内容比较长的时候有有部分显示不出来。

<h1>我想知道如何根据内容的字体大小和长度控制TStringGrid控件中的行距和列距?</h1>
  不一定要动态修改,可以等内容填充完毕后,再判断内容的字体大小和长度,修改
TStringGrid控件中的行距和列距。
 
假如你知道如何根据字体大小计算输出所需要rect的大小的话, 那么计算后修改ColWidths
和RowHeights属性的值就可以了.

假如你连如何根据字体计算宽度和高度都不知道, 那么看一下TCanvas.TextWidth和
TextHeight属性的帮助就知道了
 
如果是简单问题就不用请教大家了。
看:
procedure TForm.fixrc(max:integer);//修改TStringGrid控件的大小
var
cwmax,i,j,rhmax:integer;
begin
try
with SG_data do begin
rhmax:=Canvas.TextHeight(Cells[1,0])+4;
for i:=0 to RowCount-1 do begin
RowHeights:=rhmax;//高度
end;
for j:=0 to ColCount-1 do begin
cwmax:=0;
for i:=0 to RowCount-1 do begin
if round(Canvas.TextWidth(Cells[j,i])+4)>cwmax then begin
cwmax:=round(Canvas.TextWidth(Cells[j,i])+4);
end;
end;
if cwmax>max then begin
cwmax:=max;
end;
ColWidths[j]:=cwmax;
end;
end;
except
application.MessageBox('fixrc出现意外的错误!','错误:',MB_ICONERROR+MB_OK);
end;
end;

取高度比较简单,但是去宽度就比较麻烦了,特别是有其他符号的时候,宽度往往是不准的。
 
不应该啊?是不是你的max参数限制的问题?
要么在用Canvas之前加一句SG_data.Canvas.Font.Assign(SG_data.Font);试试?
 
取高度比较简单,但是去宽度就比较麻烦了,特别是有其他符号的时候,宽度往往是不准的
--统统转为WIDESTRING
 
以上所说的种种方法都不行啊!!!555
 
从你给出的程序确实看不出有什么不妥,要么你试试在OnDrawCell里调整?(设置一个是否进行调整的标志)
 
加上SG_data.Canvas.Font:=SG_data.Font;
 
多人接受答案了。
 

Similar threads

后退
顶部