DBGrid 框線不見了 |
缺席
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
請教各位前輩們:
小弟將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 發送簡訊給我 |
參考看看 ,網路抓的
自行拉一連結有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 發送簡訊給我 |
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
引言: 我加入這行會有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 發送簡訊給我 |
你在 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 發送簡訊給我 |
前輩:我只有在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 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
我找到問題在哪了,下列這段程式會影響,若可以直接在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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |