【问题标题】:Adding a button to TOpenPictureDialog向 TOpenPictureDialog 添加一个按钮
【发布时间】:2011-04-24 06:54:41
【问题描述】:

我在 Windows XP 下使用 Delphi7。我将如何向 Delphi TOpenPictureDialog 组件添加“删除”工具按钮?有没有办法让对话框进入设计器以添加按钮及其行为?

【问题讨论】:

  • 查看 TOpenPictureDialog 的源代码,您就有了一个很好的示例,了解如何破解一个常见的对话框!
  • 顺便说一句,用户可以通过按删除键或从上下文菜单中删除选定的图像。

标签: delphi delphi-7


【解决方案1】:

您可以向TOpenPictureDialog 添加一个新按钮,但不能将对话框导入设计器,您必须在运行时进行。

检查此示例

procedure TForm1.FormCreate(Sender: TObject);
var
  FDeleteButton   : TSpeedButton;
  FPreviewButton  : TSpeedButton;
begin
    FPreviewButton := TSpeedButton(OpenPictureDialog1.FindComponent('PreviewButton'));
    FDeleteButton  := TSpeedButton.Create(OpenPictureDialog1);
    FDeleteButton.SetBounds(107, 1, 23, 22);
    FDeleteButton.Parent    := FPreviewButton.Parent;
    FDeleteButton.NumGlyphs:=2;        
    FDeleteButton.Glyph.LoadFromResourceName(HInstance, 'BBABORT');
    FDeleteButton.Name    := 'DeleteButton';
    FDeleteButton.OnClick := DeleteBtnClick;
end;

procedure TForm1.DeleteBtnClick(Sender: TObject);
begin
   //here you must implement the delete logic 
   ShowMessage('Hello from delete button');
end;

结果是

【讨论】:

  • +1。我不认为我可以尝试这个,因为在 Windows Vista/7 和 Delphi 2009 上,TOpenPictureDialog 一个标准的 Windows 对话框。
  • 我认为您可以说服 TOpenPictureDialog 恢复为旧版对话框,但需要一点努力。
【解决方案2】:

您可以编写“自己的”OpenDialog 并从 TOpenPictureDialog 继承这个新类。有一个名为“PBOpenPreviewDialog”的(旧)免费软件组件正是这样做的(来自 TOpenDialog),也许您可​​以以该组件为例?

您可以在以下位置找到该网页:http://bak-o-soft.dk/Delphi/PBFolderDialog.aspx
以及这里组件的下载链接:http://bak-o-soft.dk/Download.asgx.ashx/Delphi/PBFolderDialog.zip

【讨论】:

  • +1 只是为了补偿反对票(即使我不确定第 3 方控制)。就个人而言,我相当“受够了”(如果你原谅我的法语)在 SO 上的所有匿名投票。在被否决之前你不能张开嘴......
  • @Andreas 另一方面,这并不能回答问题。投票也无济于事。
  • 好吧,我想两者都可能是对的。下次我会尝试给出更完整的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多