Einzelnen Beitrag anzeigen

Bernd Ua

Registriert seit: 10. Nov 2003
Ort: Lindhorst
87 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 07:59
Semaphoren und Mutexes um ein zweites öffnen eines Formulars zu verhindern,
finde ich ein bisschen wie mit "Kanonen auf Spatzen schiessen".
Die sind sinnvoll für prozessübergreifende Geschichten (und haben beim Zugriff
entsprechenden Overhead).

Da der Benutzer es ja irgendwie aufmachen können muss, wäre wohl das sinnvollste
diesen Menüpunkt einfach zu deaktivieren, wenn das Formular erzeugt wurde.

Alternativ kann man Screen.Forms und Klassenrefrenztypen verwenden um eine Instanz
eines Formulars bei Bedarf sichtbar zu machen oder auch zu erzeugen.

Im code könnte das für einen beliebiges Formulartyp so aussehen:

Delphi-Quellcode:
function GetSingleForm (aFormTyp : TFormClass): TForm;
var
  i : Integer;
begin
  Result := nil;
  for i :=0 to Screen.FormCount-1 do
    begin
      if Screen.Forms[i] is aFormTyp then
        begin
          Result := Screen.Forms[i];
          Break;
        end;
    end;
  if not Assigned(Result) then
    Result := aFormTyp.Create(Application.Mainform);
  if not Result.Visible then
    Result.Show;
end;
Aufruf dann so :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  aForm : TForm;
begin
  aForm := GetSingleForm(TForm2);
end;
Noch sauberer wäre es natürlich den Singtonpattern für das Formular zu implementieren <g>.

Zitat:
Ich schreibe gerade ein Programm, dass mehrere Benutzer zur gleichen Zeit übers Netzwerk aufrufen können.
Und BTW, ob das Programm vom Netzwerk oder lokal gestartet wird ist eh wumpe. Keine
der Methoden im Thread funktioniert netzwerkübergreifend.

Bernd
Bernd Ua
  Mit Zitat antworten Zitat