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

Вниз

Как передавать данные с формы из dll не закрывая формы ?   Найти похожие ветки 

 
Spartak   (2003-05-21 07:39) [0]

Я хочу сделать поддержку плагинов так вот : Например чтобы пользоветель мог сделать и подключить свою dll, но тут возникает 1 проблема ! В dll можно пеместить форму которая и будет основой для
плагина, с её помощью пользователь будет работать с функциями программы ( форма в dll для удобства , интерфейс в общем )
Вопрос как передавать и получать данные работая с формой из dll не закрывая при этом форму ( dll ) ?


 
Palladin   (2003-05-21 07:53) [1]

на каждое свойство формы, которое хочешь читать и/или устанавливать, заведи в dll функцию чтения и/или записи...


 
Spartak   (2003-05-21 08:13) [2]

Нет ! 6не совсем верно ! как реализовать такую вешь чтобы данные передавались и обрабатывались програмой ! и при этом форма из dll не закрывалась ! то есть не завершать её работу


 
Palladin   (2003-05-21 08:19) [3]

мля
знак "+" - это сложение
ты еще и здесь мне скажи, что не совсем верно!


 
Spartak   (2003-05-21 08:29) [4]

> на каждое свойство формы, которое хочешь читать и/или устанавливать, заведи в dll функцию чтения и/или записи..

Всё верно !!!!!!!!
НО ПРОЧИТАТЬ из этой функции можно будет только тогда когда dll уже отработал и закрылась !


 
Spartak   (2003-05-21 08:59) [5]

Так потехоньку начинаю везжать :)
а примером можно ?


 
Palladin   (2003-05-21 10:12) [6]

предположим переменная с формой у тебя глобальна в dll

var
MyForm:TForm


процедура из dll для установки значения в форме

function _FindComponent(p_Owner:TComponent;p_strName:string):TComponent;
var
i:integer;
begin
result:=p_Owner.FindComponent(p_strName);
if not result then
for i:=0 to p_Owner.ComponentCount-1 do
begin
result:=_FindComponent(p_Owner.Components[i],p_strName);
if result then break;
end;
end;

function SetProperty(p_strComponent,p_strProp:string;value:variant):boolean;
var
c:TComponent; // компонент
begin
result:=false;
C:=nil;
C:=_FindComponent(MyForm,p_strComponent); // поиск компонента
if not Assigned(C) then exit; // провека на существование компонента
if not Assigned(GetPropInfo(C,p_strProp)) then exit; // проверка на существование свойства у компонента
SetPropValue(C,p_strProp,value); // установка свойства
result:=true;
end;

писал тут, поэтому не тестировал, думаю взятие значения сам напишешь...


 
Spartak   (2003-05-21 12:38) [7]

Извени мы по моему не поняли друг друга ! или я гоню уже :)
Вот предаставь у меня есть форма 2 тогда я могу сделать так
form2.label1.caption:="11111";

а в dll этот параметр я могу передать только при вызове функции из него ( то есть формы ) и это надо делать в реальном времени

Я просто наверно не понял твоего примера :( Подскажи пожайлуста поподробней для чего что и как ?


 
Verg   (2003-05-21 12:48) [8]

Я думаю, что лучше всего для этого воспользоваться оконными сообщениями. Т.е. в процедуру DLL-ки которая так или иначе несет смысл инициализации/старта модального цикла формы, передай в качестве параметров хэндл какого либо окна/формы главной программы. В DLL-ке по мере появления данных делай postmessage или sendmessage на этот хэндл, данные же передавай в аргументах этого сообщения.


 
Spartak   (2003-05-21 12:54) [9]

> Verg
Мысль конечно хорошая но можно примером ?


 
Palladin   (2003-05-21 12:58) [10]


> Spartak © (21.05.03 12:38)


ну я же вроде со смыслом функцию и параметры назвал...

вот пример использования написанной функции из главной программы для твоего, опуская все подробности с подключением длл и получением указателя на функцию


if not SetProperty("Label1","Caption","Новый капшн из программы") then raise Exception.Create("Не найдено свойство");


 
Spartak   (2003-05-21 13:12) [11]

А как отправлять данные на форму ? На примере Listbox можно ?


 
Palladin   (2003-05-21 13:38) [12]

var
S:TStringList;

s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add
s.add


if not SetProperty("ListBox1","Items",s) then raise Exception.Create("Не найдено свойство");

s.free;


 
Spartak   (2003-05-21 13:44) [13]

Большое спасибо !

Последний раз прошу ! ? :)
Функции работать не хотят ! я не могу понять в чём дело

