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

Диалог для выбора компьютера

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

Диалог для выбора компьютера

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

uses
   ShlObj, ActiveX;

 function BrowseComputer(DialogTitle: string; var CompName: string;
   bNewStyle: Boolean): Boolean;
   // bNewStyle: If True, this code will try to use the "new" 
  // BrowseForFolders UI on Windows 2000/XP 
const
   BIF_USENEWUI = 28;
 var
   BrowseInfo: TBrowseInfo;
   ItemIDList: PItemIDList;
   ComputerName: array[0..MAX_PATH] of Char;
   Title: string;
   WindowList: Pointer;
   ShellMalloc: IMalloc;
 begin
   if Failed(SHGetSpecialFolderLocation(Application.Handle, CSIDL_NETWORK, ItemIDList)) then
     raise Exception.Create('Unable open browse computer dialog');
   try
     FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
     BrowseInfo.hwndOwner := Application.Handle;
     BrowseInfo.pidlRoot := ItemIDList;
     BrowseInfo.pszDisplayName := ComputerName;
     Title := DialogTitle;
     BrowseInfo.lpszTitle := PChar(Pointer(Title));
     if bNewStyle then
       BrowseInfo.ulFlags := BIF_BROWSEFORCOMPUTER or BIF_USENEWUI
     else
       BrowseInfo.ulFlags := BIF_BROWSEFORCOMPUTER;
     WindowList := DisableTaskWindows(0);
     try
       Result := SHBrowseForFolder(BrowseInfo) <> nil;
     finally
       EnableTaskWindows(WindowList);
     end;
     if Result then CompName := ComputerName;
   finally
     if Succeeded(SHGetMalloc(ShellMalloc)) then
       ShellMalloc.Free(ItemIDList);
   end;
 end;

 // Example 

procedure TForm1.Button1Click(Sender: TObject);
 var
   Computer: string;
 begin
   BrowseComputer('...', Computer, True);
   label1.Caption := Computer;
 end;

Программный код на Delphi, который реализует функцию BrowseComputer, позволяющую пользователю просматривать компьютеры в их сети и получать имя выбранного компьютера. Функция использует API Windows Shell для отображения диалогового окна, которое позволяет пользователю выбрать компьютер.

Функция принимает три параметра:

  • DialogTitle: Заголовок диалогового окна
  • CompName: Переменная, которая будет получать имя выбранного компьютера
  • bNewStyle: Логическое флаго, определяющее использование "новой" интерфейсы просмотра папок на Windows 2000/XP

Вот шаг за шагом, как функция работает:

  1. Она использует функцию SHGetSpecialFolderLocation для получения списка идентификаторов элемента для папки сети.
  2. Она создает структуру TBrowseInfo и инициализирует ее поля необходимыми данными (hwndOwner, pidlRoot, pszDisplayName и т.д.).
  3. Если параметр bNewStyle имеет значение true, она устанавливает поле ulFlags структуры BrowseInfo включать флаг BIF_USENEWUI.
  4. Она отключает окна задач с помощью функции DisableTaskWindows и затем вызывает функцию SHBrowseForFolder с параметром BrowseInfo.
  5. Если пользователь выбирает компьютер, она получает имя выбранного компьютера из массива ComputerName и присваивает его переменной CompName.
  6. Наконец, она освобождает список идентификаторов элемента с помощью функции SHGetMalloc.

Пример кода в конце демонстрирует, как использовать эту функцию в форме Delphi. Когда кнопка нажата, она вызывает функцию BrowseComputer с заголовком "..." и присваивает тексту лейбла контроля имя выбранного компьютера.

Некоторые предложения по улучшению:

  • Обработка ошибок: Функция не обрабатывает ошибки очень хорошо. Например, если пользователь отменит диалоговое окно, она будет вызывать исключение. Лучше было бы проверять возвращаемое значение функции SHBrowseForFolder и присваивать переменной CompName пустую строку, если пользователь отменил.
  • Организация кода: Функция quite long и выполняет несколько не связанных задач (например, отключение окон задач, освобождение списка идентификаторов элемента). Могло бы быть хорошим идеей разбить ее на более маленькие функции, каждая из которых обрабатывает конкретную задачу.
  • Совместимость: Код использует флаг BIF_USENEWUI, который доступен только на Windows 2000/XP. Если вы хотите поддерживать более старые версии Windows, вам нужно будет использовать альтернативный подход.

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

Данный код на языке Delphi предлагает диалог для выбора компьютера в Windows, с возможностью использовать новый интерфейс или старый.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 05:12:57/0.0034561157226562/0