Страницы

пятница, 26 декабря 2008 г.

Невизуальные компоненты JVCL. Описание закладки JvSystem.

image

Визуальные контролы

JvClipboardViewer: TJvClipboardViewer

Единственный визуальный контрол на вкладке JvSystem. Является наследником TScrollBox. Отображает содержимое буфера обмена. Следит за буфером обмена и автоматически обновляется при изменении. Поддерживает показ следующих данных: Empty, Unknown, Text, Bitmap, Metafile, Palette, OemText, Picture, Component, Icon.

Невизуальные компоненты

JvClipboardMonitor: TJvClipboardMonitor

TJvClipboardMonitor следит за буфером обмена(Clipboard) генерирует событие OnChange каждый раз, когда содержимое изменяется. Имеет 2 свойства: Enable и OnChange.

Помимо компонента JvClipboardMonitor.pas содержит две функции по работе с буфером обмена. Одна сохраняет содержимое буфера обмена в поток(TStream), а другая помещает содержимое потока(TStream) в буфер обмена.

procedure SaveClipboardToStream(Format: Word; Stream: TStream);
function LoadClipboardFromStream(Stream: TStream): Word;

JvAppCommand: TJvAppCommand

Компонент вешает хук на оконную процедуру формы и перехватывает сообщения WM_APPCOMMAND. Для каждого сообщения вызывается событие OnAppCommand.

JvHidDeviceController: TJvHidDeviceController

Обеспечивает поддержку устройств с HID (Human Interface Device), таких как мышки, джойстики, клавиатуры и прочие. Имеет события: OnArrival, OnDeviceChange, OnDeviceData, OnDeviceDataError, OnDeviceUnplug, OnEnumerate, OnRemoval. Помимо компонента, модуль содержит классы TJvHidDevice, TJvHidDeviceReadThread, TJvHidPnpInfo.

TJvDropTarget  и TJvDragDrop

Компоненты позволяющие реализовать возможность принимать перетянутые мышкой данные(drag и drop). Компоненты подключаются к указанному контролу и генерируют следующие события: OnDragAccept, OnDragDrop, OnDragEnter, OnDragLeace, OnDragOver. Доступ к данным реализуется через IDataObject, для а списка файлов и текста через TStrings.

JvScreenSaveSuppressor: TJvScreenSaveSuppressor

Компонент подавляющий включение хранителя экрана(через хук на родительскую форму на сообщения SC_SCREENSAVE). Имеет событие OnScreenSave.

JvSysRequirements: TJvSysRequirements

Компонент позволяет проверить “минимальные системные требования” при старте программы. Такие как версия Windows(Win95-WInServer2008), разрешение экрана, количество цветов, и в зависимости от настроек показать предупреждение или остановить выполнение программы.

JvSHFileOperation: TJvSHFileOperation

Компонент представляет из себя обёртку вокруг API функции SHFileOperation. Позволяет копировать, удалять, перемещать и переименовывать файлы с использованием стандартного диалога Windows, и возможностью сделать Undo.

JvChangeNotify: TJvChangeNotify

Отслеживает изменения в указанных папках и подпапках. Отслеживает следующие события: изменение имени файла/папки/атрибутов/размера/даты записи/настроек безопасности. Слежение за папками ведётся в отдельном потоке.

JvAppInstances: TJvAppInstances

Надстройка над соответствующими классами JCL(TJclAppInstances), позволяющая организовать взаимодействие нескольких экземпляров одной и той же программы с помощью методов отправки данных и событий возникающих при получении.

JvNTEventLog: TJvNTEventLog

Позволяет читать NT Event Log. Подробнее см. демку. На Vista ругается, но какие-то данные всё-таки получает. Скриншот демки:Windows event log в Delphi

JvJoystick: TJvJoystick

Компонент, отлавливающий события джойстика. Из любопытства подключил свой геймпэд, компонент реагировал на нажатия кнопок и движение влево-вверх. Кнопки 5,6,7,8(сверху) он игнорировал, также как правую аналоговую ручку. Но я не ни капельки не калибровал джойстик и не настраивал параметры, так что возможно причина в этом. В любом случае, если понадобится когда-либо писать что-нибудь для джойстика, TjvJoystick подойдёт как пример.