функция SetProperty

_FindComponent = не определено обозначение
GetPropInfo = не определено обозначение
SetPropValue = не определено обозначение

if not result then ошибка
if result then break; ошибка

пожайлусто подправьте.
а так спасибо за советы


 
Spartak   (2003-05-21 13:47) [14]

с FindComponent разобрался а с GetPropInfo не могу ! вылазиит ошибка


 
Spartak   (2003-05-21 13:48) [15]

и ошибка с SetPropValue


 
Palladin   (2003-05-21 13:57) [16]

uses TypInfo


 
Spartak   (2003-05-21 14:11) [17]

всё пошло но данные не передаються ! ужесно глючит функция

function _FindComponent(p_Owner:TComponent;p_strName:string):TComponent;
var
i:integer;
begin
result:=p_Owner.FindComponent(p_strName);
if not result then
for i:=0 to p_Owner.ComponentCount-1 do
begin
result:=_FindComponent(p_Owner.Components[i],p_strName);
if result then break;
end;
end;


в ней выдаёться 2 ошибки
и как получать я понял ! а как давать инфу основному приложению ?


 
Spinker   (2003-05-21 14:26) [18]

>Spartak
Может он имел ввиду получения главной формой данных из dll а не наоборот ?


 
Palladin   (2003-05-21 14:36) [19]


> Spartak © (21.05.03 14:11)

Ты логику не просек в натуре...
я же по русски написал что процедура эта она в длл должна быть...
и форма твоя которой управляет главное приложение тоже в длл должна быть и описана как глобальная для все библиотеки...


 
Spartak   (2003-05-21 15:04) [20]

Да ... торможу я наверное уже ! по полной причём !
У меня такое предложение : я могу дать что нибудь взамен полного и работающего исзодника этого примера !? можно так ?


 
Spartak   (2003-05-21 15:04) [21]

По другому мне по моему не дойдёт :(


 
Palladin   (2003-05-21 15:16) [22]

у меня нет времени на написание полного...
может в выходные, но не гарантирую...


 
Spartak   (2003-05-26 07:26) [23]

> Palladin
??? ты смог найти время ?


 
Spartak   (2003-05-27 07:37) [24]

> Palladin

Ты написал ?

------------------------
Может кто знает как решить данную проблему ?


 
Palladin   (2003-05-27 10:20) [25]

написал
тяни
http://www.uray.ru/downloads/plugsample.zip


 
Spartak   (2003-05-29 09:26) [26]

>Palladin

Большое спасибо ! правда глючит при выключении , но я надеюсь сам разберусь ! Спасибо !


 
Palladin   (2003-05-29 09:29) [27]

ну звиняйте, писано было в течении 20 минут, ты хотел пример вот тебе пример...


 
Spartak   (2003-05-29 12:01) [28]

а как получать инфу из dll ? там такого нет :(




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

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

Наверх





Память: 0.5 MB
Время: 0.01 c
14-26749
Real
2003-05-15 20:14
2003.06.09
Как тупят программисты?


14-26699
бомонд
2003-05-26 10:16
2003.06.09
Песня


14-26654
zhenya
2003-05-23 21:37
2003.06.09
InetDetect????


3-26371
Snake
2003-05-19 14:00
2003.06.09
Пожалуйста, помогите составить запрос...


8-26622
SDS
2003-02-21 14:27
2003.06.09
Как уменьшить размер TBitmap





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