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

Вниз

А можно ли из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.054 c
14-16718
Igorek
2004-01-16 17:55
2004.02.06
Гибридные мобильные телефоны


1-16475
Dest
2004-01-27 13:07
2004.02.06
Перебор символов


3-16039
Alexey K
2004-01-08 15:17
2004.02.06
HELP Проблема при многопользовательском доступе


6-16553
Gennady
2003-12-03 10:35
2004.02.06
Передача TStream между TIdTCPServer и TIdTCPClient.


1-16286
Chuha
2004-01-25 19:41
2004.02.06
В чем ошибка?





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