type
TInitForm = procedure ; stdcall ; //注意这里的stdcall和上面定义的是一致的
//如果不一致就会出错.
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
InitForm : TInitForm ;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);//按下Button1后载入动态库
//并运行InitForm,显示PrvFormEh窗体.
var
DllHandle : integer ;
begin
DllHandle := LoadLibrary('project1.dll');
if DllHandle <> 0 then
begin
InitForm := GetProcAddress(DllHandle,'InitForm');
if Integer(@InitForm) <> 0 then InitForm ;
end
end;
OnCellClick := OnDbGridClick ;
inherited Create(AOwner) ;
end ;
procedure TMyDbGrid.OnDbGridClick(Column: TColumn);
begin
Column.PopupMenu := PopMenu ;
end;
procedure TMyDbGrid.OnMenuItemClick (Sender : TObject);
begin
case (Sender as TMenuItem).Tag of
1 : Form1.Label1.Caption := '1' ;
2 : Form1.Label1.Caption := '2' ;
end ;
unit slkDBGrid;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids,Menus;
type
TslkDBGrid = class(TDBGrid)
private
protected
procedure OnMenuItemClick(Sender: TObject);
procedure MouseDown(Button:TMouseButton;Shift:TShiftState;X,Y:integer);override;
public
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Data Controls', [TslkDBGrid]);
end;
procedure TslkDBGrid.OnMenuItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked:=not (Sender as TMenuItem).Checked;
Columns[(Sender as TMenuItem).Tag].Visible:=(Sender as TMenuItem).Checked;
end;
procedure TslkDBGrid.MouseDown(Button:TMouseButton;Shift:TShiftState;X,Y:integer);
var
popmenu:TPopupMenu;
popitems : TMenuItem ;
i:integer;
begin
if Button=mbRight then
begin
popmenu := TPopupMenu.Create(self);
if Columns.count>0 then
begin
for i:=0 to Columns.count-1 do
begin
popitems:=Tmenuitem.Create(self);
popitems.caption:=Columns[i].fieldname;
popitems.checked:=Columns[i].Visible;
popitems.tag:=i;
popitems.OnClick:=OnMenuItemClick;
popmenu.items.Add(popitems);
end;
PopupMenu := PopMenu;
end;
end;
inherited MouseDown(Button,Shift,X,Y);
end;
end.