Testing, if form exists

From Lazarus wiki
Revision as of 22:09, 18 November 2013 by BigChimp (talk | contribs) (I think you meant forum discussions ;) Thanks for the page!)
Jump to navigationJump to search

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[vCnt].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 onClose event.