library
MenuDLL;
uses
System
.
Types,
System
.
IOUtils,
System
.
SysUtils,
System
.
Classes,
Vcl
.
Forms,
Vcl
.
Menus,
Vcl
.
Graphics,
Vcl
.
Clipbrd,
Winapi
.
Windows;
type
TForm4 =
class
(TForm)
PopupMenu1: TPopupMenu;
procedure
MenuDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected:
Boolean
);
procedure
MenuMeasureItem(Sender: TObject; ACanvas: TCanvas;
var
Width, Height:
Integer
);
procedure
TextFileClick(Sender: TObject);
private
procedure
BuildMenuStructure;
public
constructor
Create(AOwner: TComponent); override;
end
;
var
Form4: TForm4;
constructor
TForm4
.
Create(AOwner: TComponent);
begin
inherited
CreateNew(AOwner);
PopupMenu1 := TPopupMenu
.
Create(Self);
BuildMenuStructure;
end
;
procedure
TForm4
.
BuildMenuStructure;
var
DllPath:
string
;
DirList: TStringList;
Dirs: TStringDynArray;
i, j:
Integer
;
MainItem, SubItem: TMenuItem;
Files: TStringList;
begin
DllPath := ExtractFilePath(GetModuleName(
0
));
DirList := TStringList
.
Create;
try
Dirs := TDirectory
.
GetDirectories(DllPath,
'*'
, TSearchOption
.
soTopDirectoryOnly);
DirList
.
AddStrings(Dirs);
DirList
.
Sort;
for
i :=
0
to
DirList
.
Count -
1
do
begin
end
;
finally
DirList
.
Free;
end
;
end
;
procedure
TForm4
.
MenuDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected:
Boolean
);
begin
ACanvas
.
FillRect(ARect);
ACanvas
.
Font
.
Size :=
12
;
ACanvas
.
Font
.
Name :=
'微软雅黑'
;
ACanvas
.
TextOut(ARect
.
Left, ARect
.
Top, (Sender
as
TMenuItem).Caption);
end
;
procedure
TForm4
.
MenuMeasureItem(Sender: TObject; ACanvas: TCanvas;
var
Width, Height:
Integer
);
begin
Height :=
40
;
Width :=
750
;
end
;
procedure
TForm4
.
TextFileClick(Sender: TObject);
var
FilePath:
PChar
;
Content:
string
;
begin
FilePath :=
PChar
((Sender
as
TMenuItem).Tag);
if
FileExists(FilePath)
then
begin
Content := TFile
.
ReadAllText(FilePath);
Clipboard
.
AsText := Content;
end
;
end
;
procedure
ShowPopupMenu; stdcall;
var
P: TPoint;
begin
try
Application
.
Initialize;
Application
.
MainFormOnTaskbar :=
False
;
GetCursorPos(P);
Form4 := TForm4
.
Create(
nil
);
try
Form4
.
PopupMenu1
.
Popup(P
.
X, P
.
Y);
Application
.
Run;
finally
Form4
.
Free;
end
;
except
on
E: Exception
do
MessageBox(
0
,
PChar
(E
.
Message),
'DLL Error'
, MB_ICONERROR);
end
;
end
;
exports
ShowPopupMenu;
begin
end
.