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

請問如何再DBGrid中做到換行的效果

尚未結案
Suzuna
一般會員


發表:25
回覆:57
積分:16
註冊:2004-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-28 20:24:42 IP:61.220.xxx.xxx 未訂閱
各位好,我希望使用DBGrid時,如資料字數很多,顯示的時候能自動換行,而不是橫向顯示到底,請問該如何做呢 我找過此問題,但是只找到DELPHI的,我看不太懂DELPHI那段程式碼,所以想請問一下,是否有辦法寫呢? 先謝謝各位
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-29 20:38:39 IP:202.104.xxx.xxx 未訂閱
DELPHI那段程式碼方便Post上來嗎? Andy Chang
------
Andy Chang
Suzuna
一般會員


發表:25
回覆:57
積分:16
註冊:2004-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-29 22:19:23 IP:211.76.xxx.xxx 未訂閱
您好,我參考的是這篇文章, 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-29 23:36:12 IP:211.76.xxx.xxx 未訂閱
引言: 您好,我參考的是這篇文章, 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-30 11:59:09 IP:202.104.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-17 01:31:50 IP:211.76.xxx.xxx 未訂閱
引言:
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
看來是這樣子沒錯,所以後來我去下載了元件來用了,還挺好用的 感謝您喔~ 不好意思,最近有點小忙,一直忘了回覆您,抱歉
系統時間:2024-05-19 10:03:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!