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

Автор работы: Пользователь скрыл имя, 24 Мая 2013 в 16:39, реферат

Краткое описание

В этом разделе не описаны расположенные на этой странице компоненты TDDEClient, TDDEClientItem, TDDEServer И TDDEServerItem.
Они рассчитаны на поддержку устаревшей технологии межпрограммного обмена данными DDE - Dynamic Data Exchange (динамический обмен данными), которая в современных программах полностью вытеснена технологией OLE.

Вложенные файлы: 1 файл

КОМПОНЕНТЫ СТРАНИЦЫ SYSTEM.doc

— 1.01 Мб (Скачать файл)

Иногда требуется воспроизвести короткий звуковой сигнал для привлечения внимания пользователя программы - например, после завершения длительного , по времени процесса- обновления данных. Стандартная для Delphi процедура без параметров Веер извлекает сигнал из системного динамика только в том случае, если ПК не оснащен звуковой картой. С другой стороны, мощные возможности компонента TMediaPlayer кажутся излишними для решения этой задачи на ПК, оснащенных звуковой картой. В этом случае может пригодиться API-функция MessageBeep, с помощью которой Windows 32 озвучивает стандартниге диалоговые окна. Единственным параметром обращения к ней является один из следующих идентификаторов стандартного звука: mb_IconAsfcerisk, mb_IconExcla-mation, mb_IconHand, mb IconQuestion, mb Ok. Обращение с параметром $ffffffff игнорирует звуковую карту и извлекает “бип” из системного динамика. Сразу после обращения функция возвращает управление программе и воспроизводит звук асинхронно.

Значительно более богатыми возможностями в этом отношении имеет, API-функция PlaySound, которая способна воспроизводить любые звуковые клипы.

Заголовок функции:

function PlaySound(pszSound: PChar; hmod: HINST;

fdw.Sound: Cardinal): .Boolean;

3десь pszSound - имя воспроизводимого  файла; hmod - указывает Экземпляр программы, если звук берется из ресурсного файла ( в противном случае содержит 0); fdwSound - параметр, уточняющий воспроизведение. Его значениями могут быть: snd_async звук воспроизводится асинхронно (функция возвращает управление сразу после обращения к ней); end loop звук воспроизводится постоянно до тех пор, пока не будет .вызвана та же функция с параметром pszSound=0;

SND_NOSTOP функция пытается  воспроизвести звук, если устройство  не занято; в противном случае  не воспроизводит ничего; если  устройство занято, но этот параметр не указан, функция прервет воспроизведение старого звука и начнет воспроизведение нового;

SND_NOWAIT если устройство  занято, функция не будет воспроизводить  новый звук;

SND_PORGE. прекращает, воспроизведение  всех звуков для данной задачи;

SND SYNC воспроизводит звук  синхронно и возвращает управление  только после полного его воспроизведения.

18.4.4. TOleContainer - контейнер  объектов OLE

Компонент является удобным контейнером  для размещения связанного или внедренного OLE-объекта. Такие объекты (таблицы, картинки, фрагменты текста и т. п.) на форме Delphi-программы выглядят как обычно или заменяются пиктограммами. Замечательной особенностью OLE-объекта является то, что его активизация (обычно с помощью двойного щелчка мышью) приводит к активизации связанной с объектом программы, которая называется OLE-сервером и которая после загрузки показывает на экране свое окно и предоставляет пользователю средства редактирования объекта.

Типичными OLE-серверами являются такие  системные утилиты, как Paint и Notepad, текстовый процессор Word, табличный процессор Excel и др.

Чтобы наглядно продемонстрировать возможности  компонента, проделайте следующее.

  • Создайте новое приложение с пустой формой и вставьте в нее компонент TOleContainer. Установите в его свойство Align значение alСlient.
  • Сохраните проект вместе с формой в каком-либо каталоге и скопируйте средствами Windows в этот же каталог файл Athena, bmp, который находится В каталоге Images | Splash | 16color[См. замечание в начале главы.].
  • Напишите такой обработчик события OnCreate для формы Form1:

procedure TFormI.FormCreate(Sender: TObject);

begin

