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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2012, 08:40   #1
DGJ
 
Регистрация: 05.04.2012
Сообщений: 7
По умолчанию процедуры и компоненты

Добрый день
Подскажите пожалуйста, как сделать чтобы в обычной процедуре можно было использовать компоненты (кнопка, edit, chart и т.д.). При использовании их появляется ошибка undeclared identifier. А если их объявить в разделе переменных процедуры, то ошибка не появляется, но компоненты никак не реагируют на команды этой процедуры.
DGJ вне форума Ответить с цитированием
Старый 27.09.2012, 09:25   #2
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Передавай компоненты параметрамми в процедуру.
xoodoo вне форума Ответить с цитированием
Старый 27.09.2012, 09:46   #3
DGJ
 
Регистрация: 05.04.2012
Сообщений: 7
По умолчанию

Спасибо, за ответ.
я правильно понял?
Код:
procedure gg(edt1: TEdit);
begin
  edt1.Text:=' ';
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
gg(edt1);
end;
Вроде работает, но хотелось бы чтобы это было правильно.
DGJ вне форума Ответить с цитированием
Старый 27.09.2012, 09:51   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Либо так:
У каждого компонента есть свойство Tagб туда вносите уникальный номер.
Потом в зависимости от номера, программа будет знать, что этоз а компонент и что с ним делать.

Код:
procedure SameProc(Sender:TObject);
begin
  if (Sender is TComponent) then
  begin
   Case (Sender as TComponent).Tag of 
   1:
   begin
   (Sender as TEdit). ....  
   //Работа с TEdit
   end;
   2:
   begin
         (Sender as TButton). .... 
     //Работа с TButton
   end;
   3:
   begin
        (Sender as TChart). .... 
     //Работа с TChart
   end;
  end;
end;
Пример:
Код:
   SameProc(TObject(Edit1));
Не помню, надо ли там приведение типа. Но думаю, что нет т.к. все в VCL наследуется от базового TObject.
Человек_Борща вне форума Ответить с цитированием
Старый 27.09.2012, 09:58   #5
DGJ
 
Регистрация: 05.04.2012
Сообщений: 7
По умолчанию

большое спасибо
DGJ вне форума Ответить с цитированием
Старый 27.09.2012, 11:13   #6
DGJ
 
Регистрация: 05.04.2012
Сообщений: 7
По умолчанию

Код:
 procedure TMyThread1.Execute;
 begin
 while not Terminated do
 Synchronize(DoWork(cht1));
 end;

 procedure TMyThread2.DoWork(Sender:TObject);
 begin
 cht1.series[0].add(a[i]),'',clred);
 end;
А как быть в этом случае?
так делать нельзя:
Код:
TMyThread1.Execute(Sender:TObject);
а если без (Sender:TObject), то для этой процедуры неизвестен cht1
DGJ вне форума Ответить с цитированием
Старый 27.09.2012, 11:48   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Для потоков TThread рекомендуется при создании потока передать ему все необходимые параметры в его поля.
Т.е. в Вашем наследнике TMyThread2 надо добавить поле типа TChart (для примера назовём его Chart) и создание потока примерно такое:
Код:
MyThread := TMyThread2.Create(True);
MyThread.Chart := cht1; 
Mythread.Resume;
Метод синхронизации DoWork надо оставить без параметров, а вот внутри него просто обращаться к своему полю Chart.

В общем же случае можно написать и специальную функцию принимающую именно нужный тип объекта , а не TObject.
Альтернатива - объявлять не подпрограммы обращающиеся к компонентам, а сразу методы формы и тогда доступ к ним будет безо всяких проблем, ведь и метод и компонент будут принадлежать 1 классу - форме.
phomm вне форума Ответить с цитированием
Старый 27.09.2012, 11:54   #8
DGJ
 
Регистрация: 05.04.2012
Сообщений: 7
По умолчанию

Я сделал так, вроде работает
Код:
 procedure TMyThread1.DoWork;
 begin
  form1.cht1.series[0].add(a[i],'',clred);
 end;
Так делать можно?
DGJ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение имени процедуры из нутри самой процедуры RISagitov Microsoft Office Excel 8 28.09.2012 17:15
Переписать с сохранением порядка следования компоненты файла F1 в файл F2, а компоненты файла F2 - в файл Алексей_1 Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2011 13:37
Использование имени процедуры в качестве параметра другой процедуры Alexey355 Помощь студентам 1 23.04.2011 13:59
закончить выполнение процедуры из тела другой процедуры Alaysor Общие вопросы Delphi 14 23.01.2011 05:26
Управляющие структуры, процедуры Function и процедуры Sub Natalo4ka Помощь студентам 0 17.05.2010 22:00