DBGrid 应用全书(一)
? ? 以下的示例程序演示了對 DBGrid 各屬性的設置,使 Delphi 顯示的表格就像網頁中的表格一樣漂亮美觀。
? ? 示例程序的運行:
? ? 在 Form1 上放置 DBGrid1、Query1、DataSource1 三個數據庫組件,設置相關的屬性,使 DBGrid1 能顯示表中的數據。然后,在 DBGrid1 的 onDrawColumnCell 事件中鍵入以下代碼,然后運行程序,就可以看到神奇的結果了。本代碼在 Windows98、Delphi5.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 上放置 DBGrid1、Query1、DataSource1 三個數據庫組件,設置相關的屬性,使 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
設置DBGrid1的OnDrawDataCell事件如下:
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,設置DBGrid1的OnColExit事件如下:
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
? If DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then
? ? begin
? ? ? DBComboBox1.Visible := false;
? ? end;
end;
3)、當DBGrid指定列獲得焦點時DrawDataCell事件只是繪制單元格,并顯示DBComboBox,但是DBComboBox并沒有獲得焦點,數據的輸入還是在單元格上進行。在DBGrid1的KeyPress事件中調用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_Char,word(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 应用全书(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新的html页面拼接类库(简易的模板引擎
- 下一篇: 字符串MD5加密和产生一个随机密码的方法