Добавление кнопки в TOpenPictureDialog

#delphi #delphi-7

#delphi #delphi-7

Вопрос:

Я использую Delphi7 под Windows XP. Как бы мне добавить всплывающую кнопку «Удалить» в компонент Delphi TOpenPictureDialog? Есть ли какой-либо способ запустить диалоговое окно в конструктор, чтобы добавить кнопку и ее поведение?

Комментарии:

1. Взгляните на исходный код TOpenPictureDialog, и у вас есть довольно хороший пример того, как взломать обычный диалог!

2. Кроме того, пользователь может удалить выбранные изображения нажатием клавиши delete или из контекстного меню.

Ответ №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. 1. Я не думаю, что я вообще мог бы попробовать это, потому что в Windows Vista / 7 и Delphi 2009 TOpenPictureDialog это стандартное диалоговое окно Windows.

2. Я думаю, что вы можете убедить 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. 1 просто для компенсации снижения (хотя я не уверен насчет стороннего элемента управления). Лично я довольно «сыт по горло» (если вы простите мой французский) всеми анонимными голосованиями против SO. Вы не успеете и рта раскрыть, как получите отрицательный результат…

2. @Andreas с другой стороны, это не отвечает на вопрос. Голосование за это тоже не очень помогает.

3. Хорошо, я думаю, что оба варианта могут быть правильными. В следующий раз я постараюсь дать более полный ответ. Спасибо.