{Поскольку в следующем операторе  имя файла указано без маршрута  поиска, файл 'athena.bmp' должен находиться  в каталоге запуска программы!}

OleContainerI.CreateObjectFromFile('athena.bmp',False)

end; 

Запустите программу и дважды щелкните по изображению мышью. После паузы, вызванной загрузкой программы-сервера, вы увидите окно, показанное на рис. 18.37.

Рис. 18.37. Пример связывания OLE-обьекта с сервером Paint

Теперь вы можете использовать средства графического редактора Paint для редактирования изображения. Чтобы завершить редактирование, нажмите Esc - окно примет первоначальный вид, но изображение в нем сохранит все внесенные в него изменения.

Не правда ли, весьма впечатляющая демонстрация мощных возможностей компонента: ведь для полноценного доступа к  сложной технологии OLE понадобился  единственный вызов одного из его методов.

Компонент может создавать как  связанные, так и внедренные объекты  и открывать окно сервера как  в отдельном окне, так и в  окне содержащей его программы. В  последнем случае при запуске  сервера происходит автоматическая замена опций главного меню программы с групповыми индексами 1, 3 и 5 (если они есть) на опции главного меню сервера, а также вставка в окно программы инструментальных панелей сервера. Если компонент открывается в окне программы, его свойство Align (или такое же

свойство панели, на которую он помещен) должно иметь значение alClient.

Свойства компонента:

property AllowActiveDoc: Boolean;

Разрешает/запрещает компоненту использовать специализированный интерфейс для  документов loleDocumentSite

property AllowInPlace: Boolean; 

 

 

 

 

 

 

 

 

Определяет способ размещения OLE-

сервера. Если имеет значение True и  свойство Icon=False, окно сервера с редактируемым  объектом размещается в пределах размера компонента, в противном  случае создается отдельное окно для сервера

(независимо от значения icon)

TAutoActivate = (aaManual, aaGet-

Focus, aaDoubleClick) ; property AutoActivate: TAutoActivate;

Определяет способ активизации OLE-

объекта: aaManual - активизируется путем программного вызова метода doVerb(ovShow);aaGetFocus - активизирует ся при получении фокуса ввода; aaDouble Click - активизируется при двойном щелчке мышью

property AutoVerbMenu: Boolean;

Если имеет значение True, для компонента автоматически создается вспомогательное  меню, содержащее доступные команды OLE-сервера

TBorderStyle = bsNone..bsSingle;

property BorderStyle: Tborder Style;

Определяет стиль рамки: bsNone - компонент  не имеет рамки; bsSingle - компонент  имеет рамку толщиной 1 пиксель

property CanPaste: Boolean; 

 

 

Содержит True, если буфер clipboard

содержит OLE-объект (или связь с ним), который(ую) можно вставить в компонент. Доступно только для чтения

property CopyOnSave: Boolean; 

 

 

 

 

Если содержит True, перед сохранением  объекта в файле или потоке он предварительно сжимается для  экономии размеров файла (потока). Если в компоненте размещен очень большой объект и динамической памяти может не хватить для создания временной копии сжатого объекта, в свойство следует поместить значение False

property Iconic: Boolean; 

 

 

 

 

 

 

Содержит True, если объект будет заменяться пиктограммой OLE-сервера, и False если объект изображается так, как он будет виден в окне сервера

property Linked: Boolean; 

 

 

 

 

 

 

Содержит True, если объект связан с  программой, и False - если является ее частью (внедрен в нее). Доступно только для чтения

property Modified: Boolean- 

 

 

Содержит True, если объект был изменен (в том числе заменен другим или уничтожен)

Property Newlnserted: Boolean;

Содержит True, если объект был заново создан с помощью метода insertOb jectDialog. В этом случае вызывайте DoVerb (ovShow), чтобы показать объект в окне сервера. Доступно только для чтения

property ObjectVerbs: TStrings;

Содержит список команд, которые  программа может посылать серверу. Доступно только для чтения

property OldStreamFormat: Boolean; 

 

 

В это свойство следует поместить True перед чтением объекта из файла  или потока, если объект был создан версией Delphi 1

property OleClassName: String; 

