Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизКак Variant привести к TComponent или TWinControl Найти похожие ветки
← →
Davinchi © (2005-03-06 00:41) [0]В переменной типа Variant храниться объект (компонент - TButton), надо эту переменную привести к типу TComponent или TWinControl для того, чтобы можно было на этом объекте создать свой объект, КАК ЭТО СДЕЛАТЬ???
← →
Набережных С. © (2005-03-06 06:08) [1]
> Davinchi © (06.03.05 00:41)
Практически так же, как и поместил TComponent в Variant.
← →
Eraser © (2005-03-06 12:25) [2]Для "понятливости" используй для этих целей вместо Variant, класс TObject.
← →
Davinchi © (2005-03-06 13:45) [3]может для кого важно будет: речь идет о внешней компоненте для 1С Предприятия 7.7 Во ВК я передаю кнопку, а в ДЛЛ на этой кнопке хочу свое творить. По технологии создания ВК все property в ДЛЛ имеют тип Variant, хотя попробую и с TObject...
а как поместил так обратно не получится, делфи ругается на конструкцию:MyPanel:=TPanel.Create(TComponent(f1C_Button));
← →
Eraser © (2005-03-06 13:53) [4]Davinchi ©
Почему ругается? Что за ошибку выдаёт?
← →
Набережных С. © (2005-03-06 15:20) [5]Тебе повезло, что у Delphi рук-ног нету, а то бы она ругаться не стала.
Можно сделать так:
Присвоение:
TVarData(v).VType:= vtPointer;
TVarData(v).VPointer:=MyButton;
Получение:
if TVarData(V).VType = vtPointer then
TButton(TVarData(V).VPointer).Click;
Но делать так конечно не надо, потому как это хрень полная. Можно сделать так:type
IDelphiControl = interface
[здесь GUID]
function GetDelphiControl: TControl; stdcall;
end;
TMyButton = class(TButton, IDelphiControl)
private
function GetDelphiControl: TControl; stdcall;
end;
И создаешь не стандартный батон, а свой, TMyButton.
Тогда передаешь так:
var
I: IUnknown;
MyButton: TMyButton;
begin
MyButton:=TMyButton.Create(Self);
I:=MyButton;
V:=I;
а принимать можно так:
var
I: IUnknown;
MyButton: TMyButton;
begin
I:=V;
TControl(MyButton):=(I as IDelphiControl).GetDelphiControl;
Но и так делать не надо, потому что эта хрень недалеко ушла от предыдущей. Лучше выкинуть к лешему из IDelphiControl метод GetDelphiControl, обозвать этот интерфейс IDelphiButton и определить в нем все необходимые методы батона.
А еще лучше забей на ето дело и пойди купи пивка. Как я:)
← →
Davinchi © (2005-03-06 15:21) [6]Error: Invalid typecast
← →
Davinchi © (2005-03-06 15:31) [7]Уже купил, легче не стало, после праздников работать должно...
С интерфейсами идея путняя, тока я из 1С работаю с ДЛЛ а не из ДЕлфинячего приложения... Из 1С мона цеплять тока методы и свойства объекта в ДЛЛ...
Но это как-то реально, т.к. есть компоненты, которые создают как-то свои элементы управления на форма диалогов в 1С, а за радителя используют любой компонент на форме...
Еще сть мвсь воспользоваться FindWindow и попробовать на окне найти нужный элемент...
← →
Набережных С. © (2005-03-06 15:47) [8]
> Davinchi © (06.03.05 15:31) [7]
Забудь, про дельфийские компоненты 1С ничего не знает. Возможно подойдет передача HWND батона, а из 1С создавать элементы управления, используя этот HWND как владельца их окон. Но я даже приблизительного представления не имею об 1С, так что вполне возможно, что все написанное мной - бред сивокобыльный
← →
Davinchi © (2005-03-06 16:30) [9]а 1С и не надо их знать, мне в делфи надо тока получить объект из 1С как родителя... а рассматривать 1С как 1С не стоит, представь что речь идет о создании своего элемента управления на форме другого приложения, при этом другое приложение вызывает это создание методом из ДЛЛ...
← →
Набережных С. © (2005-03-06 16:40) [10]
> Davinchi © (06.03.05 16:30) [9]
Интерфейсы - однозначно, все остальное - от лукавого.
← →
Davinchi © (2005-03-06 22:58) [11]дык как я в 1С обращусь к интерфеийсеу в ДЛЛ???
← →
jack128 © (2005-03-07 00:06) [12]Davinchi © (06.03.05 16:30) [9]
представь что речь идет о создании своего элемента управления на форме другого приложения, при этом другое приложение вызывает это создание методом из ДЛЛ...
так чего 1С получить то должно от твоей DLL? handle окна? Ну и отдай ей хедл баттона, в чем проблема??
← →
sniknik © (2005-03-07 01:43) [13]> дык как я в 1С обращусь к интерфеийсеу в ДЛЛ???
купи книжку "создание внешних компонент для 1С"
( ~ 2 года назад она 16$ стоила)
там все есть, как и что, внедрение формы прям в примерах есть. делается через COM обьект, только для 7-ки он "немного" ;о)) извращен, для восьмерки изврашения убрали (говорят) и возможности тоже порезали (тоже говорят ;о)).
← →
Набережных С. © (2005-03-07 08:00) [14]
> Davinchi © (06.03.05 22:58) [11]
А ты сам сказал - забудь про 1С:) К тому же смотри [13]. Пойми, у тебя только 2 пути: либо интерфейсы, либо использовать окно одного в качестве родителя других, про оба сказано уже неоднократно. Первый путь продуктивней. Ну дак чего?
← →
Romkin © (2005-03-09 13:01) [15]Davinchi © (06.03.05 22:58) [11] :)))
А = СоздатьОбъект("MyApp.MyClass") - что сложного?
Не надо извращаться, сделай себе Automation Object и пользуй его. И, кстати, просто к DLL ты из 1С обращаться не можешь, насколько мне память не изменяет. Нет у нее LoadLibrary явно :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.066 c