Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Как 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.056 c
14-1109566131
ex080D:07BBh
2005-02-28 07:48
2005.03.20
What the hell is going on?


4-1107326988
greenbloody
2005-02-02 09:49
2005.03.20
Иконка в SysTray


3-1108905629
Sergeant ///
2005-02-20 16:20
2005.03.20
Параметр LookupCombobox


4-1107546201
XAN
2005-02-04 22:43
2005.03.20
kak cdelat tak ctobi ikonka proqrammi bila v systray


1-1110285014
Новичек
2005-03-08 15:30
2005.03.20
Посылка сообщения функцией PostMessage().