Содержит имя класса, под которым  был зарегистрирован OLE-сервер в  реестре Windows. Доступно только для чтения

property OleObject: Variant;

Содержит ссылку на OLE-объект

property OleObjectInterface:

IQleObject;

Предоставляет доступ к OLE-объекту  через интерфейс сloleObject

property PrimaryVerb: Integer; TSizeMode = (smClip, smCenter,

smScale, smStretch, smAutoSize) ;

property SizeMode: TSizeMode;

Содержит индекс умалчиваемой команды  для OLE-объектаОпределяет способ размещения OLEобъекта в контейнере: smClip - отсекаются любые части объекта, выходящие  за границы контейнера; smCenter - центрируется в контейнере; smScale - масштабируется так, чтобы целиком заполнить границы контейнера; smStretch - масштабируется так, чтобы не нарушились пропорции объекта; smAutoSize - изменяются границы контейнера, чтобы полностью отобразить объект без искажений

property SourceDoc: String;

Содержит имя файла для связанного объекта

type TObjectState = (osEmpty,

osLoaded, osRunning, osOpen, os-

InPlaceActive, osUIActive);

property State: TObjectState; 

 

 

 

 

 

 

 

 

 

 

Определяет состояние OLE-объекта: osEmpty - контейнер не содержит объект; osLoaded - объект загружен, но его сервер не запущен; osRuftning - запущен OLE-сервер; osOpen - объект открыт в отдельном окне; osinPlaceActive - объект открыт в окне контейнера, но сервер еще не заменил опции меню и инструментальные панели программы на свои (промежуточное состояние перед osOIActive); osUIActive -объект открыт в окне контейнера

property Storagelnterface: IStorage;  

Открывает доступ к интерфейсу низкого  уровня istorage, использующемуся для  обращения к API OLE

Методы компонента:

function ChangeIconDialog: Boolean; 

 

 

Создает и показывает диалоговое окно

смены пиктограммы, заменяющей изображение  объекта. Возвращает True, если пользователь закрыл окно кнопкой ОК

procedure Close; 

Закрывает сервер. Все сделанные  к этому моменту изменения в объекте автоматически сохраняются

procedure Copy;rocedure CreateLinkToFile(const FileName: String; Iconic: Boolean) ;

Создает связанный объект по имени  файла-FileName. Параметр Iconic содержит True, если изображение объекта заменяется пиктограммой

procedure CreateObject(const OleClassName: String; Iconic: Boolean) ;

Создает внедренный объект по имени  класса сервера oleClassName. Параметр iconic содержит True, если изображение объекта заменяется пиктограммой

procedure CreateObjectFromFile(const FileName: String;Iconic: Boolean) ;  

Создает внедренный объект по имени  файла FileName. Параметр iconic содержит True, если изображение объекта заменяется пиктограммой

procedure CreateObjectFromInfo

(const Createlnfo: TCreateInfo);

Создает объект по информации, хранящейся в Createlnfo (см.ниже)

procedure DestroyObject; 

Уничтожает объект без сохранения сделанных в нем изменений

procedure DoVerb(Verb: Integer);

Требует от объекта выполнить действие с индексом verb из списка objectVerbs

function GetIconMetaPict:

HGlobal;

Возвращает указатель на распределенный в куче метафайл для прорисовки пиктограммы  объекта на другой канве

function InsertObjectDialog: Boolean;  

Создает и показывает диалоговое окно создания объекта. Возвращает True, если пользователь закрыл окно кнопкой OK

procedure LoadFromFile (constFileName: String);  

Загружает объект из файла FileName. Если OldStreamFormat содержит True, загружает объект, созданный с помощью Delphi 1

procedure LoadFromStream(Stream:TStream) ;

Загружает объект из потока Stream. Если OldStreamFormat содержит True, загружает объект, созданный с помощью Delphi 1

function ObjectPropertiesDialog:Boolean;  

Создает и показывает диалоговое окно изменения свойств объекта. Возвращает True, если пользователь закрыл окно кнопкой OK

procedure Paste;  

Создает объект по данным, хранящимся в буфере Сlipboard

function PasteSpecialDialog: Boolean; 

 

 