JvComputerInfoEx: TJvComputerInfoEx

Компонент для получения огромного количества информации о системе(батарее, Biosе, цветах, процессоре, поддерживаемых инструкциях, клавиатуре, мышке, памяти, ОС, экране). Имеет события: OnDeviceAdded, OnDeviceChange, OnDisplayChange, OnFontChange, OnTimeChange, OnUserChange. Фактически является обёрткой над функциями из JclSysInfo. На первый взгляд выглядит впечатляюще. Интересно, как работает.

JvDebugHandler: TJvDebugHandler

Компонент собирающий информацию по происшедшим исключениям и сохраняющий их в журнал. Умеет сохранять журнал в файл. Компонент основан на механизмах перехвата исключений JCL. Компонент имеет published свойства: AppendToLogFile, LogToFile, StackTrackingEnabled, UnhandledExceptionsOnly и public свойство ExceptionStringList – содержащее журнал исключений.

По умолчанию сохраняет исключения в следующем виде:

2008.12.25. 15:43:54 Exception EDivByZero occured at address 0047DD9A
Message: Exception 2
Call stack:
(0007CD95) [0047DD95]
(00046C53) [00447C53]
(0004ABAF) [0044BBAF]
(00034354) [00435354]
(0004ACFF) [0044BCFF]
Но при включении в программу detailed map, журнал становится таким:
2008.12.25. 15:45:02 Exception Exception occured in Unit1.TForm1.Button1Click at 33 in file Unit1.pas
Message: Exception 1
Call stack:
[0047DD32] Unit1.TForm1.Button1Click (Line 33, "Unit1.pas")
[00447C53] Controls.TControl.Click (Line 6758, "Controls.pas")
[0044BBAF] Controls.TWinControl.WndProc (Line 9336, "Controls.pas")
[00435354] StdCtrls.TButtonControl.WndProc (Line 4269, "StdCtrls.pas")
[0044BCFF] Controls.DoControlMsg (Line 9405, "Controls.pas")
[0044BBAF] Controls.TWinControl.WndProc (Line 9336, "Controls.pas")
[0045E814] Forms.TCustomForm.WndProc (Line 3902, "Forms.pas")
[0044B2C8] Controls.TWinControl.MainWndProc (Line 9065, "Controls.pas")
[0042569C] Classes.StdWndProc (Line 12723, "Classes.pas")
[0044BCAB] Controls.TWinControl.DefaultHandler (Line 9377, "Controls.pas")
[0044BBAF] Controls.TWinControl.WndProc (Line 9336, "Controls.pas")
[00435354] StdCtrls.TButtonControl.WndProc (Line 4269, "StdCtrls.pas")
[0042569C] Classes.StdWndProc (Line 12723, "Classes.pas"

Для того, чтобы включить map файл в программу, при установленном JCL Debug Expert, нужно выполнить следующие манипуляции:
IDE menu->Project->JCL Debug Expert->Generate .jdbg files->Enabled
IDE menu->Project->JCL Debug Expert->Insert JDBG Data into binary->Enabled

Компоненты, с которыми я не разбирался

JvAppDdeCmd: TJvAppDdeCmd – понятия не имею зачем нужен этот компонент и что такое dde.
JvSoundControl: TJvSoundControl – позволяет устанавливать громкость и panning для CD, Midi и Wave устройств. По-видимому устарел.
TJvMailSlotServer, TJvMailSlotClient, TJvPerfStat95 – не представляю зачем они.
JvScreenSaver: TJvScreenSaver – по-моему, это бесполезный компонент.

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

1 комментарий:

  1. В журнале RSDN Magazine (2005 № 3) была статья о механизме перехварата исключений библиотеки JCL, который используется в компоненте TJvDebugHandler:
    http://www.rsdn.ru/article/Delphi/DelphiJCL.xml

    ОтветитьУдалить