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

DBGrid/PopupMenu問題

尚未結案
chuyuan
一般會員


發表:12
回覆:9
積分:4
註冊:2004-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-28 10:50:39 IP:211.152.xxx.xxx 未訂閱
問題的提出: 1.我想動態設定DBGrid的欄位是否顯示; 2.我想動態調整DBGrid的欄位顯示順序; 3.以上兩項工作動態把DBGrid的欄位建立在PopupMenu完成,通過PopupMenu的屬性Chechked確定是否顯示,上下托動菜單項目來改變顯示順序; 4.如何動態建立PopupMenu的菜單項目; 謝謝!!
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-28 11:27:15 IP:218.32.xxx.xxx 未訂閱
chuyuan 你好:    參考看看:
type
  TForm1 = class(TForm)
    ....
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    PpMn : TPopupMenu;
    procedure MenuClick(Sender: TObject);
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}
procedure TForm1.MenuClick(Sender: TObject);
begin
  TColumn(TMenuItem(Sender).Tag).Visible :=  TMenuItem(Sender).Checked;
end;    type TDumCustomDBGrid = class(TCustomDBGrid);
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
    Mi : TMenuItem;
begin
  TDumCustomDBGrid(DBGrid1).CreateColumns; // 利用繼承, 使用 protected 區段之 Procedure
  PpMn := TPopupMenu.Create(self);
  for i := 0 to DBGrid1.Columns.Count - 1 do begin
    Mi := TMenuItem.Create(PpMn);
    Mi.Caption := DBGrid1.Columns[i].FieldName;
    Mi.AutoCheck := True;
    Mi.Checked := True;
    Mi.Tag := Integer(DBGrid1.Columns[i]); // 把 TColumn 記到 Tag Property
    Mi.OnClick := MenuClick; // Assign MenuItem 的 OnClick Event
    PpMn.Items.Add(Mi);
  end;
  DBGrid1.PopupMenu := PpMn;
end;
PS. MenuItem 的 DragDrop......困難度頗高
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-28 11:36:10 IP:202.39.xxx.xxx 未訂閱
將 DBGrid1 的 PopupMenu 屬性設給 PopupMenu1 (此例若是 DBGrid1 有設 Columns 時無效)
type
  TForm1 = class(TForm)
    // ...
    procedure PopupMenu1FieldClick(Sender: TObject); // 這個 procedure 是指定給 PopupMenu1 上每個 MenuItem 的 OnClick Event
  end;
// ...    // 把 Table1 的每個 Field 在 PopupMenu1 各 Create 一個 MenuItem
// 即動態建立 PopupMenu1 上的 MenuItem
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  mi: TMenuItem;
begin
  Table1.Ope;
  for i := 0 to Table1.FieldCount - 1 do
  begin
    mi := TMenuItem.Create(PopuMenu1);
    mi.Caption := Table1.Fields[0].FieldName;
    mi.OnClick := pmiFieldClick;
    
    PopupMenu1.Items.Add(mi);
  end;
end;    // 
procedure TForm1.PopupMenu1FieldClick(Sender: TObject);
var
  mi: TMenuItem;
  sFieldName: string;
  myField: TField;
begin
  mi := TMenuItem(Sender);
  mi.Checked := not mi.Checked; // 決它是否顯示
  sFieldName := mi.Caption; // 欄位的 FieldName 值      myField := Table1.FindField(sFieldName); // 找出 MenuItem 所代表的欄位
  myField.Visible := mi.Checked; // 設定該欄位是否顯示
end;
-- 歡迎光臨 KTop 研究院!
系統時間:2024-06-29 23:36:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!