做个试验 var a:string; begin a:='a'; showmessage(inttostr(length(a)));//一个字符的长度; showmessage(inttostr(sizeof(a)));//一个字符所占物理内存的长度; end;
var a,b:String; c,d:WideString;a='s' //一个字节 b='长'//两个字节 c='s' //两个字节 d='长'//两个字节
楼主是想动态生成listview 的column的width吗?
1.为每个列的最大长度分别设置一个变量 2.在加载数据的时候,为这个变量赋值。 3.在Resize事件或者是show事件中设置column的宽度。 var w1, w2: integer; //全局变量var vItem: TListItem; i: integer; begin w1 := 0l; w2 := 0; for i := 0 to 数据数量-1 do begin if Length(数据) > w1 then w1 := Length(数据) //获取最大长度的数据。 vItem := Listview1.Items.add; ... end; end;resize事件 Listview1.columns[0].width := w1;
一个循环就能搞定的, 写成一个函数SetListViewCaptionWidth, 调用起来方便些: procedure SetListViewCaptionWidth(AListView: TListView); var i : Integer; begin AListView.Canvas.Font := AListView.Font; for i := 0 to AListView.Columns.Count - 1 do AListView.Columns[i].Width := AListView.Canvas.TextWidth(AListView.Columns[i].Caption) + 12; end; procedure TForm1.Button1Click(Sender: TObject); begin SetListViewCaptionWidth (ListView1); end;
var
a:string;
begin
a:='a';
showmessage(inttostr(length(a)));//一个字符的长度;
showmessage(inttostr(sizeof(a)));//一个字符所占物理内存的长度;
end;
a,b:String;
c,d:WideString;a='s' //一个字节
b='长'//两个字节
c='s' //两个字节
d='长'//两个字节
2.在加载数据的时候,为这个变量赋值。
3.在Resize事件或者是show事件中设置column的宽度。
var
w1, w2: integer; //全局变量var
vItem: TListItem;
i: integer;
begin
w1 := 0l; w2 := 0;
for i := 0 to 数据数量-1 do
begin
if Length(数据) > w1 then
w1 := Length(数据) //获取最大长度的数据。
vItem := Listview1.Items.add;
...
end;
end;resize事件
Listview1.columns[0].width := w1;
procedure SetListViewCaptionWidth(AListView: TListView);
var
i : Integer;
begin
AListView.Canvas.Font := AListView.Font;
for i := 0 to AListView.Columns.Count - 1 do
AListView.Columns[i].Width := AListView.Canvas.TextWidth(AListView.Columns[i].Caption) + 12;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetListViewCaptionWidth (ListView1);
end;
Canvas.TextHeight('test')
Canvas.TextWidth('test')
这可获得字的宽和高,楼主可以用这个来判断