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. В частности, она скрывает кнопку "Создать новый папку".
Расшифровка кода:
Процедура OpenPictureDialog1Show вызывается при отображении компонента TOpenPictureDialog.
Константа TB_BTN_NEWFOLDER (40962) представляет собой ID кнопки "Создать новый папку" на панели инструментов.
Переменные hWndToolbar и wnd объявлены для хранения handle окна панели инструментов и указателя на объект, соответственно.
Создается экземпляр TTBButtonInfoA, чтобы хранить информацию о кнопке.
Свойство cbSize объекта tbInfo устанавливается в размер рекорда TTBButtonInfo.
Свойство dwMask объекта tbInfo устанавливается, чтобы изменять только состояние кнопки.
Свойство fsState объекта tbInfo устанавливается для скрытия кнопки, комбинируя два значения:
TBSTATE_HIDDEN: Скрывает кнопку completely.
TBSTATE_INDETERMINATE: Устанавливает состояние кнопки как неопределенное, что означает, что кнопка не отключена или не включена, но все еще видна.
Handle окна панели инструментов получается с помощью функции FindWindowEx, передавая handle родительского окна компонента TOpenPictureDialog, 0 (без дочернего окна) и 'ToolbarWindow32' (имя класса панели инструментов) как аргументы.
Функция SendMessage используется для отправки сообщения панели инструментов с ID TB_SETBUTTONINFO. Это сообщение изменяет состояние кнопки, указанной константой TB_BTN_NEWFOLDER.
Альтернативное решение:
Если вы хотите скрыть несколько кнопок одновременно, можно создать массив рекордов TTBButtonInfoA и проходить по нему для изменения состояния каждой кнопки. Вот пример:
procedureTForm1.OpenPictureDialog1Show(Sender:TObject);constTB_BTN_NEWFOLDER=40962;TB_BTN_OTHERBUTTON=40963;varhWndToolbar,wnd:HWND;tbInfo:array[0..1]ofTTBButtonInfoA;begin// Установка информации о кнопке для каждой кнопкиtbInfo[0].cbSize:=SizeOf(TTBButtonInfo);tbInfo[0].dwMask:=TBIF_STATE;tbInfo[0].fsState:=TBSTATE_HIDDENorTBSTATE_INDETERMINATE;tbInfo[1].cbSize:=SizeOf(TTBButtonInfo);tbInfo[1].dwMask:=TBIF_STATE;tbInfo[1].fsState:=TBSTATE_ENABLED;// Или любое другое состояние, которое вы хотите// Просмотр массива и отправка сообщения для каждой кнопкиfori:=Low(tbInfo)toHigh(tbInfo)dobeginhWndToolbar:=FindWindowEx(GetParent((SenderasTOpenPictureDialog).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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.