Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


пятница, 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

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

Постоянные читатели