日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DBGrid 应用全书(一)

發布時間:2025/5/22 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DBGrid 应用全书(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DBGrid 應用全書(一) Delphi 語言的數據庫編程中,DBGrid 是顯示數據的主要手段之一。但是 DBGrid 缺省的外觀未免顯得單調和缺乏創意。其實,我們完全可以在我們的程序中通過編程來達到美化DBGrid 外觀的目的。通過編程,我們可以改變 DBGrid 的表頭、網格、網格線的前景色和背景色,以及相關的字體的大小和風格。
? ?
以下的示例程序演示了對 DBGrid 各屬性的設置,使 Delphi 顯示的表格就像網頁中的表格一樣漂亮美觀。
? ?
示例程序的運行:
? ?
Form1 上放置 DBGrid1Query1DataSource1 三個數據庫組件,設置相關的屬性,使 DBGrid1 能顯示表中的數據。然后,在 DBGrid1 onDrawColumnCell 事件中鍵入以下代碼,然后運行程序,就可以看到神奇的結果了。本代碼在 Windows98Delphi5.0 環境下調試通過。
procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
? const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
var i :integer;
begin
? if gdSelected in State then Exit;
//
定義表頭的字體和背景顏色:
? ? for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
? ? begin
? ? ? (Sender as TDBGrid).Columns[i].Title.Font.Name :='
宋體'; //字體
? ? ? (Sender as TDBGrid).Columns[i].Title.Font.Size :=9; //
字體大小
? ? ? (Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; //
字體顏色(紅色)
? ? ? (Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; //
背景色(綠色)
? ? end;
//
隔行改變網格背景色:
? if Query1.RecNo mod 2 = 0 then
? ? (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //
定義背景顏色
? else
? ? (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //
定義背景顏色
//
定義網格線的顏色:
? ? DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
? with (Sender as TDBGrid).Canvas do //
cell 的邊框
? begin
? ? Pen.Color := $00ff0000; //
定義畫筆顏色(藍色)
? ? MoveTo(Rect.Left, Rect.Bottom); //
畫筆定位
? ? LineTo(Rect.Right, Rect.Bottom); //
畫藍色的橫線
? ? Pen.Color := $0000ff00; //
定義畫筆顏色(綠色)
? ? MoveTo(Rect.Right, Rect.Top); //
畫筆定位
? ? LineTo(Rect.Right, Rect.Bottom); //
畫綠色的豎線
? end;
end;

2.Delphi5 - 隔行改變DBGrid網格顏色 :?

Form1 上放置 DBGrid1Query1DataSource1 三個數據庫組件,設置相關的屬性,使 DBGrid1 能顯示表中的數據。然后,在 DBGrid1 onDrawColumnCell 事件中鍵入以下代碼,然后運行程序
?procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
?DataCol: Integer; Column: TColumn; State: TGridDrawState);
var i:integer;
begin
? if gdSelected in State then Exit; ?//
隔行改變網格背景色:
? ? if adoQuery1.RecNo mod 2 = 0 then
? ? ? (Sender as TDBGrid).Canvas.Brush.Color := clinfobk //
定義背景顏色
? else
? ? (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); ?//
定義背景顏色
?//
定義網格線的顏色:
? DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
? with (Sender as TDBGrid).Canvas do //
cell 的邊框
? begin
? ? Pen.Color := $00ff0000; //
定義畫筆顏色(藍色)
? ? MoveTo(Rect.Left, Rect.Bottom); //
畫筆定位
? ? LineTo(Rect.Right, Rect.Bottom); //
畫藍色的橫線
? ? Pen.Color := clbtnface; //
定義畫筆顏色(蘭色)
? ? MoveTo(Rect.Right, Rect.Top); //
畫筆定位
? ? LineTo(Rect.Right, Rect.Bottom); //
畫綠色
? end;
end;

3. DBGrid指定列上顯示DBComboBox

設置DBGrid1OnDrawDataCell事件如下:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
? if (gdFocused in State) then
? begin
? ? if (Field.FieldName = DBComboBox1.DataField ) then
? ? begin
? ? ? DBComboBox1.Left := Rect.Left + DBGrid1.Left;
? ? ? DBComboBox1.Top := Rect.Top + DBGrid1.top;
? ? ? DBComboBox1.Width := Rect.Right - Rect.Left;
? ? ? DBComboBox1.Height := Rect.Bottom - Rect.Top;
? ? ? DBComboBox1.Visible := True;
? ? end;
? end;
end;
2)
DBGrid指定單元格未獲得焦點時不顯示DBComboBox,設置DBGrid1OnColExit事件如下:
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
? If DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then
? ? begin
? ? ? DBComboBox1.Visible := false;
? ? end;
end;
3)
、當DBGrid指定列獲得焦點時DrawDataCell事件只是繪制單元格,并顯示DBComboBox,但是DBComboBox并沒有獲得焦點,數據的輸入還是在單元格上進行。在DBGrid1KeyPress事件中調用SendMessage這個 Windows API函數將數據輸入傳輸到DBComboBox上,從而達到在DBComboBox上進行數據輸入。因此還要設置KeyPress事件如下:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
? if (key < > chr(9)) then
? begin
? ? if (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) then
? ? begin
? ? ? DBComboBox1.SetFocus;
? ? ? SendMessage(DBComboBox1.Handle
WM_Charword(Key)0);
? ? end;
? end;
end;



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=188955

posted on 2008-01-27 22:06 江宇旋 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/jiangyuxuan/archive/2008/01/27/1055274.html

總結

以上是生活随笔為你收集整理的DBGrid 应用全书(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。