Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.49 MB
Время: 0.043 c
1-1109943377
100a
2005-03-04 16:36
2005.03.20
Стандартные функции удаления файлов


3-1108733737
awod
2005-02-18 16:35
2005.03.20
Вопрос по отъеданию памяти Access-ом


4-1107774683
Skier
2005-02-07 14:11
2005.03.20
Как залить регион окна прозрачной кистью ?


1-1109772718
Dysan
2005-03-02 17:11
2005.03.20
проблемы с кодом на ASM


4-1107353213
Eraser
2005-02-02 17:06
2005.03.20
Форма VCL и многопоточность...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский