Aktivierungs-Reihenfolge

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
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:

Aktivierungs-Reihenfolge

Beitrag von Jan »

Moin,

Kann man die Reihenfolge der Aktivierung der einzelnen XBParts verändern?

Ich erstelle die SLE und Buttons gerne in einer Schleife, in der ich ein Array mit den Angaben der einzelnen Felder und danch ein Array mit den Angabe der einzelnen Buttons abarbeite. Aber dadurch sind natürlich z. B. erst alle SLE und danach alle Buttons erzeugt worden, und eine Combobox o. ä., die ebenfalls gebraucht werden, kommt dann irgendwo dahinter. Wie schaffe ich es , daß ich diese Reihenfolge ändere?

Jan
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:

Beitrag von Martin Altmann »

Hallo Jan,
schreibe die Angaben doch in der Reihenfolge in das Arry, in der sie abgearbeitet werden sollen?
Oder mach ein zusätzliches Element dazu, in dem Du die Nummer (als wievieltes Elemt in der Z-Order das Xbase-Part stehen soll) schreibst und nach dieser Arrayspalte sortierst Du das Array, bevor Du es abarbeitest.

Viele Grüße,
Martin
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:

Beitrag von Jan »

Hallo Martin,

so spät noch unterwegs?

So einfach ist das ganze leider nicht. Ich möchte ja SLE, Buttons und Comboboxen in der Aktivierungsreihenfolge mischen. Also z.
B. nach Eingabe eines Wertes in ein SLE auf die Buttons gehen (etwa für eine Bestätigung), dann auf eine Combobox, und dann erst weiter auf die weiteren SLE.

Es würde ja schon helfen wenn es eine BeimVerlassenderSLE-Methode gäbe. In der ich sagen kann wo es denn als nächstes hingehen soll.

Übrigens: Alles SLE und Buttons haben eine eindeutige Bezeichnung.

Jan
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:

Beitrag von Martin Altmann »

Hallo Jan,
bin ja gerade erst wieder rein :)
Schau' Dir mal ::killinputfocus() an - damit kannst Du beim Verlassen des entsprechenden Xbase-Parts bestimmte Aktionen ausführen - also z.B. mit SetAppFocus() ein bestimmtes Control aktivieren.

Viele Grüße,
Martin
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:

Beitrag von Jan »

Hallo martin,

OK, das funktioniert so weit.

leider gibt es dabei ein Aber. Vielleicht habe ich irgendetwas überlesen. jedenfalls habe ich nun folgendes Problem:

Es gibt 3 SLEs. Die werden nacheinander ausgefüllt, jeweils in das nächste springe ich mit Enter. So soll es sein. Danach kommen 2 PushButtons. OK und Abbrechen. Verlasse ich den letzten SLE sollte eigentlich der OK-Button drankommen. Tut er aber nicht. Oder nur fast. Denn nach dem letzten SLE kommt nach 2 mal Enter wieder der erste SLE. Also ob ich durch beide Buttons ebenfalls durchentere. Aber die sind erstens nicht markiert und zweitens durch das Enter nicht ausgelöst worden.

Habe ich da irgendetwas falsch verstanden?

Jan
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:

Beitrag von Martin Altmann »

Hallo Jan,
poste doch mal bitte Deinen Code der drei SLE und der Pushbuttons - dann können wir mal raufschauen.

Viele Grüße,
Martin
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:

Beitrag von Jan »

Code: Alles auswählen

FUNCTION pass
LOCAL nEvent, mp1, mp2, oParent, oOwner, cId := "", cPw := ""
LOCAL oXbp, oText, oBut, oDlg, oId, oPw, oTitel, nSuche := VAL(SPACE(7))

USE passwort NEW

oDlg := MyDialog(AppDesktop(), SetAppWindow(), {(AppDesktop():CurrentSize()[1] - 320) / 2,(AppDesktop():CurrentSize()[2] - 150) / 2}, {320,150}, LanText(LAN_KENNWORTEINGABE))

