Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2013, 15:05   #1
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию Обращение к компонентам формы приложения из dll

В общем, есть программа, есть для неё длл. Процедура из длл должна изменять данные в необходимом мне memo. Но вот загвоздка, я не могу передать данные в программу, пишет ошибку:
Код:
procedure WP_UP(WP_Main: TForm);
begin
 {...}
    WP_Main.Memo1.Lines.Add(WP_HTTP.Response.Location);
 {...}
end;

=========
[DCC Error] wplib.common.dpr(39): E2003 Undeclared identifier: 'Memo1'
[DCC Error] wplib.common.dpr(39): E2066 Missing operator or semicolon
Т.е. он распознает ( в uses есть "Forms") форму, но не распознает сам memo на ней. Путём нехитрых телодвижений вычислил, что больше ошибок в процедуре нет, только эта.


Что бы проверить "правильность вызываемости" я сделал тестовую процедуру:
Код:
procedure WP_UP(WP_Main: TForm);
begin
  ShowMessage(WP_Main.Caption);
end;
С ней всё в порядке, выводит месагу с тайтлом формы.


Выручайте люди добрые.
EaRLL вне форума Ответить с цитированием
Старый 12.01.2013, 15:12   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

а если попробовать искать компонент TMemo на форме и в случае если компонент найден, то добавлять строку?
maLoy*508 вне форума Ответить с цитированием
Старый 12.01.2013, 15:16   #3
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от maLoy*508 Посмотреть сообщение
а если попробовать искать компонент TMemo на форме и в случае если компонент найден, то добавлять строку?
Это каким образом?

"Помедленнее пожалуйста, я записываю"
EaRLL вне форума Ответить с цитированием
Старый 12.01.2013, 15:29   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но не распознает сам memo на ней.
Правильно делает. Класс TForm не снабжен компонентами. Это голая форма. Тебе нужно передавать туда либо переменку своей производной формы, либо:
Код:
procedure WP_UP(WP_Main: TForm);
var i:integer;
begin
 {...}
with WP_Main do
  for i:=0 to ComponentsCount-1 do
   if (Component[i] is TMemo)and(TMEmo(Component[i]).name='Memo1') then begin
    TMEmo(Component[i]).Lines.Add(WP_HTTP.Response.Location);
    break; 
   end;
 {...}
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 15:32   #5
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

Цитата:
Сообщение от EaRLL Посмотреть сообщение
Это каким образом?

"Помедленнее пожалуйста, я записываю"
Виталий, уже показал куском кода то что я имел ввиду -)
maLoy*508 вне форума Ответить с цитированием
Старый 12.01.2013, 15:58   #6
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Правильно делает. Класс TForm не снабжен компонентами. Это голая форма. Тебе нужно передавать туда либо переменку своей производной формы, либо:
Код:
procedure WP_UP(WP_Main: TForm);
var i:integer;
begin
 {...}
with WP_Main do
  for i:=0 to ComponentsCount-1 do
   if (Component[i] is TMemo)and(TMEmo(Component[i]).name='Memo1') then begin
    TMEmo(Component[i]).Lines.Add(WP_HTTP.Response.Location);
    break; 
   end;
 {...}
end;
Про класс - да, я понял про это когда написал сообщение)

А вот по твоему коду (у тебя несколько шибок синтаксических в коде - правильнее ComponentCount и Components ): я вставил, всё собралось, но вот упорно не хотело вставлять строки мне в мемо.
Путём нехитрых телодвижений я выяснил, что у меня в Application.ComponentCount только одна запись. Я её вывел
Код:
ShowMessage(TObject(Application.Components[0]).ClassName);
И вот что он мне выдал: THintWindow (т.е. никаких больше компонентов, в том числе и мемо и др не найдёт)
EaRLL вне форума Ответить с цитированием
Старый 12.01.2013, 17:16   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Application.ComponentCount при каких делах? Речь то о WP_Main идет, в нем и искать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.01.2013, 17:21   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у тебя несколько шибок
Ну будем считать что я слегка "шибанутый" )
Цитата:
THintWindow (т.е. никаких больше компонентов, в том числе и мемо и др не найдёт)
Ты форму пытаешся из хендла окна высосать? SpyХХ тебе в помошь, дабы узнать какие окна содержит приложение, которое ты кусать собрался.
Цитата:
Аватар
Кстати да. Именно поэтому SpyXX тебе в руки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 17:40   #9
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию

Немного переделал, получилось вот так
Код:
with WP_Main do
  for i:=0 to ComponentCount-1 do
   begin
     if (TObject(Components[i]).ClassName = 'TMemo') and (TMemo(Components[i]).name='Memo1') then begin
      TMemo(Components[i]).Lines.Add(log_string);
      break;
     end;
   end;
всё работает, по такому "(Component[i] is TMemo)" ему не захотелось.
Но вот такой способ меня немного омрачает, ведь пока на форме два, три десятка компонентов - это относительно быстрый способ, а если там добрая сотня или две - искать будет день и ночь.

Последний раз редактировалось EaRLL; 12.01.2013 в 17:43.
EaRLL вне форума Ответить с цитированием
Старый 12.01.2013, 17:54   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
искать будет день и ночь.
Откуда такие сведения? Экспериментально проверял?
Цитата:
там добрая сотня или две
Значит это не приложение а бурда на постном масле.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как использовать в коде DLL компоненты из формы основного EXE приложения? calypso Общие вопросы Delphi 7 03.12.2012 10:15
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Обращение к динамически созданным компонентам. Lime Общие вопросы Delphi 21 15.07.2009 01:17
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00
Обращение к компонентам из цикла satana Общие вопросы Delphi 4 16.07.2007 12:16