Cursor auf 1. xbpSLE setzen

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Cursor auf 1. xbpSLE setzen

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag 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.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag 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
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Cursor auf 1. xbpSLE setzen

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

Beitrag 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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

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

Beitrag 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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag 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 ;-)
Gruß
Hubert
Antworten