Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
8-1085232886
Вадим
2004-05-22 17:34
2004.10.03
Декодирование DTFM


4-1093427216
beatles_bntu
2004-08-25 13:46
2004.10.03
Системный запуск приложения под XP


6-1090999597
wHammer
2004-07-28 11:26
2004.10.03
Отправка почты


6-1090494539
Hereticsoul
2004-07-22 15:08
2004.10.03
Скачать страницу полностью...


3-1094469957
Yrtimd
2004-09-06 15:25
2004.10.03
синхронизация таблиц





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