DBGrid/PopupMenu問題 |
尚未結案
|
chuyuan
一般會員 發表:12 回覆:9 積分:4 註冊:2004-05-12 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
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 發送簡訊給我 |
將 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 研究院! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |