Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form mehrmals öffnen verhindern (https://www.delphipraxis.net/12918-form-mehrmals-oeffnen-verhindern.html)

Micha 6. Dez 2003 15:35


Form mehrmals öffnen verhindern
 
Ich schreibe gerade ein Programm, dass mehrere Benutzer zur gleichen Zeit übers Netzwerk aufrufen können.

In dem Programm sind mehrere Forms. Ein Benutzer darf aber eine Form nur einmal aufmachen. Wenn er das gleiche Formular nochmals öffnen wollte, so soll eine Fehlermeldung erscheinen.

Weiß jemand, wie ich das anstellen soll?

Dankeschön im Voraus.

Alexander 6. Dez 2003 20:04

Re: Form mehrmals öffnen verhindern
 
Du könntest dein Fenster modal anzeigen lassen (Form1.ShowModal)

SirThornberry 6. Dez 2003 23:00

Re: Form mehrmals öffnen verhindern
 
im OnCreate einen Mutex erzeugen (CreateMutex)

Hansa 6. Dez 2003 23:13

Re: Form mehrmals öffnen verhindern
 
Zitat:

Zitat von Micha
...In dem Programm sind mehrere Forms. Ein Benutzer darf aber eine Form nur einmal aufmachen...

willst Du die Forms von der Benutzung her eingrenzen, oder das Programm selbst ? Ich habe das so gelöst, daß im Zweifelsfall die Form wieder geöffnet ist, genau so wie sie vorher war. Wenn eine aus Versehen 2-mal geöffnet wird, das geht dann eben nicht. Man landet dann immer wieder bei der geöffneten, bis sie geschlossen wird. Stichwort : Semaphoren.

Bernd Ua 7. Dez 2003 07:59

Re: Form mehrmals öffnen verhindern
 
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

SirThornberry 7. Dez 2003 09:59

Re: Form mehrmals öffnen verhindern
 
Es gäbe noch die Möglichkeit sich in ner Variablen zu merken ob das formular schon offen ist oder nicht. Oder willst du das nur eine person im ganzen netzwerk das formular öffnen kann? dann bleibt wohl nur noch ein server als lösung der kontaktiert wird und ausgibt ob das formular schon offen ist

Hansa 7. Dez 2003 11:51

Re: Form mehrmals öffnen verhindern
 
Bei mir war das Problem eigentlich nur, daß die Leute das Programm minimiert haben und es nicht sahen. Und dann wurde behauptet, irgendwelche Fehler kämen. Die kamen ja auch in der Form "Zugriff nicht möglich, weil gerade ein anderer Prozeß darauf zugreift". :lol: Was ein Netzwerk betrifft: Lege doch einfach eine Datei auf dem Server an, wenn das Formular geöffnet wird und lösche sie anschließend wieder. Ist diese da, so verhinderst Du den Zugriff, ansonsten läßt Du ihn zu.

Micha 7. Dez 2003 11:53

Re: Form mehrmals öffnen verhindern
 
So, ich meld mich auch mal wieder. *g*

Zuerstmal:
Nein, die Benutzer dürfen alle gleichzeitig das Formular aufrufen. Nur ein einzelner Benutzer darf es nicht zweimal aufmachen.


ShowModal: Nein, das ist für mein Prog nicht so toll.

CreateMutex: Konnte in der Delphi-Hilfe nichts dazu finden. Was ist das?

Ich werde erstmal die Funktion von Bernd Ua implementieren.

Vorerst möchte ich mich bei euch für eure Unterstützung bedanken.
DANKESCHÖN

Uncle Cracker 7. Dez 2003 11:59

Re: Form mehrmals öffnen verhindern
 
Für CreateMutex musst du mal in der DP suchen, was das ist:

Hier im Forum suchenCreateMutex


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz