русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

РАБОТА С ПРИЛОЖЕНИЯМИ WORD И EXCEL


Дата добавления: 2013-12-23; просмотров: 1180; Нарушение авторских прав


Unit Unit2;

Unit Unit1;

End.

End;

Begin

Procedure My.Execute;

Implementation

End;

Procedure Execute; override;

Protected

Procedure SetName;

Private

Type

Uses

Interface

Unit Unit3;

Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};

My = class(TThread)

 

{$IFDEF MSWINDOWS}

// что курсивом не обязательно

type

TThreadNameInfo = record

FType: LongWord; // must be 0x1000

FName: PChar; // pointer to name (in user address space)

FThreadID: LongWord; // thread ID (-1 indicates caller thread)

FFlags: LongWord; // reserved for future use, must be zero

end;

{$ENDIF}

{ My }

procedure My.SetName;

{$IFDEF MSWINDOWS}

var

ThreadNameInfo: TThreadNameInfo;

{$ENDIF}

begin

{$IFDEF MSWINDOWS}

ThreadNameInfo.FType := $1000;

ThreadNameInfo.FName := 'MyThread';

ThreadNameInfo.FThreadID := $FFFFFFFF;

ThreadNameInfo.FFlags := 0;

try

RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );

except

end;

{$ENDIF}

end;

 

SetName; // не обязательно

{Здесь размещается код потока}

 

Класс My наследует от TThreadряд методов. Прежде всего, это конструктор Creates, создающий объект потока:

constructor Create(CreateSuspended: Boolean);

Параметр CreateSuspendedконструктора определяет способ выполнения по-

тока. Если СreateSuspended = false,то выполнение процедуры Executeначинается немедленно после создания объекта. Если CreateSuspended = true,то выполнение начнется только после того, как будет вызван метод Resume:



procedure Resume;

Эта процедура имеет две области применения. Во-первых, она запускает вы-

полнение, если объект потока был создан с CreateSuspended = true.Во-вторых, она запускает приложение, приостановленное ранее методом Suspend:

procedure Suspend;

Таким образом, вы можете в любой момент приостановить выполнение потока методом Suspend,а затем продолжить выполнение методом Resume.

В процедуре Executeможно непосредственно писать операторы выполнения, вызовы каких-то функций. При этом не исключены конфликты между параллельно выполняемыми нитями. В этом случае в процедуре надо вызывать метод Synchronize

procedure Synchronize(Method: TThreadMethod);

 

В этом определении Method— процедура, работающая с компонентами VCL. Таким образом, при работе с компонентами VCL надежнее строить выполнение следующим образом. Вы пишете процедуру, выполняющую необходимые действия с компонентами VCL. Пусть вы дали ей имя Work. Тогда вы включаете ее объявление в класс потока, например, в раздел private,даете в разделе implementation ее описание, а процедура Executeв этом случае может, например, состоять из единственного оператора Synchronizе(Work):

interface

uses

Classes, …;

type

Т = class(TThread)

private

{ Private declarations }

procedure Work;

protected

procedure Execute; override;

end;

implementation

procedure T.Work;

begin

end;

procedure T.execute;

begin

Synchronize(Work)

end;

 

Нормальное завершение выполнения потока происходит при завершении процедуры Execute.Однако возможно и досрочное завершение выполнения потока. Для этого в его процедуру Executeдолжна быть введена проверка булева свойства Terminated(завершено).

При нормальной работе это свойство равно false.Но если какая-то внешняя нить вызвала метод Terminateобъекта данного потока, то Terminatedстановится равным true.Если предполагается возможность такого завершения выполнения потока, то процедура Executeдолжна периодически проверять значение Terminateипри получении значения trueдолжна завершаться. Например:

 

procedure Tl.Execute;

begin

repeat

<какие-то операции>

until Terminated;

end;

Пример окно с двумя кнопками и полем TEdit. Одна кнопка запускает поток, который в поле каждую секунду TEdit заносит число увеличивающееся на 1:

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, unit2;

 

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

Thread:My;

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

begin

Thread:=My.Create(false);

Thread.FreeOnTerminate:=true;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

Thread.Terminate;

end;

 

end.

interface

 

uses

Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};

 

type

My = class(TThread)

private

procedure Work;

protected

procedure Execute; override;

end;

var

i:integer;

implementation

uses unit1, SysUtils;

 

procedure My.Work;

begin

Form1.Edit1.SetTextBuf(PChar(IntToStr(i)));

end;

 

procedure My.Execute;

begin

i:=0;

repeat

i:=i+1;

Synchronize(work);

sleep(1000);

until Terminated

 

end;

end.

 

Технология COM (Component Object Model — компонентная модель объектов) предоставляет возможность одной программе (клиенту) работать с объектом другой программы (сервера). СОМ — это модель объекта, которая предусматривает полную совместимость во взаимодействии между компонентами, написанными разными компаниями и на разных языках. При этом неважно, где выполняются программы: в одном потоке, в разных потоках, на разных компьютерах.

С точки зрения СОМ приложение содержит несколько объектов (в частном случае может быть один объект). Каждый объект имеет один или несколько интерфейсов. В интерфейсе описаны методы объекта, к которым могут получить доступ внешние программы.

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

Таким образом, клиенту достаточно знать интерфейсы объекта и предостав-

ляемые ими методы. Об остальном позаботится система. В нужный момент она запустит сервер СОМ, если он еще не был запущен, сервер создаст объект, объект загрузит все необходимые ему данные и клиенту вернутся указатели на объект и его интерфейсы, с которыми он может работать.

Начиная с Delphi 5, взаимодействие с Word, Excel и многими другими распространенными программами, входящими в стандартную установку Windows и Microsoft Office, может осуществляться из приложений Delphi с помощью компонентов, размещенных в библиотеке на странице Servers.

Приложения Office поставляют сервера COM, которые предоставляют интерфейс доступа к приложению и его объектам. Благодаря этому, разработчик в среде Delphi имеет возможность, создав контроллер автоматизации, управлять сервером.

Всегда существует задающий приложение корневой объект, он всегда называется Application. Каждое приложение Office имеет свой собственный корневой объект – WordApplication, ExcelApplication.

Как только открывается новый документ, будь то PowerPoint, Excel, Word, автоматически создается каркас нового документа, который представляет собой набор библиотек с классами. Объекты этих классов будут доступны в данном документе. Задачей разработчика контроллера автоматизации является получить доступ к корневому объекту сервера, выстроить цепочку доступа к объектам – участникам (встроенным объектам), правильно передать параметры.



<== предыдущая лекция | следующая лекция ==>
Порождение процесса функцией CreateProcess | WordApplication1.Documents.Open(Fname, EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam,


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.