Seite 1 von 1

Cursor auf 1. xbpSLE setzen

Verfasst: Do, 31. Mai 2007 12:16
von Alfred
Hallo,

ich habe mit dem Formdesigner(Roger hat leider noch nicht geliefert)
ein Formular entworfen.

Beim Start sehe ich den Cursor erst dann, wenn ich mit der Maus auf
das xbpSLE zeige. Was muß ich tun, damit er beim Start sofort auf diesem
Feld steht.

Gruß
Alfred

Verfasst: Do, 31. Mai 2007 12:33
von brandelh
Hi,

in der CREATE() Methode vor SHOW() (oder war es danach ...) diese beiden Zeilen einfügen

SetAppFocus(self) // zuerst den Dialog
SetAppFocus(::MyFrirstControl) // dann das gewünschte Objekt

das ist jetzt Classcode. Wenn du Funktionscode verwendest, hast du eventuell nur das oXbp für alle Xbp. Dann mußt du eine eigene Local Variable erstellen.

Verfasst: Do, 31. Mai 2007 13:03
von Jan
Genau das ist manchmal ein Problem. Ich habe früher aus verschiedenen Gründen allen SLE den gleichen Namen gegeben. Was Vorteile haben kann.

Für mich war wichtig, daß ich den Code durch Arrays und Schleifenbildungen übersichtlicher gestalten konnte. Das geht mit unterschiedlichen zwar Variablennamen auch, aber die müssend dann immer PUBLIC sein. Wovon ich mich nach der entsprechenden Diskussion hier im Forum ganz schnell getrennt habe. Das war dann mein persönlicher Zwischenschritt. Hat man keine Arbeit, macht man sich halt welche :cry: .

Der Hauptnachteil ist aber, daß man dann die einzelnen Felder nicht mehr gezielt ansprechen kann. Da ich anders als Hubert nicht mit Klassencode arbeite, springe ich die Felder dann mit SetAppFocus(oSle) an. Gleiches gilt natürlich auch für die Buttons, also etwa "Abbruch" und "OK". Auch das geht natürlich nur mit unterschiedlichen Namen für die Buttons.

Wie man es auch macht, alles hat so seine Vor- und Nachteile. Mir ist inzwischen wichtiger, die einzelenen XbParts gezielt anspringen zu können. Wer weiß, vielleicht mache ich das in 5 Jahren (oder schon früher?) wieder anders. Man ist ja lernfähig 8)

Jan

Verfasst: Do, 31. Mai 2007 13:47
von Alfred
Hallo Hubert,

vielen Dank. Es klappt prima und ein paar noch nicht gestellte Fragen zur
Cursorsteuerung sind damit gleich mit gelöst. :)

Ich verwende Funktionscode und habe den SetAppFocus(oSLE1) nach dem
show gesetzt.

Da ich dass mit Classcode oder Funktionscode noch nicht verstanden
habe, generiere ich Funktionscode und jedes Steuererelement bekommt
manuell einen eindeutigen Namen(z.B. oSEL1) und dann läßt sich dass
einzelne Element direkt ansprechen.

Gruß
Alfred

Re: Cursor auf 1. xbpSLE setzen

Verfasst: Do, 31. Mai 2007 16:26
von AUGE_OHR
hi,
Alfred hat geschrieben:
ich habe mit dem Formdesigner(Roger hat leider noch nicht geliefert)
ein Formular entworfen.

Beim Start sehe ich den Cursor erst dann, wenn ich mit der Maus auf
das xbpSLE zeige. Was muß ich tun, damit er beim Start sofort auf diesem
Feld steht.
SetAppFocus( oForm:Childlist()[1] )

gruss by OHR
Jimmy

Verfasst: Do, 31. Mai 2007 17:02
von Rolf Ramacher
Hi Jimmy,

ich habe das mal ausprobiert.
das mit dem Childlist muß doch nach dem Show() stehen oder ?
Hat aber bei mir nicht funktioniert.

Verfasst: Do, 31. Mai 2007 17:16
von Jan
Rolf,

was passiert denn bei Dir?

Wenn Du das machst wie Jimmy das vorschlägt springt der eben auf den 1. Child des Dialoges, egal wie der heißt und was das ist. hat den Vorteil daß Du im Code nicht fest hinterlegen mußt wie das Teil heißt, hat aber den Nachteil daß Du aufpassen mußt, was der 1. Child denn wirklich ist. Wenn das nicht der 1. ist: Zähl durch und trage die Nummer statt der 1 ein.

Jan

Verfasst: Fr, 01. Jun 2007 8:56
von Rolf Ramacher
Hallo Jan,

da passiert gar nichts. erst nachdem die Tab-Taste gedrückt wird, springt der coursor. nach dem create vom dialog kommt die drawingArea,
dann 2x static, dann das sle-feld- zählt static + drawingArea mit ??

dann wäre es 4. nützt aber auch nichts 5 auch nicht.

Verfasst: Fr, 01. Jun 2007 9:11
von Jan
Rolf,

da gibt es 2 Möglichkeiten: Die einfach-mal-Nachsehen-Methode, indem du folgende Schleife einbaust (nicht getestet, mal eben schnell geraten):

Code: Alles auswählen

FOR i := 1 TO LEN(oForm:ChildList[])
    MsgBox(oForm:ChildList()[i])
NEXT
Dann siehst Du ja, an welcher Stelle Dein SLE steht.

2. Möglichkeit: Du springst das SLE mit seinem eindeutigen Namen an.

Jan

Verfasst: Fr, 01. Jun 2007 9:32
von brandelh
Hi,

also in der ChildList stehen ALLE XbParts, die Childs dieser drawingarea sind. Das erste Element kann auch ein FixedText oder PushBotton sein.
Man könnte das Richtige suchen, indem man die caption abfragt oder vorher einen setName Eintrag macht und über childbyname (oder so ähnlich) sucht.

ABER

man kann sich das Leben auch einfacher machen und gleich Class-Code verwenden ;-)