Schalten von Xbp

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Schalten von Xbp

Beitrag von Manfred »

Hi,
mich würde einmal folgendes interessieren, hat hier jemand irgendeine Formel, oder ein Schema, wie er Xbp enabled oder disabled im Paket und Zusammenhang bei Eingaben in einer Maske?
Also folgendes Szenario:
Es gibt eine Eingabemaske, mit entsprechenden Elementen. Sei es Pushbutton, oder Eingabefelder oder was weiß ich. Bei einer Neuerfassung, wird ein Button gedrückt, der Cursor springt ins Eingabefeld (z.B.) Jetzt soll aber gewährlsietet sein, das der User den Neubutton nicht ein weiteres Mal drücken kann. Gleichzeitig wird aber der Abbruch, oder Speichern Button aktiv. Wenn die Eingabe abgebrochen wird, dann wird der Neu Button aktiv aber der Abbruch oder Speichern Button wieder deaktiv. Anders ausgedrückt, es gibt XBP, die zu bestimmten Zeiten aktiv/inaktiv sein müssen, in Kombination mit anderen Dingen. Wie regelt ihr das, das der Überblick bei den ganzen Kombinationen nicht verloren geht, nicht jedes Element einzeln von Hand geschaltet werden muß, sondern am besten im Paket abgearbeitet wird?
Weiteres Beispiel, es kann vorkommen, das mit einem Buttondruck eine weitere Eingabemaske aufgeht, man aber verhindern muß, das die Buttons auf der Vormaske in dem Moment NICHT mehr gedrückt werden können. Sobald die letzte Maske wieder geschlossen wurde, werden die Button wieder freigegeben.
Macht ihr eine Tabelle, in der alle Kombinationen stehen, die aber zu bestimmten Zeiten ausgelöst werden, oder wie bekommt man sowas (am besten bauschal programmierbar) in den Griff?
Mal schauen, was ich jetzt wieder für ein Fass geöffnet habe. :badgrin:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Schalten von Xbp

Beitrag von Martin Altmann »

Mach es doch einfach über eine Variable (in der Klasse), in der die entsprechenden Bits ein- oder ausgeschaltet werden (ein Bit repräsentiert das enable/disable eines (oder eines Blockes von) Xbp()s).

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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

