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