oText := XbpStatic():new(oDlg, , {50,30}, {100,25}, {{XBP_PP_FGCLR, GRA_CLR_DARKBLUE}, {XBP_PP_BGCLR, GraMakeRGBColor(aBackground)}})
oText:caption := LanText(LAN_BENUTZER)
oText:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT
oText:create()

oText := XbpStatic():new(oDlg, , {50,60}, {100,25}, {{XBP_PP_FGCLR, GRA_CLR_DARKBLUE}, {XBP_PP_BGCLR, GraMakeRGBColor(aBackground)}})
oText:caption := LanText(LAN_KENNWORT)
oText:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT
oText:create()

oId := MySLE():New(oDlg,,,, {{XBP_PP_FGCLR, GRA_CLR_DARKBLUE}, {XBP_PP_BGCLR, GRA_CLR_WHITE}})
oId:BufferLength := 10
oId:datalink := {|x| IIF(x == NIL, cId, cId := x)}
oId:TabStop := .T.
oId:create(, , {170,30}, {100,25})
oId:setData()
oId:killInputFocus := {|x,y,oSLE| oSLE:getData()}

oPw := MySLE():New(oDlg,,,, {{XBP_PP_FGCLR, GRA_CLR_DARKBLUE}, {XBP_PP_BGCLR, GRA_CLR_WHITE}})
oPw:BufferLength := 10
oPw:datalink := {|x| IIF(x == NIL, cPw, cPw := x)}
oPw:Unreadable := .T.
oPw:TabStop := .T.
oPw:create(, , {170,60}, {100,25})
oPw:setData()
oPw:killInputFocus := {|x,y,oSLE| oSLE:getData()}

oBut := XbpPushButton():new(oDlg, , {50,100}, {100,25})
oBut:caption := LanText(LAN_OK)
oBut:TabStop := .T.
oBut:create()
oBut:activate := {||IIF(chkpass(cId, cPw), loeschefenster(@oDlg, .F.), appquit())}

oBut := XbpPushButton():new(oDlg, , {170,100}, {100,25})
oBut:caption := LanText(LAN_ABBRECHEN)
oBut:TabStop := .T.
oBut:create()
oBut:activate := {|| appquit()}

oDlg:show()
oDlg:setModalState(XBP_DISP_APPMODAL)
SetAppFocus(oID)

DO WHILE nEvent <> xbeP_Close
   nEvent := AppEvent(@mp1, @mp2, @oXbp)
   oXbp:handleEvent(nEvent, mp1, mp2)
ENDDO

RETURN NIL
MyDialog ist im Prinzip ein XbpDialog mit optischen Anpassungen. MySle ist grob auf Jim's SlePic aufgebaut. Also beidens nichts weltbewegendes. LanText gibt den Beschriftungstext aus in der jeweiligen Sprache (lan steht für Language, nicht für das Netzwerk).

Jan
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:

Beitrag von Martin Altmann »

Hallo Jan,
was passiert denn, wenn Du nach dem Verlassen des dritten Sle's (wenn Du also eigentlich den OK-Knopf gewählt haben müßtest) statt Enter die Leertaste drückst? Dann müßte der Knopf eigentlich "feuern".

Viele Grüße,
Martin
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:

Beitrag von Jan »

Hallo Martin,

ja, da hast Du recht. Wenn ich aus dem 3. SLE mit Enter rausgehe und dann die Leertaste drücke, wird der Pushbutton ausgelöst.

Stellen sich mir 2 Fragen:

Warum wird der Pushbutton nicht als aktiv markiert?
Warum wird der nicht wie Windows-Üblich mit Enter ausgelöst?

