Страницы

четверг, 25 декабря 2008 г.

Описание диалогов в JVCL. JvDialogs. Часть 1. Системные диалоги.

Бесплатная библиотека компонентов JVCL содержит огромное количество как полезных вещей так и разного хлама. Некоторую часть этих компонентов я опишу у себя в блоге, чтобы дать представление о том, что можно там найти. Да в JVCL не всё гладко, не всё работает как хотелось бы, кое-что глючит, кое-что вообще не работает, но тем не менее, это библиотека с открытым кодом, и найденную ошибку всегда можно отследить в исходниках и исправить, либо просто взять нужный код и написать свой вариант. Чужие исходники это просто кладезь информации для программиста.

Системные диалоги Windows

  • TJvAppletDialog – запускает любой applet из Control Panel. Если необходимо открыть из программы окошко Свойства дисплея, или Настройка Bluetooth, то это можно легко сделать с помощью этого компонента.
  • TJvConnectNetwork и TJvDisconnectNetwork – диалоги для подключения и отключения сетевых дисков. Фактически, это просто компоненты-обёртки вокруг API функций WNetConnectionDialog и WNetDisconnectDialog.
    Диалог подключения сетевого диска Диалог отключения сетевого диска
  • TJvAddPrinterDialog – диалог подключения печатающего устройства(Add Printer)
  • TJvFindFilesDialog – системный диалог для поиска файлов(тот самый, который появляется при нажатии Win+F). Можно указать начальную папку для поиска, в том числе и системную(My Computer, Control Panel, Documents и т.п.). В том же модуле определена функция делающая то же самое - FindFilesDlg.
  • TJvFormatDriveDialog – диалог форматирования диска/дискеты(обёртка вокруг функции SHFormatDrive). Можно указать букву диска, тип форматирования(quick/system).
  • TJvOrganizeFavoritesDialog – диалог позволяющие реорганизовать Закладки(Favorites) Internet Explorer-a.
  • TJvComputerNameDialog – диалог Browse For Computer. Ооочень долго открывается. Фактически является обёрткой над SHBrowseForFolder.
    TJvChangeIconDialog – системный диалог выбора иконки(из exe, dll-файлов). Возвращает Filename и IconIndex.
  • TJvShellAboutDialog – системный диалог About Windows. Аналогичный тому, что появляется при запуске Winver.exe. Позволяет добавить свой текст и свою иконку. Фактически, обёртка вокруг Api функции ShellAbout.
  • TJvRunDialog – системный  диалог Run(Win+R). Позволяет указать свои заголовок, описание и иконку. Обёртка вокруг Api функции SHRunDialog.Свой диалог Run As.. в Delphi
  • TJvObjectPropertiesDialog – диалог “Свойства” файла или принтера. Позволяет указать имя файла и название закладки(таба). Обёртка вокруг SHObjectProperties.
  • TJvNewLinkDialog – диалог создания ShortCut-a.
    TJvOpenWithDialog – диалог “Open With”. Обёртка вокруг функции SHOpenWith.
  • TJvObjectPickerDialog – диалог “Select Users, Computers, or Groups”. Позволяет выбирать пользователей, группы с разных компьютеров. Довольно навороченный в настройке. Я с ним не разобрался.Диалог "Выбрать пользователя" в Delphi, JVCL 
  • TJvDiskPrompt – диалог “Вставьте диск”image  

TJvCopyError, TJvDeleteError, TJvRenameError – диалоги с сообщениями об ошибке копирования, удаления и переименования. Обёртки вокруг функций SetupCopyError, SetupDeleteError и SetupRenameError.

Проблемные диалоги

Диалоги с которыми у меня возникли проблемы. Причины проблем в совокупности этих параметров: Windows Vista 32 bit, Delphi 2009, JVCL 3.36 =) Описанные фичи и баги актуальны для JVCL 3.36, точнее для исходников в репозитории на 24-12-2008.

  • TJvAddHardwareDialog – глючит
  • TJvDiskFullDialog – диалог Disk Full. Обёртка вокруг SHHandleDiskFull. Не сработал.
  • TJvExitWindowsDialog - обёртка вокруг SHHandleDiskFull. Вызвал крушение программы/IDE.
  • TJvOutOfMemoryDialog - Не сработал

Некоторые любопытные функции из JvWinDialogs.pas

 

Подробно описывать не буду, то что они делают понятно из названия.

procedure AddToRecentDocs(const FileName: string);

procedure ClearRecentDocs;

function CreateShellLink(const AppName, Desc: string; Dest: string): string;

procedure GetShellLinkInfo(const LinkFile: WideString; var SLI: TShellLinkInfo);

procedure SetShellLinkInfo(const LinkFile: WideString; const SLI: TShellLinkInfo);

TShellLinkInfo содержит следующую информацию о link-файлах:

Путь(PathName), параметры командной строки(Arguments), описаниа(Description), Рабочий каталог(WorkingDirectory), местонахождение иконки(IconLocation), горячая клавиша(HotKey).

  • Ссылки по теме

    p.s. а в JCL есть функция вызывающая принудительное выключение компьютера через заданный промежуток времени. Пока я смотрел как работают диалоги, я её запустил пару раз, и Windows только что предупредил меня, что через 10 компьютер будет выключен.

    p.p.s. и он-таки выключился. Подобного возмутительного поведения себе даже windows updater не позволял. Снова спасибо Windows Live Writer-у за сохранённый пост. :-)

    p.p.s. За время написания обзоров JVCL я успел освоится с их bug-tracker-ом, и зарегистрировать там несколько ошибок. =)

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

Отправить комментарий