Создает и показывает диалоговое окно специальной вставки объекта. Возвращает True, если пользователь закрыл окно кнопкой  ОК

procedure Run;  

Запускает сервер, но не активизирует объект. Активизация объекта при  запущенном сервере происходит значительно  быстрее

procedure SaveAsDocument(const

FileName: Strings-

Сохраняет объект в файле FileName с  ис

пользованием формата OLE Document

procedure SaveToFile(const FileName: String) ;  

 

 

 

 

Сохраняет объект в файле FileName. Если OldStreamFormat содержит True, объект может  быть загружен программой, созданной  с помощью Delphi 1

procedure SaveToStream(Stream:TStream);

Сохраняет объект в потоке Stream. Если OldStreamFormat содержит True, объект может быть загружен программой, созданной с помощью Delphi 1

procedure UpdateObject;

Обновляет объект, вновь загружая его из источника

procedure UpdateVerbs;

Обновляет список Objectverbs (некоторые команды могут его изменить, например, команда Play может заменить Play на Stop)


Метод СreateObjectFrominfo использует запись типа

type

TCreateInfo = record

CreateType: TCreateType;

ShowAsIcon: Boolean;

IconMetaPict: HGlobal;

ClassID: TCLSID;

FileName: String;

DataObject: IDataObject;

end;

type TCreateType = (ctNewObject, ctFromFile, ctLinkToFile, ctFromData, ctLinkFromData) ;

поля которой имеют следующие  назначения:

CreateType

Тип объекта и его источник: ctNewObject - внедренный объект, заданный идентификатором класса ClassID; ctFromFile - внедренный из файла FileName; ctLinkToFile - связанный С файлом FileName; ctFromData - внедренный по данным DataObject; CtLinkFromData -связанный сданными DataObject

ShowAsIcon

Если True, объект изображается пиктограммой

IconMetaPict

Дескриптор глобальной памяти, в  которой распределен метафайл для  пиктограммы. Если содержит 0 и showAslcon= True, используется стандартная пиктограмма  Идентификатор класса сервера

ClassID

FileName

Имя файла

DataObject

Данные для объекта


 

 

Для компонента определены такие события:

property OnActivate: TNoti-fyEvent;

Возникает сразу после активизации  объекта

property OnDeactivate: TNotifyEvent;

Возникает сразу после перехода объекта в неактивное состояние 

type TObjectMoveEvent = procedure( OleContainer: TOleCon-tainer; const Bounds: TRect) of object;

Возникает при перемещении или  изменении размеров объекта. Параметр Bounds содержит границы объекта в  координатах клиентской части контейнера

property On.ObjectMoye: TObjectMoveEvent; property OnResize: TNotifyEvent;

Возникает при изменении размеров окна контейнера


 

 

18.5. КОМПОНЕНТЫ  СТРАНИЦЫ DIALOGS

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

Работа со стандартными диалоговыми  окнами осуществляется в три этапа.

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

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

Открыть файл может вызвать метод Execute Диалога TOpenDialog, обработчик нажатия инструментальной кнопки сохранить может вызвать такой же метод у компонента TSaveDialog и т. д. Только после обращения к Execute на экране появляется соответствующее диалоговое окно. Окно диалога является модальным окном, поэтому сразу после обращения к Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute - логическая функция, она возвращает в программу True, если результат диалога с пользователем был успешным.

Проанализировав результат Execute, программа  может выполнить третий этап - использование  введенных с помощью диалогового  окна данных - имени файла, настроек принтера, выбранного шрифта и т. д.

Проиллюстрируем сказанное следующим  примером. Создадим простую программу для просмотра содержимого текстового файла. Для этого на пустую форму поместите компонент TOpenDialog, a также кнопку TButton и редактор TMето. При работе программы щелчок по кнопке будет сигналом о необходимости загрузить в редактор новый файл. Создайте такой обработчик события OnClick этой кнопки:

procedure TForml.ButtonlClick(Sender: TObject);

var

S: String;

F: TextFile;

begin

// Настраиваем диалог на отбор текстовых файлов:

OpenDialogI.Filter :== 'Текстовые  файлы|*.txt|'+ 'Файлы Паскаля|*.pas';

// Выполняем диалог и анализируем его результат if OpenDialogI.Execute and FileExists(OpenDialogI.FileName) then

begin

// Результат успешный - пользователь выбрал файл

// Открываем файл

AssignFile(F, OpenDialogI.FileName) ;

Reset(F);

Memol.Lines.Clear; // Очищаем редактор

while not EOF(F) do // и наполняем его

begin

ReadLn(F, S) ;

Memol.Lines.Add(S)

end;

CloseFile(F)

end

end;

18.5.1. TOpenDialog и TSaveDialog - диалоги  открытия и сохранения файлов

Эти компоненты имеют идентичные свойства и поэтому рассматриваются вместе. Пример окна TOpenDialog показан на рис. 18.38.

Свойство FileName: string содержит маршрут  поиска и выбранный файл при успешном завершении диалога. Программа может  использовать это свойство для доступа  к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog). Замечу, что пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists, как это сделано в предыдущем примере, или использовать механизм обработки исключительных ситуаций.

