動的にロードされる配列からボタンを動的に作成しています。ボタンのヒントに必要な情報を保存しています。Delphiの動的ボタンを使用するMouseDownイベント
procedure TForm3.CreateAppButton(sBtnCapt: string);
var
hIcon: THandle;
nIconId: DWORD;
Icon: TIcon;
NewButton: TSpeedButton;
PicConvert: TBitmap;
sPathNew: string;
AppData: TAppDetails;
begin
AppData := TAppDetails.Create(sBtnCapt);
NewButton := TSpeedButton.Create(self);
with NewButton do
begin
Width := 67;
Height := 50;
Left := (Width + 5) * (self.ControlCount - 1);
Top := 5;
Parent := self;
Caption := AppData.Caption;
Name := AppData.ButtonName;
Font.Size := 7;
// extract a 16x16 icon for display on the buttom
sPathNew := '';
sPathNew := sPath + AppData.Exe;
if PrivateExtractIcons(PChar(sPathNew), 0, 16, 16, @hIcon, @nIconId, 1, LR_LOADFROMFILE)
<> 0 then
try
PicConvert := TBitmap.Create;
Icon := TIcon.Create;
try
Icon.Handle := hIcon;
PicConvert.Width := Icon.Width;
PicConvert.Height := Icon.Height;
PicConvert.Canvas.Draw(0, 0, Icon);
Glyph := PicConvert;
finally
Icon.Free;
PicConvert.Free;
end;
finally
DestroyIcon(hIcon);
end;
OnMouseDown := btnMouseDown;
Hint := AppData.Exe;
ShowHint := False;
Layout := blGlyphTop;
AppData.Free;
end;
end;
私の問題は、マウスのダウンイベントで発生します。私は何とかボタンのヒントプロパティに格納された情報を使用して、必要なアクションをトリガーしたいと考えています。私は左クリックで何をしようとしているのか、私が右クリックでどこから来ているのかを見ることができます。右クリックの方法を設計するには〜80を入れる必要があります。フォームに各ボタンを宣言してビルドとコンパイルができるようにする必要もあります。
procedure TForm3.btnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
sApp: string;
AppData: TAppDetails;
begin
sApp := '';
if Button = mbLeft then
begin
sApp := btnFoo.Hint;
ShellExecute(self.Handle, 'open', PChar(sApp), nil, nil, SW_SHOWNORMAL);
end
else if Button = mbRight then
begin
if Sender = btnCC3 then
begin
sApp := 'CaseClaims3.exe';
end
else if Sender = btnODBC then
begin
sApp := 'ODBCMgr.exe';
end
else if Sender = btnCredMaint then
begin
sApp := 'CreditorMaint';
end;
AppData := TAppDetails.Create(sApp);
ShellExecute(self.Handle, 'open', PChar(AppData.Wiki), nil, nil, SW_SHOWNORMAL);
AppData.Free;
end;
end;
コンポーネントを事前に宣言しなくても、mousedownイベントを動的に使用する方向で私を指摘できますか? Appdataは、誰かが不思議に思うような場合に備えて、各アプリケーションに必要なすべての情報を含む別々のpasファイルです。
また、私のかなり恐ろしいコードを許してください、私はそれが多くの仕事を使用することができます知っている。
いつものように大きなアドバイス – JamesW