Testing, if form exists

From Free Pascal wiki
Revision as of 07:36, 19 November 2013 by Windsurferme (talk | contribs)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Sometimes a form may be launched from several places in a program. If it already exists, it only needs to be brought to the front. If not, it needs to be created.

One way to do this is to use a global boolean variable which is set to true or false as the form is created or destroyed.

Another way is to use a function as below.

These functions are copied from forum discussions.

How to list all data modules opened in an Application? [1]

function FindForm(const aClass:TClass):TForm;
var
  I: Integer;
begin
  for I := 0 to Screen.FormCount -1 do
    if Screen.Forms[I].ClassType = aClass then begin
      Result := Screen.Forms[I];
      Break;
    end;
end;

Call it with:

if FindForm(TMyForm) <> nil then MyForm.Show
else 
begin
  MyForm := TMyForm.Create(Application);
  MyForm.Show;    
end;

Use CloseAction := caFree in the form's OnClose event.