DBGrid格式问题 |
尚未結案
|
Amanda_Chen
一般會員 發表:25 回覆:82 積分:21 註冊:2003-12-28 發送簡訊給我 |
|
yachanga
資深會員 發表:24 回覆:335 積分:296 註冊:2003-09-27 發送簡訊給我 |
小弟有一個淺見...
若只是要換行的話, 用 StringGrid 會比較容易..
做法: 先將數據全部讀出, 放到Array中. 然後將Array用Canvas塞到StringGrid中. 若Array中字句太長則換行, 此時並將列高加大... 以下只用換兩行為範例, 若要換很多行, 可以用迴圈加強..
希望對你有幫助
=================================================== var
S: array[0..10,0..10] of String; //資料庫塞到Array 省略...
//假設以下為資料庫塞入結果
procedure TForm1.Button1Click(Sender: TObject);
begin
S[1,0]:='說明';// Title
S[1,1]:='這是第一次說明'; //第一筆資料
S[1,2]:='第二次'; // 第二筆資料
S[1,3]:='第三次'; // 第三筆資料
Stringgrid1.ColWidths[0]:=20; //將第一欄欄寬縮短比較好看
end;
//拉出一個StirngGrid, 在StringGrid1DrawCell Method 加上以下code
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
Var
s1: String;
height: Integer;
begin
height:=StringGrid1.RowHeights[0];
s1:= S[Acol,ARow];
if length(s1)<10 then
StringGrid1.Canvas.TextOut(Rect.Left 2,Rect.Top 2,s1)
else
begin
StringGrid1.RowHeights[Arow]:= height 15;
StringGrid1.Canvas.TextOut(Rect.Left 2,Rect.Top 2,copy(s1,1,10));
StringGrid1.Canvas.TextOut(Rect.Left 2,Rect.Top 17,copy(s1,11,20));
end;
end; ~悠遊法國號~
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
procedure TForm1.FormShow(Sender: TObject); var DBGridOptions : TDBGridOptions; begin DBGrid1.DefaultDrawing := False ; //這一段程式碼中,主要設定了 //1) default row height TStringGrid(DBGrid1).DefaultRowHeight := 70 ; //2) 還原 heading 的 row height TStringGrid(DBGrid1).RowHeights[0] := 20 ; //3) 如果讓用戶可以自行更改 column 的闊度,整個 grid //的 row height 都會還原,所以都用程式碼 disable 。 DBGridOptions := DBGrid1.Options ; Exclude(DBGridOptions,dgColumnResize) ; DBGrid1.Options := DBGridOptions ; end; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var drawRect : TRect ; StrValue : String ; backColor, fontColor : TColor ; begin if gdSelected in State then begin backColor := clNavy ; fontColor := clWhite ; end else begin backColor := clWhite ; fontColor := clBlack ; end; DBGrid1.Canvas.Brush.Color := backColor ; DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.Font.Color := fontColor ; //預先縮小秀字的框架範圍,秀字時讓字與框架留有空間 drawRect := Rect ; InflateRect(DrawRect, -4, -2) ; case DataCol of 0 : strValue := DataSource1.DataSet.fieldByName('PRODUCT_ID').AsString ; 1 : strValue := DataSource1.DataSet.fieldByName('PRODUCT_DESC').AsString ; end; DrawText(DBGrid1.Canvas.Handle, PChar(strValue), Length(strValue), DrawRect, DT_WORDBREAK) ; end;這裡使用了 Windows 的 API function DrawText,詳情你可以參閱 API help 檔案,我只用了 DT_WORDBREAK 做分行 (word break/wrap),它還提供了很多設定讓了秀字時改變格式。 |
Amanda_Chen
一般會員 發表:25 回覆:82 積分:21 註冊:2003-12-28 發送簡訊給我 |
|
Amanda_Chen
一般會員 發表:25 回覆:82 積分:21 註冊:2003-12-28 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
|
Amanda_Chen
一般會員 發表:25 回覆:82 積分:21 註冊:2003-12-28 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
|
Amanda_Chen
一般會員 發表:25 回覆:82 積分:21 註冊:2003-12-28 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |