Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Вниз

ActiveX в компонент   Найти похожие ветки 

 
J_S   (2002-07-22 11:52) [0]

Есть следующий вопросик.
Имеецца active-x - он, по идее визуальный - форма - в ней поле для подачи запроса, кнопка. По нажатию кнопки результаты по запросу выводяцца в мемо...
Мне же нужно это дело преобразовать к дельфевому компоненту так что бы он был невизульный - для строки запроса отдельное свойство, а для получения ответа по этому запросу отдельный метод...
Подскажите, если кто сталкивался.


 
Kapusto   (2002-07-22 12:44) [1]

Не совсем понятна постановка задачи...
Необходимо создать свою обертку для данного компонента, или что? Доступен ли исходный текст ActiveX"a? От ответов на эти вопросы зависят и
дальнейшие действия...


 
Romkin   (2002-07-22 12:48) [2]

Это dll или ocx?
вообще-то обычно достаточно сделать import type library


 
J_S   (2002-07-22 13:56) [3]

это *.ocx.
а сделать надо именно обертку..:)

еще кстати вопрос - но это скорее техника - этот актив-х вроде инсталлируецца, как сообщает дельфи, но не ActiveX, ни на Samples, и вообще ни на одной из вкладок его нет...


 
Kapusto   (2002-07-22 16:56) [4]

После Import ActiveX Control по умолчанию в Imports должен лежать файл-обертка _TLB, который и представляет собой компонент. Посмотри в самом конце файла должен быть вызов RegisterComponents, который и должен инсталлить компонент...

А насчет обертки - можно действительно import type library и смотреть, какие методы есть у компонента... Если есть проперти, или методы, эквивалентные едиту, куда вводится запрос и нажатию кнопки, то тебе повезло... Создаешь класс этого компонента в своей обертке и работаешь с ним...


 
J_S   (2002-07-22 17:25) [5]

файл смотрела - процедуры RegisterComponents не нашла - хотя она должна там быть..это-то действительно странно.
в чем фишка?


 
Romkin   (2002-07-22 18:05) [6]

Component -> Import ActiveX Control -> (Найти в списке либо в файле) -> Install
Создастся компонент, у которого Visible есть
или Import Type Library with Generate Component wrapper (Install - пойдет на палитру)


 
J_S   (2002-07-22 18:33) [7]

