線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1980
推到 Plurk!
推到 Facebook!

TwwDBGrid欄位寬度配置

答題得分者是:max5020
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-25 10:38:15 IP:219.87.xxx.xxx 訂閱
我現在使用了一個TwwDBGrid

我希望在初始設定時, 能將DBGrid的所有欄位恰好佔滿所有寬度, 也就是不要有空白或是出現scroll bar

假設我有10個column, 其中9個都有data, 這9個column的寬度就取最長資料寬度, 剩下的那個就用全寬去扣掉那9個欄位的寬度

目前遇到幾個問題

1.如何取得配置的DBGrid寬度?因為寬度會隨螢幕解析度改變
用DBGrid.ClientWidth?

2.我用以下方法取得各column data的pixel寬度, 最後再set給column,
但是我發現DBGrid.ColWidths[i]並不等於MaxFieldLen[i],
請問是什麼原因?又該如何解決?

[code delphi]
DataMaxFieldLen[i] := DBGrid.Canvas.TextWidth(DBGrid.Fields[i].DisplayText);
.
.
.
DBGrid.ColWidths[i] := MaxFieldLen[i];
[/code]

cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-25 16:59:41 IP:220.128.xxx.xxx 未訂閱
我覺得寫程式,介面不用做到那麼好,寫太好反而被人嫌。
1.這會增加處理時間
2.把精神放在其他更重要的功能

真的要弄的話,只要簡單地根據欄位型態設一下寬度就可以了,日期、布林、浮點數、整數等等,顯示寬度太概都是固定的,不必判斷內容,就可以決定寬度,再來是文字欄位,主鍵欄位包是已知寬度,剩下的,一律給一個固定值就可以了,例如 120 pixels。
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-06-21 09:16:28 IP:219.87.xxx.xxx 訂閱
謝謝!

不過我再設定寬度的時候遇到了一些問題

部分code如下

[code delphi]
DataMaxFieldLen[i] := DBGrid.Canvas.TextWidth(DBGrid.Fields[i].DisplayText) 10; //取得column內容最大pixel寬度
.
.
.
TitleMaxFieldLen[i] := DBGrid.Canvas.TextWidth(DBGrid.Fields[i].DisplayLabel); //取得column title最大pixel寬度

for i := 0 to DBGrid.FieldCount - 1 do
begin
if(DataMaxFieldLen[i] > TitleMaxFieldLen[i]) then
MaxFieldLen[i] := DataMaxFieldLen[i]
else
MaxFieldLen[i] := TitleMaxFieldLen[i];

DBGrid.ColWidths[i] := MaxFieldLen[i]; //將column最大寬度設定給DBGrid
end;
[/code]

想請問以上取值, 給值有什麼問題?

因為DBGrid.ColWidths[i] := MaxFieldLen[i]; 後

DBGrid.ColWidths[i] 跟 MaxFieldLen[i] 大都不一樣, 會有些許誤差

Ex. DBGrid.ColWidths[i] 比 MaxFieldLen[i] 大4 或 DBGrid.ColWidths[i] 比 MaxFieldLen[i] 小5 的情形...

請問為何會發生這狀況?


===================引 用 cancer 文 章===================
我覺得寫程式,介面不用做到那麼好,寫太好反而被人嫌。
1.這會增加處理時間
2.把精神放在其他更重要的功能

真的要弄的話,只要簡單地根據欄位型態設一下寬度就可以了,日期、布林、浮點數、整數等等,顯示寬度太概都是固定的,不必判斷內容,就可以決定寬度,再來是文字欄位,主鍵欄位包是已知寬度,剩下的,一律給一個固定值就可以了,例如 120 pixels。
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-06-22 08:57:10 IP:220.128.xxx.xxx 未訂閱
Hello, 不是用 DBGrid.Columns[i].Width 嗎?
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-06-22 10:13:44 IP:219.87.xxx.xxx 訂閱
不好意思, 沒說清楚, 我是用TwwDBGrid...(接手前人的...)

我在Column下找不到Width可以用,

原本的code也是用DBGrid.ColWidths[i]在給值

謝謝


===================引 用 cancer 文 章===================
Hello, 不是用 DBGrid.Columns[i].Width 嗎?
max5020
資深會員


發表:26
回覆:277
積分:320
註冊:2003-06-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-07-07 13:43:53 IP:211.22.xxx.xxx 訂閱
TwwDBGrid.SizeLastColumn
系統時間:2024-04-20 5:16:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!