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

Вниз

Создание копии объекта, созданного в приложении, в DLL.   Найти похожие ветки 

 
АлексейК   (2003-06-02 13:23) [0]

Хотелось бы услышать мнения по этому поводу. Как создать в DLL копию обеткта существующего в приложении.


 
Palladin   (2003-06-02 13:25) [1]

это как? зачем тебе копия?


 
АлексейК   (2003-06-02 14:44) [2]

Допустим в приложении есть объект Edit.
В DLL создаю
DllEdit:=Tedit.Create(....);
Теперь нужно что бы свойтва DllEdit"a послностью совпадали с Edit"oм приложения. Оговорюсь сразу, объект класса TEdit взят лишь в качетсве примера.


 
Skier   (2003-06-02 14:46) [3]

>АлексейК (02.06.03 14:44)
Объект умеет копировать (и читать) себя в(из) поток(а) (TStream)


 
Palladin   (2003-06-02 14:47) [4]

А на второй вопрос не ответил...


 
Green   (2003-06-02 16:39) [5]

>>DllEdit:=Tedit.Create(....);
DllEdit.Assign(EXEedit);

DLLEdit должен иметь в предках класс TPersistent.
свойства DllEdit которые объявлены в published секции будут как у ExeEdit.


 
Skier   (2003-06-02 16:41) [6]

>Green (02.06.03 16:39)
Сам пробовал ?


 
jack128   (2003-06-02 17:17) [7]


> Сам пробовал ?

При компиляции с ран тайм пакетами должно работать...


 
Skier   (2003-06-02 17:20) [8]

>jack128 © (02.06.03 17:17)
А разве про run-time пакеты что-нибудь было сказано ?


 
АлексейК   (2003-06-03 04:57) [9]

Да вот с потоками надо попробовать.


 
Green   (2003-06-03 10:35) [10]

>Green (02.06.03 16:39)
Да уж, ошибочка вышла :).

Можно так.
в exe для нужного компонента сохранить его свойства в строке:
S:=TMemoryStream.Create;
S.WriteComponent(Edit1);
StrStream := TStringStream.Create(st);
S.Seek(0, soFromBeginning);
ObjectBinaryToText(S, StrStream);
st:=StrStream.DataString;
StrStream.Free;
S.Free;

передать строку параметров в dll, а там
S:=TMemoryStream.Create;
StrStream := TStringStream.Create(st);
ObjectTextToBinary(StrStream, S);
StrStream.Free;
S.Seek(0, soFromBeginning);
C:=S.ReadComponent(nil);
(C as TEdit).Parent:=DLLForm;
(C as TEdit).Top:=10;
где C это твой новый компонент.

Не забудь добавить в Dll
initialization
RegisterClasses([TEdit]);

Но так обработчики событий не передаются.


 
Green   (2003-06-03 10:38) [11]

initialization
RegisterClasses([TEdit]);

будет работать только для bpl, для dll ты должен явно вызывать функцию dll которая будет делать RegisterClasses([TEdit]);


 
Green   (2003-06-03 11:19) [12]

А все обработчики событий можно загрузить
var PropList: PPropList;
NumProps: Integer;

InC - компонент из exe
...
GetMem(PropList, SizeOf(PPropInfo) * GetTypeData(InC.ClassInfo).PropCount);
NumProps := GetPropList(InC.ClassInfo, [tkMethod], PropList);
for i := 0 to NumProps - 1 do
SetMethodPropertyIfExists(C, PropList[i]^.Name, GetMethodProp(InC, PropList[i]^.Name));
...
end;

procedure SetMethodPropertyIfExists(AComp: TComponent; APropName: String;
AMethod: TMethod);
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(AComp.ClassInfo, APropName);
if PropInfo <> nil then
begin
if PropInfo^.PropType^.Kind = tkMethod then
SetMethodProp(AComp, PropInfo, AMethod);
end;
end;



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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
1-50276
Johnyk
2003-06-04 15:37
2003.06.16
Инсталятор BDE


1-50285
AbrosimovA
2003-06-04 14:27
2003.06.16
Помогите разобраться с типизиров. и нетипизир. файлами


7-50543
Dimok
2003-04-11 00:28
2003.06.16
Помогите! Нужно программно влючать/выключать монитор клаву и мышу


7-50532
nokk9
2003-04-11 02:14
2003.06.16
Телефон


1-50292
Arm79
2003-06-04 17:13
2003.06.16
Установка компонент сторонниз разработчиков





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