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

Вниз

А можно ли из DLLки (типа плагина) получить переменне основной пр   Найти похожие ветки 

 
nv   (2004-01-27 09:40) [0]

Т.е. если основной программой вооще не предусматривалось такого плагина, например, формирование отчета по какому-то TTable.
Может ли мой плагин сам поискать в основной программе заранее извесное имя таблицы и получить к нему доступ? Или я должен предусмотреть всё, что взбредёт в голову потом написать?

Если ето всётаки возможно, то пожалуста примерчик приложите


 
Digitman ©   (2004-01-27 10:11) [1]


> Или я должен предусмотреть всё, что взбредёт в голову потом
> написать?


именно так.
иначе пропадает сам смысл взаимодействия твоего хост-приложения с твоими же плагинами

с др.стороны, если и хост-приложение и плагины написаны в одной и той же версии Делфи и имеют общую RTTI, то плагин имеет возможность перечислять все контролы на всех формах/дейтамодулях, и среди перечисленных находить и отбирать контролы нужного класса (например, TTable)


 
TUser ©   (2004-01-27 10:14) [2]

Не знаю, как с TTable - но с TForm вполне получается. Я думаю и с TTable"ом можно - передать ссылку на него в свою dll и использовать.


 
nv_   (2004-01-28 11:19) [3]

Спасибо за ответы!

Digitman
А если можно хоть маахонький примерчик, как мой полагин может порыться в моей ПРОГРАММЕ и откопать в ней то что ему нужно.


 
Digitman ©   (2004-01-28 12:10) [4]

для этого плагину должен быть заранее известна или передана тем или иным образом ссылка на объект Screen, созданный в контексте инициализации модуля Forms в хост-приложении

а далее - все просто :

function FindGlobalTable(HostScr: TScreen; const Name: string): TTable;
var
I, K: Integer;
DM: TDataModule;
Form: TForm;
Comp: TComponent;
begin
//ищем таблицу на всех существ. формах
for I := 0 to HostScreen.FormCount - 1 do
begin
Form := HostScreen.Forms[I];
for K := 0 to Form.ComponentCount do
begin
Comp := Form.Components[K];
if (Comp is TTable) and (CompareText(Name, Comp.Name) = 0) then
begin
Result := Comp as TTable;
Exit;
end;
end;
end;

//ищем таблицу на всех существ. модулях данных
for I := 0 to HostScreen.DataModuleCount - 1 do
begin
DM := HostScreen.DataModules[I];
for K := 0 to DM.ComponentCount do
begin
Comp := DM.Components[K];
if (Comp is TTable) and (CompareText(Name, Comp.Name) = 0) then
begin
Result := Comp as TTable;
Exit;
end;
end;
end;
Result := nil;
end;



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

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
1-16403
Новый Новичок
2004-01-22 18:39
2004.02.06
Как можно поменять картинку на рабочем столе програмно


1-16484
Oleg
2004-01-27 16:13
2004.02.06
Сохранение рисунков в dll


14-16716
Ru
2004-01-16 18:54
2004.02.06
Тут кто-то, когда-то, что-то про историю говорил.


1-16397
Yegorchic
2004-01-22 20:16
2004.02.06
MDIForm ы


14-16701
ИМХО
2004-01-17 06:09
2004.02.06
HEX редактор