Seite 1 von 1

Fenster nicht zweimal öffnen [erledigt]

Verfasst: Mi, 12. Feb 2020 17:38
von Wolfgang_B
Hallo,
wie kann ich verhindern, daß ein Benutzer ein Child-Fenster per pushbutton 2 oder mehrmals öffnet?

Re: Fenster nicht zweimal öffnen

Verfasst: Mi, 12. Feb 2020 17:44
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.

Re: Fenster nicht zweimal öffnen

Verfasst: Mi, 12. Feb 2020 17:49
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() }

Re: Fenster nicht zweimal öffnen

Verfasst: Mi, 12. Feb 2020 20:53
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.

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 10:17
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.

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 11:33
von Tom
Äh. Wenn ein Child-Fenster nur einmal geöffnet werden soll, erzeugt man es modal. Dann hat es diese Eigenschaft automatisch.

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 11:44
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

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 11:50
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.

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 12:05
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()}

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 12:35
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 ..

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 14:26
von Werner_Bayern
Weil Du in MIT_OBJ() irgendwas damit machst. Brauchst Du aber vermutl. dadurch nicht mehr.

Re: Fenster nicht zweimal öffnen

Verfasst: Do, 13. Feb 2020 18:17
von Wolfgang_B
stimmt, geht!! :banghead:

Danke

Re: Fenster nicht zweimal öffnen

Verfasst: Fr, 14. Feb 2020 5:57
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