Fenster nicht zweimal öffnen [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Fenster nicht zweimal öffnen [erledigt]

Beitrag von Wolfgang_B »

Hallo,
wie kann ich verhindern, daß ein Benutzer ein Child-Fenster per pushbutton 2 oder mehrmals öffnet?
Zuletzt geändert von Wolfgang_B am Sa, 15. Feb 2020 12:40, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von georg »

Hallo, Wolfgang -


z.B. indem Du den PushButton solange deaktivierst, wie das Fenster offen ist. Oder Du verwendest einen Zähler in der Routine, die das Fenster anzeigt. Ist der Zähler > 0, gibt es eben kein neues Fenster.

Das Problem ist eben immer nur, dass man diese Schalter überwachen und entsprechend wieder zurücksetzen muss.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B »

genau, daran scheitere ich gerade :(

PB ausblenden, kein Problem. Aber wieder einblenden ... Ich habe noch nicht begriffen, wo man landet, wenn man aus einem Browse ein anderes Fenster eröffnet und dieses wieder schließt ...

Code: Alles auswählen

     oXbpV := XbpPushButton():new( oXbp9, , {10,y}, {135,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
     oXbpV:caption := "test"
     oXbpV:tabStop := .T.
     oXbpV:create()
     oXbpV:activate := {||  MIT_OBJ( aMit, oXbpV) }    
     
 
 FUNCTION MIT_OBJ( aMit, oXbpV )    
 
 		oBrowse:itemSelected := {| uNIL1, uNIL2, self | OBJ_EDIT2("E", aMit[1], VAL(oBrowse:getData()[8]) )} 
 		
RETURN( NIL ) 		

 
     
Nachtrag:
habs jetzt geschafft!! Weis zwar nicht ob das besonders elegant ist, aber es funktioniert
oDlgV:close := {|| oDlgV:destroy(), oXbpV:visible := .T., oXbpV:configure() }
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von georg »

Hallo, Wolfgang -


ich arbeite z.B. sehr viel mit Threads. In einem meiner Programme wäre das "neue" Fenster in einem Thread untergebracht. Wenn Du zum Thread-Start einen Link auf den PushButton übergibst:

Code: Alles auswählen

FUNCTION EinFenster(oButton)
  Local oThread
  oThread := Thread():new()
  oThread:start({|| EinFensterAuf(oButton)}}
RETURN(.T.)

FUNCTION EinFensterAuf(oButton)
  ...
  oButton:disable()
  ... viel Code, und ein Event-Loop, dann, am Ende:
  oButton:enable()
RETURN(.T.)
Zumindest sinngemäss, ich denke, Du verstehst die Idee dahinter.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B »

Hallo Georg,
kann ich nachvollziehen, obwohl ich mit dem Thema Threads immer noch etwas im Nebel stochere.

Aber trotzdem danke für die Tipps.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fenster nicht zweimal öffnen

Beitrag von Tom »

Äh. Wenn ein Child-Fenster nur einmal geöffnet werden soll, erzeugt man es modal. Dann hat es diese Eigenschaft automatisch.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fenster nicht zweimal öffnen

Beitrag von Martin Altmann »

Tom,
macht aber - je nach Aufgabenstellung - keinen Sinn, weil man dann nicht mehr bei angezeigtem Child-Fenster in das Hauptfenster zurück kommt :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fenster nicht zweimal öffnen

Beitrag von Tom »

Dann sollte die Frage nach der Aufgabenstellung beantwortet werden. Wenn verhindert werden soll, dass das Fenster ein zweites Mal geöffnet werden kann, weil vor jedem weiteren Schritt erst einmal dieser beendet werden muss, dann wäre Modalität das Mittel der Wahl. Wenn es nur darum geht, dass nicht zweimal parallel das gleiche gemacht werden kann, muss mit den hier vorgeschlagenen Mitteln gearbeitet werden. Wobei ich es für kritisch halte, ein Objekt aus einem anderen Thread heraus zu manipulieren (Georgs Vorschlag). Denn dieser andere Thread läuft asynchron. Der Starthread kann vor ihm beendet werden.
Herzlich,
Tom
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von Werner_Bayern »

Servus Wolfgang,

warum nicht einfach so:

Code: Alles auswählen

oXbpV:activate := {|uNIL1, uNIL2, self|self:disable(), MIT_OBJ( aMit, oXbpV), self:enable()}
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B »

Werner,

der PB wird zwar ausgeblendet, wenn ich aber das Fenster, welches mit MIT_OBJ() geöffnet wurde wieder schließe, erscheint der Button nicht mehr ..
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von Werner_Bayern »

Weil Du in MIT_OBJ() irgendwas damit machst. Brauchst Du aber vermutl. dadurch nicht mehr.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B »

stimmt, geht!! :banghead:

Danke
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Fenster nicht zweimal öffnen

Beitrag von AUGE_OHR »

hi,

schon mal an einen "Schalter" gedacht :idea:

Code: Alles auswählen

STATIC lRunning := .F.  

   IF lRunning = .T.
      RETURN
   ELSE
      lRunning := .T.
      // hier der Code
      lRunning := .F.  
   ENDIF
gruss by OHR
Jimmy
Antworten