Sind das Fehler in den XB-Parts? Oder muß ich dem Button noch irgendetwas mit auf den Weg geben? Schließlich kann ich von einem eher unbedarften User nicht erwarten, daß er das "ahnt". Er weiß üblicherweise, daß aktive Buttons mit der gepunkteten Rundumlinie markiert sind, und das er dadrauf nur Enter drücken muß, um das Resultat zu sehen.

Jan
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:

Beitrag von Martin Altmann »

Hallo Jan,
Jan hat geschrieben:Warum wird der Pushbutton nicht als aktiv markiert?
Hmm, in der Alaska-Newsgroup lief dazu gerade eine Diskussion. Wenn Du das Problem unter XP hast, dann liegt das daran, dass dort eingestellt ist, das die Hotkeys erst bei drücken der Alt-Taste unterstrichen werden sollen! (Systemsteuerung - Darstellung und Designs - Anzeige - Darstellung - Erweitert - Unterstrichene Buchstaben für Tastaturnavigation ausblenden (mit Alt-Taste einblenden)
Jan hat geschrieben:Warum wird der nicht wie Windows-Üblich mit Enter ausgelöst?
Nun, das Verhalten so wie es sich bei Dir darstellt ist SWB - zumindest mit Xbase++. Da müßtest Du wahrscheinlich (sofern Du keine Zusatzlibs nutzt) selber drum rumprogrammieren (mit der :killinputfoucs() und xbeP_keyboard auf K_ENTER prüfen hilft vielleicht?)

Viele Grüße,
Martin
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:

Beitrag von Jan »

Moin Martin,

hast Du eigentlich einen Supporter-Vertrag mit Alaska?

Aber zum Thema:
Martin hat geschrieben:Wenn Du das Problem unter XP hast, dann liegt das daran, dass dort eingestellt ist, das die Hotkeys erst bei drücken der Alt-Taste unterstrichen werden sollen!
Nun, das kann es nicht sein. Denn wenn ich ein Fenster aufmache wo nichts anderes als ein Static als Warntext und 1 Button mit OK drin sind, der hat dann die gepunktete Linie.

Jan
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:

Beitrag von Martin Altmann »

Hallo Jan,
Jan hat geschrieben:hast Du eigentlich einen Supporter-Vertrag mit Alaska?
Neee, aber ich helfe gerne, wenn ich kann. Schließlich wurde mir auch schon oft genug geholfen.
Jan hat geschrieben:Nun, das kann es nicht sein.
Hmm, da wäre ich mir nicht so sicher! Andreas Gehrs-Pahl hat einige Szenarien beschrieben, mit denen die Hotkey-Anzeige doch funktionieren kann... Er beschreibt nämlich in dem Posting ("Focus not showing" in der Gruppe alaska-software.news.gui (Thread vom 20.12.2005)), dass alles wie gewohnt funktioniert, wenn der entsprechende Menüeintrag, der das Fenster erzeugt, mit der Tastatur aufgerufen wurde (also mit gedrückter Alt-Taste, was ja die Hotkeys anzeigt).
Nutzt man jedoch die Maus, um den Menüeintrag auszuwählen oder den Knopf zu drücken, der dann das betreffende Fenster öffnet, so sind dort die Focuslinien nicht dargestellt!
Ist das bei Dir auch so?
In einem anderen Thread hat Alain Boucher folgenden Tipp gegeben, um den aktiven Button noch mehr hervirzuheben:

Code: Alles auswählen

oXbp:SetInputFocus  := {|uNIL1,uNIL2,o|o:SetFontCompoundName("12.Arial Bold")}
oXbp:KillInputFocus := {|uNIL1,uNIL2,o|o:SetFontCompoundName("10.Arial")}
Die Schriftgrössen und -art mußt Du natürlich an Deine Schrift anpassen. Ist aber eine gute Idee: der aktive Knopf bekommt seine Caption in einer größeren und fetten Schrift angezeigt.

Viele Grüße,
Martin
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

Beitrag von Manfred »

Hi Jan, Hi Martin

gut dass ihr darüber sprecht. Ich habe die GUI Sachen unter Xbase++ nur so grob bisher überflogen. Dabei ist mir eine Sache aufgestoßen, die ich gerne nachfragen möchte:

Die Hotkey Anzeige, klappt die nur in den Pulldownmenues, oder auch auf Buttons? Bisher habe ich nichts darüber gefunden. Ich meine irgendwie bei anderen Windowsprogramm gesehen zu haben, das alle Buttons auch über eine Hotkeytaste, sprich den 1. oder x. des Caption angewählt werden können. Klärt mich bitte auf, habe ich Tomaten vor den Augen?
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:

Beitrag von Martin Altmann »

Hallo Manfred,
ich glaube nicht! Ich nutze ja XClass++ als Add-On und da belege ich immer eine Tastenkombination zusätzlich mit dem Aufruf der jeweiligen Funktion.
Wenn ich also eine Knopf "Drucken" habe dann sage ich, dass bei der Tastenkomination XbeK_ALT_R die Funktion Print() aufgerufen werden soll.
Also geht das (oder ging das zumindest) bei Xbase++ nicht so ohne weiteres.

Viele Grüße,
Martin
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

Beitrag von Manfred »

Hallo Martin,

das hatte ich mir schon gedacht, war aber der Meinung ich hätte mal wieder die Literatur nicht gründlich genug gelesen.
Recht merkwürdig, dass das (noch) nicht klappt.
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:

Beitrag von Martin Altmann »

Hallo Manfred,
sorry - es geht natürlich doch :!: :?
Analog zu den Menüeinträgen bzw. Captions der Xbase-Parts!
Hatte nur an einer falschen Stelle geschaut, an der ich ganz andere Tastenkombinationen verwendet habe.

Viele Grüße,
Martin
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

Beitrag von Manfred »

Hi Martin,

also Buttons, wie OK oder Abbruch?

Die wären dann mit ALT+O oder ALT+A oder so auszuwählen über die Tastatur?

Interessant, habe ich bisher nirgendwo lesen können. Kannst Du mir kurz einen Tipp geben, wo ich nachschauen muß. In den Beispielen, die bei Xbase++ dazugehören, habe ich nämlich nichts gefunden.
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:

Beitrag von Martin Altmann »

Jup,
oder mit Alt+K wenn Du die Caption mit "O&K" definiert hast.
Beispiel:

Code: Alles auswählen

::PushButton1  := dsPushButton():new( ::drawingArea, , {460,384}, {96,24} )
::PushButton1:caption := "A&lle übernehmen"
::PushButton1:clipSiblings := .T.
::PushButton1:activate := {|| ::allerein() }

::PushButton2  := dsPushButton():new( ::drawingArea, , {460,164}, {96,24} )
::PushButton2:caption := "Alle &entfernen"
::PushButton2:clipSiblings := .T.
::PushButton2:activate := {|| ::alleraus() }
Wie gesagt - ich nutze XClass++ - Du müßtest also statt dsPushButton() XbpPushButton() nehmen.

Viele Grüße,
Martin
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

Beitrag von Manfred »

ich habe gerade mal eben etwas ausprobiert.

Hm, die Buchstaben werde egal ob mit & oder ~ unterstrichen angezeigt, sie können aber nicht über ALT+Zeichen angewählt werden.
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:

Beitrag von Martin Altmann »

Hmm, dann scheint das tatsächlich an XClass++ zu liegen, dass es bei mir geht und somit scheint mein vorhergehender Hinweis ja leider doch richtig zu sein.
Tja, wenn dem so ist, dann den entsprechenden Tastencode in dem Eventhandler abhandeln - eine andere Idee habe ich da leider nicht.
Da kann Dir aber sicherlich jemand weiterhelfen, der viel mit der Eventqueue spielt - Dank XClass++ habe ich damit nicht viel zu tun. :)

Viele Grüße,
Martin
Antworten