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

DBGrid 框線不見了

缺席
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-09 11:18:30 IP:61.221.xxx.xxx 未訂閱
請教各位前輩們: 小弟將DBGrid某個boolean欄位用ChekcBox顯示,但是若點選到其他欄位的時候,DBGrid的框線會不見,請問如何改善阿?? procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const // 這個整數值將按照布林值返回,並送入陣列 CtrlState : array[Boolean] of Integer=(DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED); begin //確保只有在邏輯欄位才能插入元件 if Column.Field.DataType = ftBoolean then begin DBGrid1.Canvas.FillRect(Rect); DrawFrameControl(DBGrid1.Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]); end; end;
------
ivankuo
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-09 11:50:27 IP:218.163.xxx.xxx 未訂閱
參考看看 ,網路抓的 自行拉一連結有boolean欄位的query或table元件,及datasource  
unit Unit2;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBTables, ADODB;    type
  TForm2 = class(TForm)
    DBGrid1: TDBGrid;
    procedure DBGrid1CellClick(Column: TColumn);
    procedure DBGrid1ColEnter(Sender: TObject);
    procedure DBGrid1ColExit(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
     OriginalOptions: TDBgridOptions;
     
  public
    { Public declarations }
    procedure SaveBoolean();
  end;    var
  Form2: TForm2;    implementation    {$R *.dfm}    procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
     if dbgrid1.selectedfield.datatype=ftboolean then
      saveboolean();    end;    procedure TForm2.DBGrid1ColEnter(Sender: TObject);
begin       if dbgrid1.selectedfield.datatype=ftboolean then
   begin
        OriginalOptions := DBGrid1.Options;
        DBGrid1.Options := DBGrid1.Options - [dgEditing];
   end;         end;    procedure TForm2.DBGrid1ColExit(Sender: TObject);
begin 
  if dbgrid1.selectedfield.datatype=ftboolean then
       dbgrid1.Options :=originaloptions;    end;    procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
 const
   ctrlstate :array[boolean] of integer=(DFCS_BUTTONCHECK,DFCS_BUTTONCHECK OR DFCS_CHECKED);    begin
   if Column.Field.DataType = ftBoolean then
     begin           DBGrid1.Canvas.FillRect(Rect);             DrawFrameControl(DBGrid1.Canvas.Handle,Rect,                   DFC_BUTTON,                   CtrlState[Column.Field.AsBoolean]);
     end;    end;    procedure TForm2.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin     //確保該欄是邏輯字段和空格鍵在鍵盤中被敲擊    if ( Key = VK_SPACE ) and( DBGrid1.SelectedField.DataType = ftBoolean ) then
          SaveBoolean();
end;    procedure TForm2.saveboolean();
begin     DBGrid1.SelectedField.Dataset.Edit;     DBGrid1.SelectedField.AsBoolean :=not DBGrid1.SelectedField.AsBoolean;     DBGrid1.SelectedField.Dataset.Post;    end;    end. 
永遠追不上技術更新的速度~~ 發表人 -
------
星期一,二...無窮迴圈@@
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-09 11:55:22 IP:61.221.xxx.xxx 未訂閱
我也是這裡抓的阿~~~但是我的問題不是這個耶~~~ 若點選到其他欄位的時候,DBGrid的框線會不見,請問如何改善阿??
------
ivankuo
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-09 14:43:15 IP:210.243.xxx.xxx 未訂閱
試試看 if Column.Field.DataType = ftBoolean then begin //加入這行 InflateRect(Rect,-1,-1); DBGrid1.Canvas.FillRect(Rect); DrawFrameControl(DBGrid1.Canvas.Handle,Rect,DFC_BUTTON,CtrlState [Column.Field.AsBoolean]); end; 唉~
------
唉~
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-09 14:54:29 IP:61.221.xxx.xxx 未訂閱
我加入這行會有error InflateRect(Rect,-1,-1); error:constant object can not be passed as var parameter
------
ivankuo
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-09 15:23:46 IP:218.163.xxx.xxx 未訂閱
引言: 我加入這行會有error InflateRect(Rect,-1,-1); error:constant object can not be passed as var parameter
我測試不會有你的問題ㄟ,還有上面的錯是rect 是宣告成const,應該自行宣告一rect,再丟入InflateRect,要丟入Var才行 永遠追不上技術更新的速度~~< src="http://140.134.4.20/~g8905202/pucca.gif">
------
星期一,二...無窮迴圈@@
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-09 15:30:54 IP:218.16.xxx.xxx 未訂閱
你在 TForm1.DBGrid1DrawColumnCell (或 onDrawDataCell) 應有其他碼畫其他 Cell 罷,問題應是出在你沒 post 出來的其他碼,畫時連原本的格線也擋住了。若是這樣的話,解決的辦法是將用來 Draw 的那個 Rect 的 Top, Left 1 ; Button, Right - 1 以免擋著了格線 另外這事件傳入的 Rect 是 const 的不能修改,你可另做一個來用 如 : var ARect : TRect ARect.Left := Rect.Left - 1; ....
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-09 15:54:45 IP:61.221.xxx.xxx 未訂閱
前輩:我只有在TForm1.DBGrid1DrawColumnCell 有畫,但是依您的方式去改結果還是一樣耶~~~是不是改錯啦?? procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const // 這個整數值將按照布林值返回,並送入陣列 CtrlState : array[Boolean] of Integer=(DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED); var MyRect:TRect; begin //確保只有在邏輯欄位才能插入元件 if Column.Field.DataType = ftBoolean then begin MyRect.Left:=Rect.Left 1; MyRect.Top:=Rect.Top 1; MyRect.Bottom:=Rect.Bottom-1; MyRect.Right:=Rect.Right-1; InflateRect(MyRect,1,1); DBGrid1.Canvas.FillRect(MyRect); DrawFrameControl(DBGrid1.Canvas.Handle,MyRect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]); end; end;
------
ivankuo
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-09 17:20:32 IP:210.61.xxx.xxx 未訂閱
應該是別的地方程式碼有動到 我測了
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  ...您所指的程式碼
end;
並沒有發現DBGrid框線不見情形 還是您能更詳實的描述情況?
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-09 17:31:12 IP:61.221.xxx.xxx 未訂閱
前輩您是依我寫的程式去執行嗎?? 如果是,當你用滑鼠去點DBGrid的非CheckBox的欄位就會出現了
------
ivankuo
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-10 08:59:15 IP:210.61.xxx.xxx 未訂閱
是啊 測了結果是不會 我用Delphi5
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-10 11:09:43 IP:61.216.xxx.xxx 未訂閱
參考看看:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33751    網海無涯,學無止境!
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-07-14 10:44:30 IP:61.221.xxx.xxx 未訂閱
我找到問題在哪了,下列這段程式會影響,若可以直接在DBGrid編輯的話是不需 加這段,但若不是的化小弟還在想要怎做?? procedure TForm2.DBGrid1ColEnter(Sender: TObject); begin if dbgrid1.selectedfield.datatype=ftboolean then begin OriginalOptions := DBGrid1.Options; DBGrid1.Options := DBGrid1.Options - [dgEditing]; end; end; procedure TForm2.DBGrid1ColExit(Sender: TObject); begin if dbgrid1.selectedfield.datatype=ftboolean then dbgrid1.Options :=originaloptions; end;
------
ivankuo
系統時間:2024-05-18 18:29:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!