Показать сообщение отдельно
  #2  
Старый 04.08.2009, 09:00
PiboDIE PiboDIE вне форума
Прохожий
 
Регистрация: 17.06.2009
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от mskvkin
Мне необходимо со всеми компонентами определенного типа выполнить одно и тоже действие при этом хочу написать уникальную процедуру которая бы получала имя формы

Код:
procedure TForm1.Update_Table_Query(formName :TForm);
var
  i: Integer;
begin
  for i := 0 to formName.ComponentCount-1 do
    begin
      if (formName.Components[i] is TTable) then
        begin
          TTable(formName.Components[i]).Refresh;//Обновляем
        end;
    end;
end;

как мне оптимизировать код так чтобы при вызове процедуры не нужно было указывать имя формы вот в таком виде:

Form1.Update_Table_Query(Form2);

а можно было бы указать это примерно в таком виде:

Form1.Update_Table_Query(form.name);
где form.name имя нужной нам формы если я так пишу то при компиляции выдается сообщение :
[DCC Error] Unit15.pas(57): E2010 Incompatible types: 'TForm' and 'TComponentName'

как мне приобразовать типы или кто нибудь подскажите тогда как это же можно реализовать по другому

Заранее огромное спасибо!!!

Попробуй
Код:
TForm1.Update_Table_Query(form: TObject);
...
for i := 0 to (form as TForm).ComponentCount-1 do
...
Только зачем имя формы, если процедура принадлежит вполне конкретной форме? Если эта процедура должна работать с разными формами, то её лучше вынести в отдельный модуль (общий для всех форм) и при вызове в какой-либо форме обращаться к процедуре так
Код:
Update_Table_Query(CurrentFormVariable);
Если вызов процедуры будет происходить только из процедур, принадлежащих непосредственно форме (в процедурах/функциях кнопок и других компонент лучше всетаки использовать переменную, описывающую форму), то "CurrentFormVariable" можно заменить на "self".

Если Вам всеже нужен вариант обращения к форме непосредственно по имени формы, то могу только направить по следующему пути: передавать процедуре имя формы в формате строки (FormName: string) и, соответственно перед работой с элементами формы, её необходимо найти по этому имени (на память подсказать не могу).
Ответить с цитированием