Рис. 18.38. Стандартное окно TOpenDialog

Свойство Filter: string используется для  фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью  специального редактора на этапе  конструирования формы или программно, как это сделано в предыдущем примере. Для доступа к редактору достаточно щелкнуть по кнопке в строке Filter окна Инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы “|” служат для разделения фильтров друг от друга, а также для разделения описания фильтруемых файлов от соответствующей маски выбора. Например, оператор

OpenDialogI.Filter := 'Текстовые  файлы|*.txt| Файлы Паскаля|*.раs';

задает две маски - для отбора файлов с расширениями раs и TXT.

Установить начальный каталог  позволяет свойство InitialDir string. Например:

OpenDialogI.InitiaiDir := 'c:\program files\borland\delphi5\source';

С помощью свойства DefaultExt: String [ 3 ] формируется  полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства.

В диалоговом окне для ручного ввода  предусмотрен элемент TEdit, который при  желании можно заменить на TCоmbовох. Для этого необходимо свойству FileEditStyle придать значение fsComboBox вместо умалчиваемого fsEdit. Если выбран комбинированный список, с ним можно связать протокол выбора имен. Для этого используется свойство HistoryList: TStrings, содержимое которого будет появляться в выпадающем списке. Этот список не пополняется автоматически, поэтому за его содержимым должна следить программа. Например:

if OpenDialogI.Execute then

begin

HistoryList.Add(OpenDialogI.FileName);

end;

Настройка диалога может варьироваться  с помощью свойства

TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCre-atePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCre-ate, ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog, of-NoDereferenceLinks) ;

TOpenOptions = set of TOpenOption;

property Options: TOpenOptions;

Значения этого свойства имеют  следующий смысл:

ofReadOnly

Устанавливает переключатель Только для чтения

ofOverwritePrompt

Требует согласия пользователя при  записи в существующий файл

ofHideReadOnly

Прячет переключатель Только для чтения

OfNoChangeDir

Запрещает смену каталога

ofShowHelp

Включает в окно кнопку Help

ofNoValidate

Запрещает автоматическую проверку правильности набираемых в имени файла символов

OfAllowMultiSelect

Разрешает множественный выбор  файлов

ofExtensionDifferent  

При завершении диалога наличие  этого значения в свойстве options говорит  о том, что пользователь ввел расширение, отличающееся от умалчиваемого

ofPathMustExist  

Разрешает указывать файлы только из существующих каталогов

ofFileMustExist

Разрешает указывать только существующие файлы

ofCreatePrompt

Требует подтверждения для создания несуществующего файла

ofShareAware

Разрешает выбирать файлы, используемые другими параллельно выполняемыми программами

OfNoReadOnlyReturn

Запрещает выбор файлов, имеющих  атрибут Только для чтения

ofNoTestFileCreate  

Запрещает проверку доступности сетевого или локального диска

OfNoNetworkButton

Запрещает вставку кнопки для создания сетевого диска

ofNoLongNames

Запрещает использование длинных  имен файлов

ofOldStyleDialog

Создает диалог в стиле Windows 3-х

Информация о работе Кампоненты страницы SYSTEM