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: 322
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Fenster nicht zweimal öffnen [erledigt]

Beitrag von Wolfgang_B » Mi, 12. Feb 2020 17:38

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.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2569
Registriert: Fr, 08. Feb 2008 21:29

Re: Fenster nicht zweimal öffnen

Beitrag von georg » Mi, 12. Feb 2020 17:44

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 322
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B » Mi, 12. Feb 2020 17:49

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.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2569
Registriert: Fr, 08. Feb 2008 21:29

Re: Fenster nicht zweimal öffnen

Beitrag von georg » Mi, 12. Feb 2020 20:53

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 322
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B » Do, 13. Feb 2020 10:17

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.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7874
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Fenster nicht zweimal öffnen

Beitrag von Tom » Do, 13. Feb 2020 11:33

Ä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: 15277
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Fenster nicht zweimal öffnen

Beitrag von Martin Altmann » Do, 13. Feb 2020 11:44

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
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7874
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Fenster nicht zweimal öffnen

Beitrag von Tom » Do, 13. Feb 2020 11:50

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: 1729
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Fenster nicht zweimal öffnen

Beitrag von Werner_Bayern » Do, 13. Feb 2020 12:05

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 euch

Werner

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 322
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B » Do, 13. Feb 2020 12:35

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.

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1729
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Fenster nicht zweimal öffnen

Beitrag von Werner_Bayern » Do, 13. Feb 2020 14:26

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

Werner

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 322
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: Fenster nicht zweimal öffnen

Beitrag von Wolfgang_B » Do, 13. Feb 2020 18:17

stimmt, geht!! :banghead:

Danke
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12254
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Fenster nicht zweimal öffnen

Beitrag von AUGE_OHR » Fr, 14. Feb 2020 5:57

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