全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1180
推到 Plurk!
推到 Facebook!

關於TListView如何動態調整最適寬度

尚未結案
admin.chang
一般會員


發表:6
回覆:6
積分:2
註冊:2003-01-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-13 11:47:19 IP:202.39.xxx.xxx 未訂閱
我想要依照實際資料長度動態調整欄位寬度為最適寬度,謝謝.
sl@cableplus.com.cn
高階會員


發表:168
回覆:359
積分:130
註冊:2004-03-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-13 15:21:52 IP:218.90.xxx.xxx 未訂閱
你可以根据设置图片(image)大小来调整自己适合的距离
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-13 16:49:38 IP:211.20.xxx.xxx 未訂閱
admin.chang 你好
  以下這段程式,參考看看,如果資料筆數多的話要考慮一下速度的問題。    Var
  ACanvas : TCanvas ;
  i, j : Integer ;
  Li : TListItem;
  w :array Of Integer ;
begin
  ACanvas:=ListView1.Canvas;
  ACanvas.Font := ListView1.Font;
  setLength(w,ListView1.Columns.Count);
  For i:=low(w) To high(w) Do Begin
    w[i] := 0 ;
  End;
  // 逐筆比較寬度(取大值) 
  For i:=0 To ListView1.Items.Count-1 Do Begin
    Li := ListView1.Items[i];
    w[0] := Max(W[0],ACanvas.TextWidth(Li.caption));
    For j:=0 To Li.SubItems.Count-1 Do Begin
      w[j 1] := Max(w[j 1],ACanvas.TextWidth(Li.SubItems[j]));
    End;
  End;      For i:= 0 To ListView1.Columns.Count-1 Do Begin
    ListView1.Columns[i].Width := w[i] 12; // 12是保留空間(左右間距及邊距)
    // 另外第一個Column還要考慮加上圖示及Checked圖示的寬度
  End;
end;
_______________________________________ 深藍的魚,祝您好運..........連連
admin.chang
一般會員


發表:6
回覆:6
積分:2
註冊:2003-01-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-13 21:01:26 IP:218.160.xxx.xxx 未訂閱
感謝您的答覆 可是未考慮表頭的寬度,煩請告知,謝謝.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-13 22:08:48 IP:211.20.xxx.xxx 未訂閱
admin.chang 你好
  在多檢查表頭的Caption即可(如紅色部份)
Var
  ACanvas : TCanvas ;
  i, j : Integer ;
  Li : TListItem;
  w :array Of Integer ;
begin
  ACanvas:=ListView1.Canvas;
  ACanvas.Font := ListView1.Font;
  setLength(w,ListView1.Columns.Count);
  For i:=low(w) To high(w) Do Begin
    w[i] := 0 ;
  End;
  For i:=0 To ListView1.Columns.Count-1 Do Begin
    w[i] := Max(w[i],ACanvas.TextWidth(ListView1.Columns[i].Caption));
  End;
  // 逐筆比較寬度(取大值) 
  For i:=0 To ListView1.Items.Count-1 Do Begin
    Li := ListView1.Items[i];
    w[0] := Max(W[0],ACanvas.TextWidth(Li.caption));
    For j:=0 To Li.SubItems.Count-1 Do Begin
      w[j 1] := Max(w[j 1],ACanvas.TextWidth(Li.SubItems[j]));
    End;
  End;      For i:= 0 To ListView1.Columns.Count-1 Do Begin
    ListView1.Columns[i].Width := w[i] 12; // 12是保留空間(左右間距及邊距)
    // 另外第一個Column還要考慮加上圖示及Checked圖示的寬度
  End;
end;
_______________________________________ 深藍的魚,祝您好運..........連連
admin.chang
一般會員


發表:6
回覆:6
積分:2
註冊:2003-01-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-14 08:33:54 IP:202.39.xxx.xxx 未訂閱
感謝Chance36的回覆,已解決我的問題了
系統時間:2024-05-17 14:37:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!