Цитата:
Сообщение от 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) и, соответственно перед работой с элементами формы, её необходимо найти по этому имени (на память подсказать не могу).