Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизВернуть ссылку на компоненту по её описанию в STRING-е Найти похожие ветки
← →
lord vader (2004-09-18 11:51) [0]Как можно найти и получить ссылку на компоненту если на входе в такую функцию подать например "TForm2.Listbox1"?(приложение многоформенное)
← →
Алхимик © (2004-09-18 12:15) [1]FindComponent ?
← →
lord vader (2004-09-18 12:37) [2]Так не пойдет, уже пробовал. Мне из головной формы(mainform) нужно получить полную ссылку(форма.компонента), а таким способом насколько я знаю можно найти только компонент на текущей форме. Или я не прав?
На самом деле это очень срочно, заранее благодарен за ответ.
← →
Defunct © (2004-09-18 18:48) [3]lord vader (18.09.04 11:51)
Нафиг это нужно?
Приложение, же ваше. Какой смысл там искать какие-то компоненты? Абсурд какой-то.
← →
lord vader (2004-09-18 19:46) [4]А вот нафиг! Нужно! В приложение поступает поток данных, среди которых название компонент у которых нужно менять какие-то свойста... У меня это TTable в основном.
← →
Defunct © (2004-09-18 19:54) [5]lord vader (18.09.04 19:46) [4]
Так не легче, блин, сделать массив указателей на компонеты! ;)
в нем и искать. Да и лучше искать по коду (номеру) а не по имени. А лучше вообще сразу указатель использовать, пусть те данные, которым требуется обновиться, напрямую пишутся в TTable.
PS: бредовейшая затея - искать по имени компонента, это еще и медленно... Данные должны быть независимыми от визульных элементов. Может лучше расскажете задачу, да что-нить дельное посоветуем?
← →
Alx2 © (2004-09-18 19:54) [6]>lord vader (18.09.04 19:46) [4]
Внешний пользователь вашего приложения знает о реализации его функциональности во всех деталях? Не проще ли представить интерфейс, не открывая его реализацию?
← →
lord vader (2004-09-18 20:06) [7]Я делаю так, может это и тупо и кто-то подскажет более красивый и экономичный вариант:
всё также через FindComponent, сначала через Application нахожу форму которой принадлежит компонент, а потом через форму получаю ссылку через опять же FindComponent, благо ничто не лежит в контейнерах... Есть у кого-то другие более продвинутые идеи?
← →
Alx2 © (2004-09-18 20:10) [8]>lord vader (18.09.04 20:06) [7]
А про задачу свою можете рассказать в полной мере, темный джедай :) ?
Просто пока нет информации для раздумий.
← →
lord vader (2004-09-18 20:13) [9]использовать массив не представляется возможным, компоненты иногда создаются динамически и заранее ничего не известно. возиться с массивом и его каждый раз синхронизировать мне не удобно, тем более процессорное время для меня не существенно вообще
← →
Defunct © (2004-09-18 20:13) [10]> всё также через FindComponent, сначала через Application нахожу форму которой принадлежит компонент, а потом через форму получаю ссылку через опять же FindComponent, благо ничто не лежит в контейнерах... Есть у кого-то другие более продвинутые идеи?
Идеи будут сразу, как только мы услышим цель вышепроделанного.
Понимаете, я себе вообще не могу представить ситуации в которой нельзя обойтись без поиска компонентов по имени. Для меня такая ситуация равносильна использованию Label Goto и т.п. васиковских методов.
← →
lord vader (2004-09-18 20:18) [11]идея простая, на главной форме лежит моя компонента... данные находятся в TTable, в котором содержаться данные какому компоненту какой выполнить метод. эта моя компонента как бы является рассыльщиком, в который в свое время приходят данные из централизованного источника. вот поэтому я и ищу и нахожу нужную компоненту, чтобы выполнить конкретный метод. По другому пока реализацию не вижу, и так будет работать, как я уже описал выше, но хочется услышать что посоветуют другие
← →
Alx2 © (2004-09-18 20:21) [12]>lord vader (18.09.04 20:18) [11]
>данные находятся в TTable, в котором содержаться данные какому
>компоненту какой выполнить метод
Этот подход чем был вызван?
← →
lord vader (2004-09-18 20:25) [13]мне так удобнее через TTable организовывать поток, добавлять, удалять отработавшие записи, с файлом париться дольше...
← →
Alx2 © (2004-09-18 20:31) [14]>lord vader (18.09.04 20:25) [13]
Сорри, исходной задачи я так не увидел (задачи, которая вынудила передавать такие "рукописи" в приложение).
Я просто впервые встречаюсь с таки решением и не могу представить себе что его могло вызвать.
← →
Defunct © (2004-09-18 20:34) [15]lord vader (18.09.04 20:18) [11]
Итак, есть 2 приложения. В одном располагается таблица доступных методов. Второе приложение содержит реализацию этих методов. Пока верно интерпретирую?
Делаем так: общая база данных с таблицей доступных методов, к ней подключены оба приложения, в таблице хранятся идентификаторы методов и имена (имена используются только для отображения юзеру). Приложение 2, в котором находится реализация, при инициализации динамически создает N объектов и инициализирует их методами из таблицы методов БД.
Пользователь выбирает в приложении 1 метод X по имени, идентификатор Y метода X передается приложению 2. В приложении 2 в массиве либо в списке объектов ищется объект с полученным от приложения 1 идентификатором Y. Нашли - запускаем его метод, не нашли - ничего не делаем.
Еще вариант:
В вашем приложении создаем список компонент участвующих в работе. Этот список наделяем возможностью запуска метода по имени/коду.
Еще вариант:
Централизованный источник отправляет, код метода. Ваше приложение каждому коду сопоставляет отдельный метод (т.е. таблица код/указатель на метод).
← →
lord vader (2004-09-18 20:57) [16]БЛАГОДАРЮ товарища, Defunct!!!
Я подумаю над вашим вариантом решения задачи.
← →
jack128 © (2004-09-18 21:04) [17]
function GetComponent(CompName: string): TComponent;
var
FormName, ComponentName: string;
i: Integer;
begin
Result := nil;
FormName := copy(CompName, 1, pos(".", CompName) - 1);
if FormName = "" then Exit;
ComponentName := copy(CompName, Length(FormName) + 2, Length(CompName));
if ComponentName = "" then exit;
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i].Name = FormName then
begin
Result := Screen.Forms[i].FindComponent(ComponentName);
Exit;
end;
end;
← →
lord vader (2004-09-18 21:20) [18]Ого! Спасибо jack128, у меня что-то было подобное... только не до конца реализованное. Очень признателен за это! И вообще всему народу кто здесь обитает.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c