Focus setzen [ERLEDIGT]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Focus setzen [ERLEDIGT]

Beitrag von Ewald »

Ich bräuchte mal paap leichte Schläge auf den Hinterkopf ;-)
Es gibt in einer Gruppe 2 Eingabefelder und zwei Buttons.
Ich möchte, das nach dem Verlassen des ersten SLE durch "enter" der erste Button den Focus erhält.
Nach dem Verlassen des zweiten SLE soll der Focus automatisch auf den zweiten Button springen.
Die Buttons sollen nicht automatisch gedrückt werden.
Meine Versuche mit setappfocus, dc_setfocus, dc_setappfocus, valid, eval etc. habe ich hier mal rausgelassen, um
keine Verwirrung zu stiften. Kurz gesagt, ich bekomme das nicht hin, ohne mit Funktionen zu arbeiten,
die ich mit valid aufrufe und in denen ich dann den focus auf die Buttons gesetzt habe.
Das ist doch eigentlich 0815 - oder ?

Code: Alles auswählen

proc main
local getlist:={},var1:=space(10),var2:=space(10)
dcgroup og1 size 10,20
dcsetparent og1

@ 1,1 dcsay "Var 1" get var1  
@ 2,1 dcsay "Var 2" get var2

@ 1,15  dcpushbutton caption "Knopf1" size 10,1 ;
       action {||nil}
       
@ 2,15 dcpushbutton caption "Knopf2" size 10,2 ;
       action {||nil}
       
dcread gui fit
return  
Zuletzt geändert von Ewald am Fr, 12. Jul 2013 17:02, insgesamt 1-mal geändert.
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: Focus setzen

Beitrag von Manfred »

Fehlt da nicht TABSTOP?
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
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: Focus setzen

Beitrag von Tom »

Hallo, Ewald.

Eigentlich wäre der LOSTFOCUS-Slot das Mittel der Wahl:

Code: Alles auswählen

@ 1,1 DCGET cTEST LOSTFOCUS {||SetAppFocus(oButton)}

@ 2,1 DCPUSHBUTTON CAPTION 'Test' SIZE 5,1 OBJECT oButton
Aber. Es gibt schon seit geraumer Zeit Probleme mit LOSTFOCUS, weil Roger bei KillInputFocus (das ist letztlich der Slot, der von LOSTFOCUS verwendet wird) eine Menge macht, beispielsweise, damit der Fokus wieder auf einem XbPart landet, wenn man in eine andere App gewechselt ist. Deshalb gibt es seit Build soundso die ENTERTAB-Klausel für DCGETOPTIONS. Das hier funktioniert:

Code: Alles auswählen

FUNCTION MeinTest()
LOCAL GetList := {}, GetOptions := {}, cTest1 := Space(30), cTest2 := Space(30), oButt1, oButt2

DCGET OPTIONS ENTERTAB // WICHTIG!

@ 1,1 DCGET cTest1 LOSTFOCUS {||SetAppFocus(oButt1)}
@ 2,1 DCGET cTest2 LOSTFOCUS {||SetAppFocus(oButt2)}

@ 4,1 DCPUSHBUTTON CAPTION 'Test 1' SIZE 10,1 OBJECT oButt1
@ 5,1 DCPUSHBUTTON CAPTION 'Test 2' SIZE 10,1 OBJECT oButt2

DCREAD GUI ADDBUTTONS FIT OPTIONS GetOptions
RETURN NIL
Es kann aber sein, dass sich der Dialog dadurch an anderer Stelle etwas unerwartet verhält.
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Focus setzen

Beitrag von Ewald »

Hallo Tom,
3 Betablocker später ...
Dein Quellcode ging, aber nur bis ich ihn in mein Programm eingearbeitet habe. Dann war es vorbei.
Bis ich gemerkt habe, das mir das kleine Wörtchen "ADDBUTTONS" in meinem Programm fehlt, da ich mir
alle Buttons selbst schnitze. Ohne diesen Parameter funktioniert das mit dem Focus dann leider nicht mehr :-(
Auch nicht im dem Beispielcode.
Kann ich ADDBUTTONS verwenden und irgendwo sagen, das ich damit keine Buttons aufrufen will ?
Hört sich blöd an, ist es auch ...
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Focus setzen

Beitrag von Ewald »

Hallo Tom,
irgendwie bin ich nach dem grandiosen Anfangserfolg in dieser Baustelle hängen geblieben. Wie gesagt funktioniert das mit dem Fokus (beim mir) nur, wenn ich mit dem Parameter ADDBUTTONS im read arbeite. Das setzt aber voraus, das ich auch automatisch Buttons einfügen will. Will ich aber nicht. Die kämen zusätzlich zu den von mir angelegten Buttons und werden absolut nicht benötigt. Hast du noch eine Idee wie ich das Problem los werde ?
Gruß
Ewald
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: Focus setzen

Beitrag von Tom »

Kannst Du mal ein Beispiel bauen, das nicht funktioniert?
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Focus setzen

Beitrag von Ewald »

Hallo Tom,
danke das du dich da noch mal draufstürzt. Dann nehme ich doch sofort das Beispiel von oben.
MIt dem Parameter ADDBUTTONS im read funktioniert der Focus, sie wie jetzt (ohne Addbuttons) leider nicht.
Gruß
Ewald

Code: Alles auswählen

#include 'dcdialog.ch'
proc main
LOCAL GetList := {}, GetOptions := {}, cTest1 := Space(30), cTest2 := Space(30), oButt1, oButt2

DCGET OPTIONS ENTERTAB // WICHTIG!

@ 1,1 DCGET cTest1 LOSTFOCUS {||SetAppFocus(oButt1)}
@ 2,1 DCGET cTest2 LOSTFOCUS {||SetAppFocus(oButt2)}

@ 4,1 DCPUSHBUTTON CAPTION 'Test 1' SIZE 10,1 OBJECT oButt1
@ 5,1 DCPUSHBUTTON CAPTION 'Test 2' SIZE 10,1 OBJECT oButt2

DCREAD GUI  FIT OPTIONS GetOptions // ADDBUTTONS
RETURN 

proc appsys
return
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Focus setzen

Beitrag von Wolfgang Ciriack »

Hallo,
so funktioniert es bei mir:

Code: Alles auswählen

#include 'dcdialog.ch'
#include "AppEvent.ch"
proc main
LOCAL GetList := {}, GetOptions := {}, cTest1 := Space(30), cTest2 := Space(30), oButt1, oButt2

DCGET OPTIONS NOSUPERVISE

@ 1,1 DCGET cTest1 LOSTFOCUS {|| iif(DC_ReadGuiLastkey(Getlist)=xbeK_ENTER,SetAppFocus(oButt1),nil)}
@ 2,1 DCGET cTest2 LOSTFOCUS {|| iif(DC_ReadGuiLastkey(Getlist)=xbeK_ENTER,SetAppFocus(oButt2),nil)}

@ 4,1 DCPUSHBUTTON CAPTION 'Test 1' SIZE 10,1 OBJECT oButt1
@ 5,1 DCPUSHBUTTON CAPTION 'Test 2' SIZE 10,1 OBJECT oButt2

DCREAD GUI  FIT OPTIONS GetOptions
RETURN
Viele Grüße
Wolfgang
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Focus setzen [ERLEDIGT]

Beitrag von Ewald »

Danke Wolfgang,
Antworten