請問如何再DBGrid中做到換行的效果 |
尚未結案
|
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
您好,我參考的是這篇文章,
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45682
TATSU版主的程式碼來改,以下貼的是他於此篇討論所發表的程式碼: procedure TForm1.FormShow(Sender: TObject);
var
DBGridOptions : TDBGridOptions;
begin DBGrid1.DefaultDrawing := False ; TStringGrid(DBGrid1).DefaultRowHeight := 70 ; TStringGrid(DBGrid1).RowHeights[0] := 20 ; 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;
//----------------
而我自己在半懂不懂得情況下,照者他寫的寫下這樣: void __fastcall TForm1::FormCreate(TObject *Sender)
{ TStringGrid(DBGrid1).DefaultRowHeight = 70 ;
TStringGrid(DBGrid1).RowHeights[0] =20 ;
//其中他上面有一段用程式碼控制dgColumnResize為false那段,因為我實在看不懂怎麼寫,所以是以手動方式在屬性欄位設定成false } void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
AnsiString StrValue;
TColor backColor,fontColor; if(State.Contains(gdSelected))
{
backColor=clNavy;
fontColor=clWhite;
}
else
{
backColor=clWhite;
fontColor=clBlack;
}
DBGrid1->Canvas->Brush->Color = backColor ;
DBGrid1->Canvas->FillRect(Rect); DBGrid1->Canvas->Font->Color=fontColor ; RECT drawRect= RECT(Rect);
InflateRect(&drawRect,-4,-2);
switch(DataCol)
{
case 0:
StrValue=DataSource1->DataSet->FieldByName("ABC")->AsString;
break;
case 1:
StrValue=DataSource1->DataSet->FieldByName("DEF")->AsString;
break;
}
UINT format = DT_LEFT | DT_VCENTER | DT_WORDBREAK;
DrawText(DBGrid1->Canvas->Handle
,StrValue.c_str(),
StrValue.Length(),
&drawRect,
format); }
|
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言: 您好,我參考的是這篇文章, http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45682 TATSU版主的程式碼來改,以下貼的是他於此篇討論所發表的程式碼:不好意思剛剛才看到版歸,post程式碼的注意事項 故再重新發文一次 < class="code"> procedure TForm1.FormShow(Sender: TObject); var DBGridOptions : TDBGridOptions; begin DBGrid1.DefaultDrawing := False ; TStringGrid(DBGrid1).DefaultRowHeight := 70 ; TStringGrid(DBGrid1).RowHeights[0] := 20 ; 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; void __fastcall TForm1::FormCreate(TObject *Sender) { TStringGrid(DBGrid1).DefaultRowHeight = 70 ; TStringGrid(DBGrid1).RowHeights[0] =20 ; //其中他上面有一段用程式碼控制dgColumnResize為false那段,因為我實在看不懂怎麼寫,所以是以手動方式在屬性欄位設定成false } void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { AnsiString StrValue; TColor backColor,fontColor; if(State.Contains(gdSelected)) { backColor=clNavy; fontColor=clWhite; } else { backColor=clWhite; fontColor=clBlack; } DBGrid1->Canvas->Brush->Color = backColor ; DBGrid1->Canvas->FillRect(Rect); DBGrid1->Canvas->Font->Color=fontColor ; RECT drawRect= RECT(Rect); InflateRect(&drawRect,-4,-2); switch(DataCol) { case 0: StrValue=DataSource1->DataSet->FieldByName("ABC")->AsString; break; case 1: StrValue=DataSource1->DataSet->FieldByName("DEF")->AsString; break; } UINT format = DT_LEFT | DT_VCENTER | DT_WORDBREAK; DrawText(DBGrid1->Canvas->Handle ,StrValue.c_str(), StrValue.Length(), &drawRect, format); }真是不好意思,勞煩各位了 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
Suzuna: TStringGrid(DBGrid1).DefaultRowHeight = 70 ; TStringGrid(DBGrid1).RowHeights[0] =20 ; 雖然編譯會過但起不了作用,使用 PPropInfo PropInfo; PropInfo = GetPropInfo((TTypeInfo *)Form1->Components[i]->ClassInfo(), "DefaultRowHeight"); if (PropInfo) Found.... 但結果沒有,而且我發現使用這種方法若是成功畫面也閃爍的太厲害。 建議使用InfoPower元件TwwDbGrid,只要將裡面屬性Rowheightpercent設定大一點就可以達成妳的要求Andy Chang
------
Andy Chang |
Suzuna
一般會員 發表:25 回覆:57 積分:16 註冊:2004-05-11 發送簡訊給我 |
引言:嗯,後來我自己去下載元件用了,還蠻好用的,謝謝Suzuna: TStringGrid(DBGrid1).DefaultRowHeight = 70 ; TStringGrid(DBGrid1).RowHeights[0] =20 ; 雖然編譯會過但起不了作用,使用 PPropInfo PropInfo; PropInfo = GetPropInfo((TTypeInfo *)Form1->Components[i]->ClassInfo(), "DefaultRowHeight"); if (PropInfo) Found.... 但結果沒有,而且我發現使用這種方法若是成功畫面也閃爍的太厲害。 建議使用InfoPower元件TwwDbGrid,只要將裡面屬性Rowheightpercent設定大一點就可以達成妳的要求Andy Chang 引言:看來是這樣子沒錯,所以後來我去下載了元件來用了,還挺好用的 感謝您喔~ 不好意思,最近有點小忙,一直忘了回覆您,抱歉Suzuna: TStringGrid(DBGrid1).DefaultRowHeight = 70 ; TStringGrid(DBGrid1).RowHeights[0] =20 ; 雖然編譯會過但起不了作用,使用 PPropInfo PropInfo; PropInfo = GetPropInfo((TTypeInfo *)Form1->Components[i]->ClassInfo(), "DefaultRowHeight"); if (PropInfo) Found.... 但結果沒有,而且我發現使用這種方法若是成功畫面也閃爍的太厲害。 建議使用InfoPower元件TwwDbGrid,只要將裡面屬性Rowheightpercent設定大一點就可以達成妳的要求Andy Chang |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |