Seite 1 von 1

DCGET und letztes Wort markieren

Verfasst: Fr, 31. Okt 2014 12:31
von Rudolf
Hallo,
ich verwende Express 255 und habe das Problem dass beim Markieren des letzten Wortes in einem GET die ganze Zeile markiert wird und der Cursor am Ende steht.
Tritt das Problem auch bei der aktuellsten Version auf ? Von Roger bekomme ich keine Antwort auf mein Problem da er erst nachschaut wenn ich auf die neueste Version update.
Grüße
Rudof

Re: DCGET und letztes Wort markieren

Verfasst: Fr, 31. Okt 2014 12:51
von Tom
Hallo, Rudolf.

Ich kann das für Build 257 und Build 259 bestätigen, Build 260 habe ich noch nicht installiert. Wenn man in einem DCGET, das mehrere Wörter enthält, auf das letzte doppelklickt, wird bis zum Ende der folgenden Leerzeichen markiert und der Cursor wandert ans Ende. Bei den vorangehenden Wörtern ist das allerdings auch so: Es wird nicht nur das Wort selbst markiert, sondern auch das Leerezeichen rechts daneben. Das wiederum ist in vielen Applikationen Standardverhalten - wenn ich jetzt, beim Schreiben dieser Nachricht, auf ein Wort doppelklicke, wird das nachfolgende Leerzeichen mitmarkiert (Firefox).

Die Ursache liegt m.E. darin, dass ein Eingabefeld nie leer ist, sondern für die korrekte automatische Formatierung mit Leerzeichen aufgefüllt.

Re: DCGET und letztes Wort markieren

Verfasst: Fr, 31. Okt 2014 13:04
von Rudolf
Hallo Tom,
danke, das klingt plausibel, ich scrolle im Eingabefeld oft z.B. mit picture "@S30" für einen String der wesentlich größer ist. Wenn also das letzte Wort mit dem Rest markiert wird, springt der Cursor wahrscheinlich standardmäßig auf die letzte Stelle und lässte den linken Rest verschwinden. Kann dem Kunden also erklären dass es Windows Standard ist und muss kein eXpress++ Update machen.
Grüße
Rudolf

Re: DCGET und letztes Wort markieren

Verfasst: Fr, 31. Okt 2014 13:19
von Tom
Hallo, Rudolf.

Wenn man mit einem Standard-SLE (XbpSLE) arbeitet und das leer liefert, wie in den Login-Beispielen aus der Alaska-Installation, entsteht das Problem beim letzten Wort nicht. Die Ursache besteht für eXpress++-Anwender darin, dass sie oft Textvariablen für die Eingabe so vorformatieren, dass das DCGET automatisch die richtige Länge bekommt:

Code: Alles auswählen

cText := Space(30)

@ 1,1 DCSAY 'Eingabe:' GET cText // wird automatisch für 30 Zeichen sauber formatiert, weil cText nicht leer ist
(analog bei direkten Eingaben in Datenbankfelder)

Dadurch ist der EditBuffer nicht leer, sondern eben mit 30 Leerzeichen vorbefüllt. Bei der Eingabe wird nun entweder eingefügt und dabei am Ende abgeschnitten - oder ersetzt. Der EditBuffer behält seine 30 Zeichen Länge - es sei denn, man markiert bis zum Ende und drückt <Entf>, dann ist er - vorübergehend - kürzer. Deshalb funktionieren mit eXpress++ in dieser Variante auch die CueBanner nicht, weil die nur angezeigt werden können, wenn das Eingabefeld faktisch komplett leer ist. Aber das hier funktioniert:

Code: Alles auswählen

cText1 := ''
cText2 := ''
@ 1,1 DCGET cText1 PICT Replicate("!",30) GETSIZE 30 EVAL {|o|o:CueBanner := 'Test 1'}
@ 2,1 DCGET cText2 PICT Replicate("!",30) GETSIZE 30 EVAL {|o|o:CueBanner := 'Test 2'}
DCREAD GUI ADDBUTTONS
Man sieht den CueBanner, wenn das Feld nicht den Fokus hat. Gebe ich jetzt etwas ein, funktioniert anschließend auch die Markierung. All das scheitert, wenn ich cText<x> auch mit nur einem einzigen Leerzeichen vorbefülle.

Re: DCGET und letztes Wort markieren

Verfasst: Fr, 31. Okt 2014 14:21
von Tom
Zur Veranschaulichung (Code aus dem Beispiel): Doppelklick auf das letzte Wort. Im zweiten GET ist das CueBanner sichtbar.

Re: DCGET und letztes Wort markieren

Verfasst: Fr, 31. Okt 2014 14:56
von Rudolf
Hallo Tom,
stimmt, wenn ich die Leerzeichen am Ende trimme, funktioniert es. Aber leider geht es nicht ohne die Leerzeichen, da sonst der Eingabestring nicht erweitet werden kann.
Bei mir geht übrigends o:CueBanner nicht, könnte aber auch an der eXpress++ Version 255 liegen
Grüße
Rudolf