AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form mehrmals öffnen verhindern

Ein Thema von Micha · begonnen am 6. Dez 2003 · letzter Beitrag vom 7. Dez 2003
Antwort Antwort
Micha

Registriert seit: 21. Jul 2003
Ort: Neumarkt
263 Beiträge
 
#1

Form mehrmals öffnen verhindern

  Alt 6. Dez 2003, 16:35
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.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#2

Re: Form mehrmals öffnen verhindern

  Alt 6. Dez 2003, 21:04
Du könntest dein Fenster modal anzeigen lassen (Form1.ShowModal)
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 00:00
im OnCreate einen Mutex erzeugen (CreateMutex)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 00:13
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
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, 08: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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 10:59
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 12:51
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". 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Micha

Registriert seit: 21. Jul 2003
Ort: Neumarkt
263 Beiträge
 
#8

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 12:53
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
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#9

Re: Form mehrmals öffnen verhindern

  Alt 7. Dez 2003, 12:59
Für CreateMutex musst du mal in der DP suchen, was das ist:

Hier im Forum suchenCreateMutex
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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