den Vorschlag habe ich schon oft gehört. Erscheint mir aber immer noch als sehr unübersichtlich. Oder kannst Du mal ein Beispiel posten?
Was mir gerade eingefallen ist, wäre ein Array in dem alles steht. Im Moment habe ich es so, das ich die Eingabefelder in einem Array habe und die Pushbutton usw. Das klappt aber nur bedingt gut. (also das Array wird druchlaufen und alles was drin steht wird enabled/disabled().
Jetzt dachte ich mir, alles was zusammen geschaltet wrden kann/muß kommt halt zusammen in ein Array und wird dann geschaltet (da wären dann die verschiedenen Kombinationen möglich). Da mir diese Idee jetzt aber zu schnell kam, durchdenke ich die nochmal.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von brandelh »

Ich mache das über eine Methode des Fensters: ::Schalten(...)
allerdings nicht übertreiben, mit der Maus kommt man immer raus aus einem Feld (außer man zwingt zum Modalen Fenster), zu viel Zwang kann keiner leiden ...

Code: Alles auswählen

*---------------------------------------------------------------------------------------- INIT
METHOD tpBeaAbRech:init( oParent, oOwner, aPos, aSize, aPP, lVisible ) // das Fenster ruft bei jedem SetInputFocus() schalten auf, da der Maus Klick etwas geändert haben könnte an den Bedingungen.
   ...
   ::SetInputFocus := {|| ::Zuruecksetzen(), ::Schalten() }

*----------------------------------------------------------------------- Zuruecksetzen()  ---------------
METHOD tpBeaAbRech:Zuruecksetzen()
   ::Berechnet := .f.                                       // solange das .f. ist, darf nicht gespeichert werden !
   ::sleRente:SetData("0")
   ::mleEK_Rech:SetData("")
   ::sleEK_Rech_AbzugBerechnet:SetData("0")
   ::sleEK_Rech_AbzugManuell:SetData("0")
   ::sleEK_Rech_AbzugBetrag:SetData("0")
   ::sleFreibetrag:SetData("0")
   ::sleEKMonatsBetrag:SetData("0")
   ::sleEKAbzug:SetData("0")
   ::sleZahlBetragMonat:SetData("0")
return nil

*----------------------------------------------------------------------------- schalten() -------
METHOD tpBeaAbRech:schalten()
   if ::SetParent():SetParent():tpEinkommen:chbSchaetzung:getData()
      ::sleEK_Rech_AbzugManuell:enable()
   else
      ::sleEK_Rech_AbzugManuell:setValue(0)
      ::sleEK_Rech_AbzugManuell:disable()
   endif
   ::ftFreibetrag:SetCaption("- Freibetrag inkl. "+nTrim(::SetParent():SetParent():tpStammdaten:sleAnzWaiseDesBerechtigten:getValue() )+" Waisen des Berechtigten:")
   SetAppFocus(::pbSave)
return nil

### die Abrechnung wird durch einen Button gestartet und prüft die Plausi aller Felder und schaltet auch Controls mit ::Schalten() ... dies wird z.B. auch bei Änderungen im Checkboxen etc. aufgerufen ...

*----------------------------------------------------------------------------- Abrechnung() -------
METHOD tpBeaAbRech:Abrechnung()

   do case      // erst auf Fehler prfen
      case empty(::SetParent():SetParent():tpRente:sleMonatsRentenBetrag:getValue())
           InfoBox("Die Seite Rente wurde noch nicht bearbeitet (Rentenbetrag = 0 ).")
           PostAppEvent( xbeTab_TabActivate, , , ::SetParent():SetParent():tpRente )
           PostAppEvent( xbeP_SetInputFocus, , , ::SetParent():SetParent():tpRente )
      case ! ::SetParent():SetParent():tpSuchen:IsValid(.t.)              // Fehler anzeigen
           PostAppEvent( xbeTab_TabActivate, , , ::SetParent():SetParent():tpSuchen )
           PostAppEvent( xbeP_SetInputFocus, , , ::SetParent():SetParent():tpSuchen )
      case ! ::SetParent():SetParent():tpStammdaten:IsValid(.t.)          // Fehler anzeigen
           PostAppEvent( xbeTab_TabActivate, , , ::SetParent():SetParent():tpStammdaten )
           PostAppEvent( xbeP_SetInputFocus, , , ::SetParent():SetParent():tpStammdaten)
      case ! ::SetParent():SetParent():tpRente:IsValid(.f.)               // Keine Fehler anzeigen, da viele Warnungen
           InfoBox("Die Seite Rente enth„lt Fehler, bitte prfen"+CRLF+;
                   "und mit 'weiter zu Einkommen' beenden, dann werden"+CRLF+;
                   "eventuelle Fehler und Warnungen angezeigt.")
           PostAppEvent( xbeTab_TabActivate, , , ::SetParent():SetParent():tpRente )
           PostAppEvent( xbeP_SetInputFocus, , , ::SetParent():SetParent():tpRente )
      case ! ::SetParent():SetParent():tpEinkommen:IsValid(.t.)           // Fehler anzeigen
           PostAppEvent( xbeTab_TabActivate, , , ::SetParent():SetParent():tpEinkommen )
           PostAppEvent( xbeP_SetInputFocus, , , ::SetParent():SetParent():tpEinkommen )

      otherwise                                                 // = keine Fehler vorhanden

           ::schalten()

           ::sleRente:setValue(::SetParent():SetParent():tpRente:sleMonatsRentenBetrag:getValue())
           ::sleEK_Rech_AbzugBerechnet:setValue(::BerechneEinkommen( NIL ))  // Bei Druckausgaben wird Druckerobject bergeben !
           ::sleEK_Rech_AbzugManuell:setValue(0)
           ::sleEK_Rech_AbzugBetrag:setValue(0)
           ::sleFreibetrag:setValue(::BerechneFreibetrag())
           ::sleEKMonatsBetrag:setValue(0)
           ::sleEKAbzug:setValue(0)
           ::sleZahlBetragMonat:setValue(0)

           ::DoSleBerechnen()

           ::Berechnet     := .t.

   endcase

return nil
Hier ein Beispiel einer Druckseite, die auf checkboxen reagiert (was wird gedruckt, wohin (combo) ) ...

Code: Alles auswählen

*----------------------------------------------------------------------------- schalten() -------
METHOD tpBeaDrucken:schalten()

   if ::setParent():setParent():tpSuchen:Bearbeitungsgrund() = "ADR"  // nur Adresse ändern
      * Grundeinstellung setzen
      ::chbKopieAkte:setData(.f.)
      ::chbKopieBerechtigter:setData(.f.)
      ::chbAlsAnlageDrucken:setData(.f.)
      ::chbKopieAdressen:setData(.f.)
      ::chbKopieAdressenL261:setData(.f.)
      ::chbRAGMitteilung:setData(.f.)
      ::chbFreierText:setData(.f.)
      ::chbSonstigerAbzug:setData(.f.)
      ::chbZahlanweisung:setData(.f.)
      ::chbZahlanweisungAdresseDrucken:setData(.t.)
      * und schützen
      ::chbKopieAkte:disable()
      ::chbKopieBerechtigter:disable()
      ::chbAlsAnlageDrucken:disable()
      ::chbKopieAdressen:disable()
      ::chbKopieAdressenL261:disable()
      ::chbRAGMitteilung:disable()
      ::chbFreierText:disable()
      ::chbSonstigerAbzug:disable()

   else

      * und wieder freigeben
      ::chbKopieAkte:enable()
      ::chbKopieBerechtigter:enable()
      ::chbAlsAnlageDrucken:enable()
      ::chbKopieAdressen:enable()
      ::chbFreierText:enable()
      ::chbSonstigerAbzug:enable()

   endif

   if ::SetParent():SetParent():tpSuchen:Bearbeitungsgrund() = "AAE"  // nur hier gibt es RAG Mitteilungen
      if ::chbRAGMitteilung:isEnabled()                               // ist schon verfügbar
         * einfach nichts machen
      else
         ::chbRAGMitteilung:enable()                                  // freischalten und
         ::chbRAGMitteilung:setData(.t.)                              // eingeschalten
      endif
   else
      ::chbRAGMitteilung:setData(.f.)
      ::chbRAGMitteilung:disable()
   endif

   if ::SetParent():SetParent():tpSuchen:Bearbeitungsgrund() = "WSV"  // Dieser Betrag wird nie zur laufenden Rente
      ::chbZahlanweisung:setData(.f.)                                 // Rente laut Schreiben von ...
      ::chbZahlanweisung:disable()
   else
      if ::chbZahlanweisung:isEnabled()                               // ist schon richtigerweise verfügbar
         * einfach nichts machen
      else
         ::chbZahlanweisung:enable()                                  // freischalten und
         ::chbZahlanweisung:setData(.f.)                              // eingeschalten
      endif
   endif

   *------------------ vor den Aktionen, damit diese den Rest erledigen -----------------------

   ::CheckBoxAktionen(::chbRAGMitteilung, ::chbRAGMitteilung:getData())
   ::CheckBoxAktionen(::chbFreierText,    ::chbFreierText:getData())
   ::CheckBoxAktionen(::chbZahlanweisung, ::chbZahlanweisung:getData())
   ::CheckBoxAktionen(::chbSonstigerAbzug,::chbSonstigerAbzug:getData())

return nil

*----------------------------------------------------------------------- CheckBoxAktionen() -----------------
METHOD tpBeaDrucken:CheckBoxAktionen(oXbp,lChecked)

   do case
      case ::chbZahlanweisung = oXbp  // bei jedem muss diese Methode hinterlegt sein .... in der INIT()
           if lChecked
              if ::setParent():setParent():tpSuchen:Bearbeitungsgrund() = "ADR"  // nur Adresse „ndern
                 ::chbZahlanweisung:disable()
                 ::chbZahlanweisungAdresseDrucken:disable()
                 ::sleZahlanweisungHinweis:enable()
                 ::sleL768ZugangGrund:disable()
                 ::sleL768ZugangMonat:disable()
                 ::sleL768AbgangGrund:disable()
                 ::sleL768AbgangMonat:disable()
                 ::sleL768AbgangBetrag:disable()
                 ::sleL768ZugangGrund:setdata("")
                 ::sleL768ZugangMonat:setdata("")
                 ::sleL768AbgangGrund:setdata("")
                 ::sleL768AbgangMonat:setdata("")
                 ::sleL768AbgangBetrag:setdata("")
                 ::sleBLZ:enable()
                 ::sleKontoNr:enable()
              else
                 ::chbZahlanweisungAdresseDrucken:enable()
                 ::sleZahlanweisungHinweis:enable()
                 ::sleL768ZugangGrund:enable()
                 ::sleL768ZugangMonat:enable()
                 ::sleL768AbgangGrund:enable()
                 ::sleL768AbgangMonat:enable()
                 ::sleL768AbgangBetrag:enable()
                 ::sleBLZ:enable()
                 ::sleKontoNr:enable()
              endif
           else
              ::chbZahlanweisungAdresseDrucken:disable()
              ::sleZahlanweisungHinweis:disable()
              ::sleL768ZugangGrund:disable()
              ::sleL768ZugangMonat:disable()
              ::sleL768AbgangGrund:disable()
              ::sleL768AbgangMonat:disable()
              ::sleL768AbgangBetrag:disable()
              ::sleBLZ:disable()
              ::sleKontoNr:disable()
           endif

      case ::chbRAGMitteilung = oXbp
           if lChecked
              ::chbKopieAdressenL261:enable()
              ::chbKopieAdressenL261:setData(.t.)
              ::sleRAG_ALT_JAV:enable()
              ::sleRAG_ALT_MonatsBetrag:enable()
              ::chbFreierText:enable()
              ::chbFreierText:setdata(.t.)
              if empty(::mleFreierText:getData())
                 ::mleFreierText:setData("Die Anpassung erfolgt unter der aufschiebenden Bedingung, "+;
                                         "dass der angenommene Anpassungsfaktor und der aktuelle "+;
                                         "Rentenwert durch den Gesetzgeber best„tigt werden.")
              endif
           else
              ::chbKopieAdressenL261:setData(.f.)
              ::chbKopieAdressenL261:disable()
              ::sleRAG_ALT_JAV:disable()
              ::sleRAG_ALT_MonatsBetrag:disable()
           endif

      case ::chbSonstigerAbzug = oXbp
           if lChecked
              ::mleSonstigerAbzugGrund:enable()
              ::mleSonstigerAbzugGrund:SetData("Der berechnete Rentenbetrag je Monat wird noch gekrzt, "+;
                                               "um ... bitte Grund eingeben ... ")
              ::sleSonstigerAbzugBetrag:enable()
           else
              ::mleSonstigerAbzugGrund:disable()
              ::mleSonstigerAbzugGrund:setdata("")
              ::sleSonstigerAbzugBetrag:disable()
              ::sleSonstigerAbzugBetrag:setdata("")
           endif

      case ::chbFreierText = oXbp
           if lChecked
              ::mleFreierText:enable()
           else
              ::mleFreierText:disable()
           endif

   endcase

return nil

### in der INIT

   ::chbZahlanweisung        := XbpCheckBox():new(::gbDruckEinstellungen, ,  { nRandLinks+10,nPosY}, {265,nSLEHoehe},  { { XBP_PP_FGCLR, GRA_CLR_BLACK } } )
   ::chbZahlanweisung:caption   := "Zahlungsanweisung (L768) "
   ::chbZahlanweisung:autoSize  := .T.
   ::chbZahlanweisung:tabStop   := .T.
   ::chbZahlanweisung:selection := .T.
   ::chbZahlanweisung:selected  := {|lChecked,uNIL,oXbp| ::CheckBoxAktionen(oXbp,lChecked) }  /// das steuert die Anzeigeänderungen, da der Inhalt hier andere steuert !

   ::chbZahlanweisungAdresseDrucken   := XbpCheckBox():new(::gbDruckEinstellungen, ,  { 210,nPosY}, {100,nSLEHoehe},  { { XBP_PP_FGCLR, GRA_CLR_BLACK } } )
   ::chbZahlanweisungAdresseDrucken:caption   := "Adresse drucken ?    Hinweis:"
   ::chbZahlanweisungAdresseDrucken:autoSize  := .T.
   ::chbZahlanweisungAdresseDrucken:tabStop   := .T.
   ::chbZahlanweisungAdresseDrucken:selection := .F.
   // hier sind keine ::CheckBoxAktionen() nötig, da dieses einfach beim Drucken abgefragt wird ohne Änderungen ...

Das ist übersichtlich und auch nach Jahren noch zu verstehen.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von Jan »

Manfred,

velleicht verstehe ich Deine Anforderung falsch. Aber ich sehe das Problem nicht.

Es gibt drei Buttons: Neu, Speichern, Abbrechen. Korrekt? Wenn ja: Beim Aufruf des Dialoges ist "Neu" enabled, die beiden anderen sind disbaled. Eventuell auch alle SLE. Drücke ich "Neu", wird "Neu" disabled, die beiden anderen enabled. Und auch alle SLE. Bei "Abbrechen" oder "Speichern" genau anders herum.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von Koverhage »

Wenn Express++ mit Hide / When
z.B. HIDE {|| ichbinschonbeineu }
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von Koverhage »

Müsstest das dann auch direkt in GetList eintragen können
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

@Hubert,
ich möchte nur verhindern, das im falschen Moment die falschen Button gedrückt werden. Eingabefelder sollen nicht betrofffen sein. Die sind entweder frei oder gesperrt. das wäre nicht das Problem.
@Jan,
Du verstehst das schon richtig, aber es können esentlich mehr Button vorhanden sein, die in verschiedenen kombinationen dis/enabled sein müssen.
@Klaus,
Du meinst verstecken, das meine ich nicht. Ich meine enable/disable
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

Hubert,
ich habe mir das mal angeschaut. Das ist mir zu kompliziert und zu unflexibel. So wie ich das erkenne, mußt Du genau wissen bei Deinen Aktionen was Du wann und wie vorhanden hast und dann schaltest. Mir schwebt eine variante vor, in der ich ein jeweils von Anwendung zu Anwendung zusammengebautes Array, oder Dataobjetc habe, in dem jeweils immer die entsprechen XBP stehen evtl. noch mit der Info, ob es aktiviert oder deaktiviert werden muß. Deshalb war/bin ich der Meinung es müßte doch unter den Mathematikern hier eine Möglichkeit geben eine Zahlenkette, oder was weiß ich zu übergeben, anhand derer die Routine weiß, was zu tun ist. 0,1,2,4,8,16 usw. Aber vielleicht bin ich jetzt auch zu weit ab vom Schuß!? Es kann doch m.E. nicht sein, das jedesmal alle Parts einzeln angegeben werden müssen wenn man sie schalten will. Das muß doch irgendwie pauschalisierter zu machen sein. Ich habe sowas derzeit schon gut umgesetzt, mit den Standardelementen, aber sobald da was zu komt....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von brandelh »

Wenn du nur buttons schaltest, kannst du ja im jeweiligen Actionslot diese aktion unterbringen.
Ich habe solche Aktionen für jedes Fenster gerne an einem Ort und das ist bei mir die Methode schalten.

Viele Wege führen nach Rom, aber dass ein Array oder sonstige BIT markierten Zeichenketten / Zahlen einfacher zu verstehen sind, halte ich für ein Gerücht ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

ich auch, aber ich möchte mal hören, was die Jungs hier so für Ideen haben. Es muß ja irgendwas geben. Alles jedesmal einzeln aufführen und schalten, dass kann es nicht sein.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von brandelh »

Wenn du viele ähnliche Fenster hast oder für Hilfsfenster kannst du ja eine Masterklasse schreiben, die du immer wieder verwendest.
Bei meinen Fenstern ist die Auswahl und Eingabemöglichkeit aber sehr abhängig von den Daten und der jeweiligen Aufgabe, da bringt das nix.
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Schalten von Xbp

Beitrag von mini990 »

Pushbutton:Disable()
Das setze ich in diesem Fall ein...

Gruß Stefan
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von Rolf Ramacher »

Hallo Manfred,

du kannst doch wenn eine neue Maske aufgeht. den odlg übergeben und dort disable() - und wenn die "neue" Maske wieder geschlossen wird.
destroy neue maske und wieder "alte "maske enable

das mache ich nur so.,
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

Hi Rolf,
wäre eine Möglichkeit. Mache ich auch teilweise so. Aber das mit der neuen Maske war nur ein Beispiel. :wink:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schalten von Xbp

Beitrag von Koverhage »

Manfred,
hatte ich doch geschrieben: mit WHEN
Schau dir in der Hilfe mal DCPUSHBUTTON an.
Entsprechend dem WHEN Status kann auch die Caption gesetzt werden.
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

ach so,
ja das habe ich ja schon. Aber es geht um die Handhabung. Ich möchte nicht jeden einzelen Pushbutton schalten müssen, sondern alles in einem Paket.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Schalten von Xbp

Beitrag von Martin Altmann »

Das kannst Du nur, indem Du allen gleichzeitig zu schaltenden Objekten den selben Parent gibst und dann den Parent enable()st oder disable()st.

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
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Schalten von Xbp

Beitrag von mini990 »

DisablePushButtons(oXbp0)


FUNCTION DisablePushButtons(cBereich)
AEVAL(cBereich:childList(),{|o| IIF(o:className()='XbpPushButton',o:disable(),NIL)}) // deaktivieren
RETURN NIL


Gruß Stefan
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: Schalten von Xbp

Beitrag von AUGE_OHR »

hi,

meine Fenster sind alle nach dem selben Prinzip aufgebaut und enthalten : cAction und nSeekRec
mit cAction sag ich doch was anliegt und gemäss User Level passieren für die cAction die entsprechenden "Schalter" Einstellungen.

---

wenn man Objecte "sammelt" dann kann man das Array als "Schalt-Zentrale" nehmen

Code: Alles auswählen

  oXbp:Create()
  AADD(aAction,{oXbp,"NEU", NeedLevel})
für einen User werden dann die entsprechenden Einstellungen vorgenommen

Code: Alles auswählen

  AEVAL( aAction,{|e| IF(e[3] > UserLevel,e:hide(),e:show()) } 
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

Hi Jimmy,
so mache ich das ja schon. Aber ich wollte keine UServerwaltung machen, sondern einfach nur eine Anwendungsverwaltung. Und da stellt sich mir halt die Frage, wenn ich die Objekte gesammelt habe, wie schalte ich sie dann bei entsprechenden Bedingungen. Es geht nicht darum, ob user darf oder nicht, sondern ob Kombination erlaubt oder nicht.
Aber ich merke schon, es gibt dafür doch keine "einfache" mathematische Lösung oder so. Da kann/muß ich so weiter machen, wie ich es bisher gemacht habe.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Schalten von Xbp

Beitrag von AUGE_OHR »

Manfred hat geschrieben: Fr, 29. Nov 2019 12:00 sondern ob Kombination erlaubt oder nicht.
ok, mal anders : du kennst es doch wenn man Konstanten "addiert", oder :?:

Also User darf : 2+4+8+32

das kannst nun wieder "zerlegen" in die einzelnen Teile.
damit hast du 30 Kombinationen (+2) mit "Schaltern"

ist dir das mathematisch genug um die Lösung zu sehen :?:
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Schalten von Xbp

Beitrag von Manfred »

so was dachte ich ja, aber da fehlt es mir einfach derzeit an Hirnschmalz das zu (de)kodieren.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Schalten von Xbp

Beitrag von Martin Altmann »

Das hatten wir doch hier schon häufiger: einzelne Bits an- bzw. abschalten (und prüfen). Das braucht man kein Gehirnschmalz. Man muss sich nur merken, welches Bit wofür gedacht war (da kann man mit #define arbeiten, um sich das leichter merken zu können.

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
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: Schalten von Xbp

Beitrag von AUGE_OHR »

Manfred hat geschrieben: Fr, 29. Nov 2019 12:42 so was dachte ich ja, aber da fehlt es mir einfach derzeit an Hirnschmalz das zu (de)kodieren.
frag mal Martin nach ARRAY, der hat mir das Prinzip damals erklärt.

also es basiert auf 2^x also max. 32 -> 30 +2
nun legst du die Konstanten (oder VAR) an und ordnest Werte zu

Code: Alles auswählen

#define IchDarfDas 2^1
#define IchDarfDies 2^2
...
#define IchDarfalles 2°30
aus der Aktion und dem Level setzt ich nun User Konstanten zusammen die ich übergebe.

---

auf der anderen Seite "zerlege" ich die grosse Zahl mit der höchsten Wert, Rest mit dem nächst niedrigeren Wert.

in diesem Code schalte ich Checkbox wenn der "Wert" (Konstante) übereinstimmt

Code: Alles auswählen

PROCEDURE SetValueCheck(nWERT,aCheckbox)
LOCAL aWert := WertType()
LOCAL nRest := 0
LOCAL i,iMax

   nRest := nWERT
   iMax  := LEN(aWert)  // Array der Konstanten Werte 2^x

// bei {|x| nRest $ x[1] } von Max nach Min
//
   FOR i = iMax TO 1 STEP -1
      IF nRest > 0
         IF aWert[i,1] $ nRest
            nRest -= aWert[i,1]

            // "check" Checkbox
            //
            aCheckbox[i]:setData(.T.)

            // "paint" Checkbox Color
            //
            IF ASCAN(aFilter,aWert[i,1]) > 0
               aCheckbox[i]:SetColorFG(GRA_CLR_BLUE)
            ELSE
               aCheckbox[i]:SetColorFG(GRA_CLR_RED)
            ENDIF
         ENDIF
      ELSE
         EXIT
      ENDIF
   NEXT
RETURN
hoffe das dir das genug Code ist um das Prinzip umzusetzen.
have fun
gruss by OHR
Jimmy
Antworten