Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Манипулирование с кнопками на панели инструментов TOpenDialog

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Манипулирование с кнопками на панели инструментов TOpenDialog

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   CommCtrl;

 // Beispiel: Blendet den Button zum Erzeugen eines neuen Verzeichnisses aus. 
// Example: Hide the "Create New Folder" Button. 

procedure TForm1.OpenPictureDialog1Show(Sender: TObject);
 const
   TB_BTN_NEWFOLDER  = 40962;
 var
    hWndToolbar, wnd: HWND;
    tbInfo: TTBButtonInfoA;
 begin
     tbInfo.cbSize := SizeOf(TTBButtonInfo);
     tbInfo.dwMask := TBIF_STATE;
     tbinfo.fsState := TBSTATE_HIDDEN or TBSTATE_INDETERMINATE;

     hWndToolbar := FindWindowEx(GetParent((Sender as TOpenPictureDialog).Handle), 0,
       'ToolbarWindow32', nil);
     SendMessage(hWndToolbar, TB_SETBUTTONINFO, TB_BTN_NEWFOLDER  ,LParam(@tbinfo));
 end;

Переведенный текст:

Код-сниппет - это процедура, которая манипулирует кнопками на панели инструментов компонента TOpenPictureDialog в Delphi. В частности, она скрывает кнопку "Создать новый папку".

Расшифровка кода:

  1. Процедура OpenPictureDialog1Show вызывается при отображении компонента TOpenPictureDialog.
  2. Константа TB_BTN_NEWFOLDER (40962) представляет собой ID кнопки "Создать новый папку" на панели инструментов.
  3. Переменные hWndToolbar и wnd объявлены для хранения handle окна панели инструментов и указателя на объект, соответственно.
  4. Создается экземпляр TTBButtonInfoA, чтобы хранить информацию о кнопке.
  5. Свойство cbSize объекта tbInfo устанавливается в размер рекорда TTBButtonInfo.
  6. Свойство dwMask объекта tbInfo устанавливается, чтобы изменять только состояние кнопки.
  7. Свойство fsState объекта tbInfo устанавливается для скрытия кнопки, комбинируя два значения:
  8. TBSTATE_HIDDEN: Скрывает кнопку completely.
  9. TBSTATE_INDETERMINATE: Устанавливает состояние кнопки как неопределенное, что означает, что кнопка не отключена или не включена, но все еще видна.
  10. Handle окна панели инструментов получается с помощью функции FindWindowEx, передавая handle родительского окна компонента TOpenPictureDialog, 0 (без дочернего окна) и 'ToolbarWindow32' (имя класса панели инструментов) как аргументы.
  11. Функция SendMessage используется для отправки сообщения панели инструментов с ID TB_SETBUTTONINFO. Это сообщение изменяет состояние кнопки, указанной константой TB_BTN_NEWFOLDER.

Альтернативное решение:

Если вы хотите скрыть несколько кнопок одновременно, можно создать массив рекордов TTBButtonInfoA и проходить по нему для изменения состояния каждой кнопки. Вот пример:

procedure TForm1.OpenPictureDialog1Show(Sender: TObject);
const
  TB_BTN_NEWFOLDER = 40962;
  TB_BTN_OTHERBUTTON = 40963;
var
  hWndToolbar, wnd: HWND;
  tbInfo: array[0..1] of TTBButtonInfoA;
begin
   // Установка информации о кнопке для каждой кнопки
  tbInfo[0].cbSize := SizeOf(TTBButtonInfo);
  tbInfo[0].dwMask := TBIF_STATE;
  tbInfo[0].fsState := TBSTATE_HIDDEN or TBSTATE_INDETERMINATE;

  tbInfo[1].cbSize := SizeOf(TTBButtonInfo);
  tbInfo[1].dwMask := TBIF_STATE;
  tbInfo[1].fsState := TBSTATE_ENABLED; // Или любое другое состояние, которое вы хотите

   // Просмотр массива и отправка сообщения для каждой кнопки
  for i := Low(tbInfo) to High(tbInfo) do
    begin
      hWndToolbar := FindWindowEx(GetParent((Sender as TOpenPictureDialog).Handle), 0,
         'ToolbarWindow32', nil);
      SendMessage(hWndToolbar, TB_SETBUTTONINFO, tbInfo[i].iButton, lParam(@tbInfo[i]));
    end;
end;

Обратите внимание, что свойство iButton объекта TTBButtonInfoA должно быть установлено в ID каждой кнопки в вашем массиве.

Манипулирование с кнопками на панели инструментов TOpenDialog позволяет скрыть или изменить состояние кнопки "Create New Folder" в диалоге выбора файла с помощью процедуры OpenPictureDialog1Show.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диалоги и Фреймы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-02 20:35:37/0.0036349296569824/0