![]() |
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. |
Re: Form mehrmals öffnen verhindern
Du könntest dein Fenster modal anzeigen lassen (Form1.ShowModal)
|
Re: Form mehrmals öffnen verhindern
im OnCreate einen Mutex erzeugen (CreateMutex)
|
Re: Form mehrmals öffnen verhindern
Zitat:
|
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:
Aufruf dann so :
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;
Delphi-Quellcode:
Noch sauberer wäre es natürlich den Singtonpattern für das Formular zu implementieren <g>.
procedure TForm1.Button1Click(Sender: TObject);
var aForm : TForm; begin aForm := GetSingleForm(TForm2); end; Zitat:
der Methoden im Thread funktioniert netzwerkübergreifend. Bernd |
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
|
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.
|
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 |
Re: Form mehrmals öffnen verhindern
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz