Difference between revisions of "Testing, if form exists"

From Free Pascal wiki
m
Line 1: Line 1:
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.
+
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.
+
This method is only needed if the form is not auto created. (It will be listed under Project|Project Options|Forms|Available forms.)
  
Another way is to use a function as below.
+
The easiest way is:
  
These functions are copied from forum discussions.
 
 
How to list all data modules opened in an Application? [http://forum.lazarus.freepascal.org/index.php/topic,20141.msg115801.html#msg115801]
 
 
<syntaxhighlight>
 
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;
 
</syntaxhighlight>
 
Call it with:
 
 
<syntaxhighlight>
 
<syntaxhighlight>
if FindForm(TMyForm) <> nil then MyForm.Show
+
if MyForm <> nil then MyForm.Show
 
else  
 
else  
 
begin
 
begin
Line 32: Line 15:
  
 
Use CloseAction := caFree in the form's OnClose event.
 
Use CloseAction := caFree in the form's OnClose event.
 +
 +
This method is taken from forum discussions.
  
 
[[Category:Code]]
 
[[Category:Code]]
 
[[Category:LCL]]
 
[[Category:LCL]]
 
[[Category:Forms]]
 
[[Category:Forms]]

Revision as of 08:37, 23 November 2013

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.

This method is only needed if the form is not auto created. (It will be listed under Project|Project Options|Forms|Available forms.)

The easiest way is:

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

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

This method is taken from forum discussions.