Как я могу передать форму процедуре в качестве параметра и манипулировать ее свойствами? - PullRequest
1 голос
/ 11 декабря 2010

Допустим, я хочу создать процедуру в модуле, который я создал, который показывает и скрывает формы по имени (передается как параметр).

Как я могу это сделать и каков синтаксис?

Спасибо.

EDIT

Я ищу что-то вроде: Popup (FormMy, 'Show'); из моего отдела.

Ответы [ 4 ]

0 голосов
/ 11 декабря 2010
function GetFormByName(const FormName: string): TForm;
var
  i : Integer;
begin
  Result := nil;
  for i := 0 to Screen.FormCount - 1 do
  begin
    if SameText(Screen.Forms[i].Name,FormName) then
    begin
      Result := Screen.Forms[i];
      Break;
    end;
  end;
end;
0 голосов
/ 11 декабря 2010

Вы можете зацикливать свойство CustomForms (их есть CustomFormCount) глобального объекта Screen.Это просто перечисляет все формы VCL в приложении, которые могут быть тем, что вы хотите.

Если вы ищете код, он будет выглядеть примерно так:

for i := 0 to Screen.CustomFormCount-1 do begin
  Form := Screen.CustomForms[i];
  if Form.Name=TargetName then begin
    DoSomething(Form);
    break;
  end;
end;
0 голосов
/ 11 декабря 2010

Вы можете написать процедуру, подобную этой

procedure ShowMyForm(Form: TForm; Show: Boolean);
begin
  if Show then
    Form.Visible := True
  else
    Form.Visible := False;
end;

и позвонить в вашу форму по номеру ShowMyForm(MyForm, True); и быть уверенным, что ваше подразделение uses Forms

Как сказал Дэвид, вы можете сделать это

procedure ShowMyForm(Form: TForm; Show: Boolean);
begin
    Form.Visible := Show 
end;
0 голосов
/ 11 декабря 2010

Предполагая, что формы были созданы с родительской формой в качестве владельца [.Create (Self)], это должно работать:

procedure ShowFormByName(const ParentForm: TForm; const FormName: String; ShowForm: Boolean);
var
  i: Integer;
begin
  for i := 0 to pred(ParentForm.ComponentCount) do
  begin
    if (ParentForm.Components[i] is TForm) and ParentForm.Components[i].Name = FormName) then
    begin
      if ShowForm then
        TForm(ParentForm.Components[i]).Show
      else
        TForm(ParentForm.Components[i]).Hide;

      Break;
    end;
  end;
end;
...