Адрес этой странички:
http://d1cv8.narod.ru/top_003/d1cv8_20070924_001/d1cv8_20070924_001.htm Дата: 24.09.2007 Интернет-приложение к книге "Delphi и 1С:Предприятие.Программирование информационного обмена" |
Глава 3. Подключение к
1С.
Создание Delphi-компонента, реализующего
функционал подключения к 1Cv7.
Расширение функционала (продолжение).
Видимость окна программы 1Cv7.
В главе 3 книги (стр. 19-25) был рассмотрен пример подключения
из внешнего приложения к
системе 1Cv7 в режиме OLE Automation.
В
статье от 27.08.2007 был рассмотрен процесс создания Delphi-компонента
(TConnectTo1Cv7
), реализующего соответствующий функционал.
В
предыдущей статье мы модифицировали компонент, расширив его функционал
(добавили метод, позволяющий считывать список
активных Пользователей базы данных
1Cv7).
Теперь попробуем еще расширить функционал компонента
TConnectTo1Cv7 , создав свойства и методы, позволяющие
визуализировать окно программы 1Cv7 (подробно
об этом см. глава 4, стр. 244-249 книги).
Здесь мы рассмотрим только "практику" ...
Запустим Delphi и откроем пакет sp1Cv7_OLE.dpk.
По двойному щелчку мышкой на строке
ConnectTo1Cv7.pas
откроем модуль компонента
TConnectTo1Cv7 .
Сделаем следующие изменения (красный цвет) в соотв.разделах объявления класса компонента :
type
TConnectTo1Cv7 =
class(TComponent)
private
{ Prvate declarations }
...
...
//Флаг: если true - окно видимо,
//в противном случае - нет
fVisible1Cv7 : boolean;
//Дескриртор окна приложения 1Cv7
fhWnd1Cv7 : HWND;
//Цепочка символов в заголовке окна приложения,
//идентифицирующая окно, как окно программы 1Cv7
fVisible1Cv7_Caption : string;
protected
{ Protected declarations }
...
...
//Метод, "отвечающий" за изменение значения fVisible1Cv7
procedure mSetVisible1Cv7(Value : boolean);
publiс
{ Public declarations }
...
...
//"Опубликуем" значение fhWnd1Cv7, как свойство (только для чтения)
property hWnd1Cv7: HWND read fhWnd1Cv7;
//Метод, визуализирующий окно программы 1Cv7
function ShowThisWindow_1Cv7 : boolean;
//Метод, скрывающий окно программы 1Cv7
function HideThisWindow_1Cv7: boolean;
published
{ Published declarations }
...
...
//Свойство Visible1Cv7 (визуализация/скрытие окна программы 1Cv7)
property Visible1Cv7: Boolean read fVisible1Cv7 write mSetVisible1Cv7 default FALSE;
//Свойство Visible1Cv7_Caption (цепочка символов в заголовке окна,
//идентифицирующая его, как окно программы 1Cv7)
property Visible1Cv7_Caption: string read fVisible1Cv7_Caption write fVisible1Cv7_Caption;
end;
Изменения в конструкторе класса :
constructor
TConnectTo1Cv7.Create(AOwner: TComponent);
//Конструктор
компонента
begin
//Сначала (перед любыми нашими "действиями") вызываем "дух предков" :)
inherited Create(AOwner);
...
fVisible1Cv7 := FALSE;
fhWnd1Cv7 := 0;
fVisible1Cv7_Caption := Trim(fVisible1Cv7_Caption);
if length(fVisible1Cv7_Caption)<=0 then fVisible1Cv7_Caption:='1С:Предприятие';
...
...
end;
Определим новый метод :
procedure TConnectTo1Cv7.mSetVisible1Cv7(Value : boolean);
//Установить значение свойства fVisible1Cv7
begin
if Value then begin
ShowThisWindow_1Cv7;
end
else begin
HideThisWindow_1Cv7;
end;
end;
Исходный текст метода ShowThisWindow_1Cv7 :
Исходный текст метода HideThisWindow_1Cv7 :
В модуле
sp_Lib_Delphi определим новую функцию sp_GetHandleThisWindow
(детальные разъяснения - см. глава 4 книги) :
Ниже представлен текст функции : sp_GetListOfWindowsNames
Более подробно об этих функции (а также о вспомогательных функциях) можно прочитать в книге на стр. 244-249 (глава-4).
Протестируем новую версию компонента.
Создадим новый Delphi-проект (рис.1).
Рис.1 Форма проекта и компонент
TConnectTo1Cv7
на форме
Установим свойство Active
нашего компонента в состояние TRUE.
На экране монитора появится диалоговое
окно выбора информационной базы 1Cv7 (рис.2).
Рис.2 Диалоговое
окно выбора информациионой базы 1Cv7
После того, как информационная база будет выбрана и будет нажата кнопка OK - программа 1Cv7 будет запущена в режиме сервера OLE Automation (но окно программы будет скрыто).
Теперь установим свойство Visible1Cv7
нашего комонента в состояние TRUE.
На экране монитора появится окно программы
1Cv7 (рис.3) :
Рис.3 Окно программы 1Cv7
Если установить свойство Visible1Cv7
нашего комонента в состояние FALSE, то
окно программы 1Cv7 исчезнет с экрана
монитора.
Вот, собственно, и все.
Следует отметить, что здесь приведена лишь "практика".
"Подробности" - см. соотв.главу книги.
Исходные тексты новой версии компонента можно скачать
здесь (29 кб).
Исходные тексты "тестировщика" компонента можно скачать
здесь (4 кб)
Продолжение - создание аналогичного Delphi-компонента для системы 1Cv8.