Ребята, все это правильно...
делаю как вы и говорите.. да тока не выходит ничего - RegisterComponents у него по отсутствует... Причем любым из двух способов - результат одинаковый - компилиться без проблем, а вот устанавливаться не хотит..
Вернее, что устанавливаться не хотит он тоже не сообщает.. его просто не видно, ну а не видно естессно за отсутсвием Register.
подскажите чего делать?..
уже пробовала и в другой пакет, и на другую вкладку поместить - не получаецца...:(


 
J_S   (2002-07-23 10:12) [8]

Пробовала поставить его (ActiveX) на MFC. Поставился...
Вопрос - почему же этот конкретный OCX дельфи воспринимать не хочет?.


 
Romkin   (2002-07-23 10:17) [9]

Если нужен невизуальный компонент, то зачем мучиться?
Должен получиться модуль Delphi, в нем компонент. Register можно и вручную написать, только зачем?
Просто создавать в run-time и пользоваться


 
J_S   (2002-07-23 10:45) [10]

Register я вручную пробовала прописывать - тока все равно когда пакет формируешь оно все перетираецца.

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


 
Romkin   (2002-07-23 11:26) [11]

а Generate component wrapper?
ВЫшли мне этот ocx, посмотрю, как это вообще модет быть....


 
J_S   (2002-07-23 11:44) [12]

Generate component wrapper - он тоже дает такой же результат как и Import ActiveX...
то есть описание создаецца - но оно какое-то урезанное - как я говорила отсутсвует Register - это раз, и сам класс - это два.
присутствуют тока компоненты...

interface

uses ActiveX, Classes, Graphics, OleCtrls, OleServer, StdVCL, Variants,
Windows;


// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
// TypeLibrary Major and minor versions
axAmdProWebMajorVersion = 2;
axAmdProWebMinorVersion = 0;

LIBID_axAmdProWeb: TGUID = "{BE32B240-16C0-4D49-BAF5-7FB7EBB57AD4}";

IID__ctlAmdProWeb: TGUID = "{9E22D3E7-0B99-42D9-A1AC-7CB838297B63}";
DIID___ctlAmdProWeb: TGUID = "{91D6D5B5-F289-4464-9A86-FA176E50C744}";
CLASS_ctlAmdProWeb: TGUID = "{12DBEE5C-9A88-4143-9FD8-A01854AE0F24}";
type

// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
_ctlAmdProWeb = interface;
_ctlAmdProWebDisp = dispinterface;
__ctlAmdProWeb = dispinterface;

// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
ctlAmdProWeb = _ctlAmdProWeb;


// *********************************************************************//
// Interface: _ctlAmdProWeb
// Flags: (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
// GUID: {9E22D3E7-0B99-42D9-A1AC-7CB838297B63}
// *********************************************************************//
_ctlAmdProWeb = interface(IDispatch)
["{9E22D3E7-0B99-42D9-A1AC-7CB838297B63}"]
procedure GhostMethod__ctlAmdProWeb_28_0; safecall;
procedure GhostMethod__ctlAmdProWeb_32_1; safecall;
...................
дальнейшее описание интерфейсов
..................
procedure GhostMethod__ctlAmdProWeb_1952_481; safecall;
function Disconnect: OleVariant; safecall;
function Reconnect: OleVariant; safecall;
function Get_GetConnectStatus: WordBool; safecall;
function MyQuery(const sQuery: WideString): WideString; safecall;
property GetConnectStatus: WordBool read Get_GetConnectStatus;
end;

// *********************************************************************//
// DispIntf: _ctlAmdProWebDisp
// Flags: (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
// GUID: {9E22D3E7-0B99-42D9-A1AC-7CB838297B63}
// *********************************************************************//
_ctlAmdProWebDisp = dispinterface
["{9E22D3E7-0B99-42D9-A1AC-7CB838297B63}"]
procedure GhostMethod__ctlAmdProWeb_28_0; dispid 1610743808;
procedure GhostMethod__ctlAmdProWeb_32_1; dispid 1610743809;

.................................

procedure GhostMethod__ctlAmdProWeb_1952_481; dispid 1610744289;
function Disconnect: OleVariant; dispid 1610809346;
function Reconnect: OleVariant; dispid 1610809347;
property GetConnectStatus: WordBool readonly dispid 1745027072;
function MyQuery(const sQuery: WideString): WideString; dispid 1610809349;
end;

// *********************************************************************//
// DispIntf: __ctlAmdProWeb
// Flags: (4240) Hidden NonExtensible Dispatchable
// GUID: {91D6D5B5-F289-4464-9A86-FA176E50C744}
// *********************************************************************//
__ctlAmdProWeb = dispinterface
["{91D6D5B5-F289-4464-9A86-FA176E50C744}"]
end;

implementation

uses ComObj;

end.


 
Kapusto   (2002-07-23 12:29) [13]

Ну и все замечательно...
делаешь свой компонент (хотя я сделал бы просто свой класс), в Create которого вызываешь получение интерфейса _ctlAmdProWeb,
и гоняешь его function MyQuery(const sQuery: WideString): WideString;
(естественно, в uses указываешь данную TLB)

2Romkin: я не уверен, что сие получится, ибо у интерфейса стоит флаг hidden?...


 
Romkin   (2002-07-23 13:37) [14]

Не делает, потому что интерфейсы не начинаются с "I"
У меня через _ctlAmdProWebDisp сделалось, его hidden не сделаешь
А так, конечно, непонятно, как этим пользоваться.
И непонятно, зачем еще явный dispinterface, у основного-то Dual


 
Romkin   (2002-07-23 13:43) [15]

Упс! Ошибка, wrapper все равно, как интерфейс называется, а не делает компенент, имхо, потому, что Hidden


 
J_S   (2002-07-23 16:28) [16]

Можно немного подробнее? (про Create которого вызывает получение интерфейса _ctlAmdProWeb) и вообще что сделать в исходнике (VB) чтоб таких приколов не было?


 
Kapusto   (2002-07-23 17:45) [17]

TMyClass = class(TObject)
private
intf: _ctlAmdProWeb;
public
constructor Create; override;
function Query(q: string): string;
end;

TMyClass.Create
begin
intf := CreateComObject(CLASS_ctlAmdProWeb) as _ctlAmdProWeb;
end;

TMyClass.Query(q: string): string;
begin
Result := intf.MyQuery(q);
end

PS: а насчет Басика - не в курсах...
2Romkin: проверь, вроде бы должно прокатить...


 
Romkin   (2002-07-23 18:08) [18]

я вроде письмо послал...

uses axAmdProWeb_TLB, ComObj;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Amd: _ctlAmdProWebDisp;
ifi: BOOL;
begin
amd := CreateComObject(CLASS_ctlAmdProWeb) as _ctlAmdProWebDisp;
ifi := amd.GetConnectStatus;
if ifi then
ShowMessage("Connected")
else
ShowMessage("Not Connected");
end;


 
J_S   (2002-07-23 18:58) [19]

спасибки:))
сегодня обязательно попробую...


 
J_S   (2002-07-24 15:29) [20]

No such interface supported

вот такая вот штука возникает при вызове метода

function TMyClass.GetResponse: String;
begin
Result := Self.FObj.MyQuery(Self.GetQuery);
end;

Self.GetQuery - возвращает строку запроса..
и вообще такая ошибка возникает при любой попытке использования функций _ctlAmdProWeb.

подскажите как бороться


 
J_S   (2002-07-24 15:53) [21]

а теперь
EOleException
"OLE error 800A01A9"


 
Romkin   (2002-07-24 15:58) [22]

Используй не _ctlAmdProWeb, а _ctlAmdProWebDisp, у меня код (выше) проходит без ошибки, если Disp


 
J_S   (2002-07-24 16:13) [23]

да спасибо большое:) - а в чем различие?


 
Romkin   (2002-07-24 16:37) [24]

Это Dispinterface, и обращение происходит не через vtable, а через вызовы invoke



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.006 c
1-60729
Uran
2002-08-07 09:44
2002.08.19
Как защитить от копирования


1-60620
Relaxer
2002-08-08 14:33
2002.08.19
Хелп. Скролл


1-60556
pvasya
2002-08-07 16:29
2002.08.19
TForm


4-60907
Dim_NoReg
2002-06-13 13:20
2002.08.19
Непобедимый маус


6-60765
pavl1k1
2002-06-04 14:17
2002.08.19
Передача файлов по сокетам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский