Copy and paste in SLE

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

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:

Copy and paste in SLE

Beitrag von Jan »

Hallo,

ich kämpfe da mit einem merkwürdigen Problem: Oberfläche ist VIO, und es gibt dort ein SLE. Das deswegen, weil dort Strings kopiert werden sollen, die länger sind als 100 Zeichen. Sowas geht mit einem SAY nicht, weil der Tastaturpuffer alles über 100 Zeichen kappt.

Ich habe also ein DbEdit. geht man dort auf dem gewünschten Satz auf ENTER, springt der in die Funktion die das SLE aufbaut. Da wartet der, das man STRG+V drückt, das sollte den Inhalt der Zwischenablage da rein kopieren, und dann kann ich das SLE verlassen, die Daten werden an das DbEdit zurückgegeben und in der dbf gespeichert.

Soweit die Theorie.

Praktisch gesehen klappt das aber nicht immer. Gestern lief das den ganzen Tag, heute spinnt der. Exakt die gleiche Programmversion. Was passiert ist: Im Explorer wird eine datei amrkeirt, rechte maustaste "Umbenennen", STRG+C. Damit ist der Dateiname in der Zwischenablage. Mache ich jetzt im SLE ein STRG+V, dann kopiert der da zwei Leerzeichen + crlf rein. Und das 2x hintereinander. Die Zwischenablage hat nach dem Prozess den gleichen kaputten Inhalt. Kopiere ich aber den Inhalt der Zischenablage erstmal in einen Editor, markiere mir das da, und füge das dann in das SLE ein, dann ist der Inhalt da drin.

Mein Problem ist: Ich hab in der Event-Schleife eine Abfrage auf STRG+V drin, um dann per :pastemarked() den Inhalt einzufügen. Da geht der aber nie rein! In die nächste Abfrage mit ENTER oder TAB dagegen immer, wenn eine dieser Tasten gedrückt worden ist. Die Schleife hatte ich ansich nur deswegen eingebaut, weil der mir das ohne nicht in den SLE-Buffer gelegt hatte. was dann gestern halt nach dieser Korrektur lief.

Was läuft da falsch? Ist das ein VIO/GUI-Konflikt? Überseh ich da was?

Das hier ist der Code in der aufgerufenen Funktion, mit einer Menge Sachen drin wegen Ausprobieren, da könnte man auch mal wieder was aufräumen:

Code: Alles auswählen

FUNCTION erfasseLink(aStart, cWert)

LOCAL oSle := NIL
LOCAL mp1 := NIL
LOCAL mp2 := NIL
LOCAL oXbpEvent := NIL
LOCAL nEvent := 0
LOCAL nWert := 0

Clear Typeahead

oSle := XbpSle():new(MEMVAR->oDlgApp, , aStart, {1000, 25})
oSle:dataLink := {|x| IIf(x = NIL, cWert, cWert := x)}
oSle:bufferLength := 250
oSle:create()
oSle:setData()
oSle:SetMarked({1, 250})
oSle:killInputFocus := {|x, y, oSle| nWert := -1}

SetAppFocus(oSle)

DO WHILE .T.
   nEvent := AppEvent(@mp1, @mp2, @oXbpEvent)
   oXbpEvent:handleEvent(nEvent, mp1, mp2)
   IF nEvent = xbeK_CTRL_V 
      oSle:pasteMarked()

    ELSEIF nEvent = xbeK_ENTER .OR. nEvent = xbeK_TAB
      oSle:killInputFocus()
      SetAppFocus(MEMVAR->oDlgApp)
   ENDIF
   IF nWert = -1
      cWert := oSle:getData()
      oSle:destroy()
      oSle := NIL
      SetAppFocus(MEMVAR->oDlgApp)
      RETURN cWert
   ENDIF
ENDDO

RETURN cWert
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Copy and paste in SLE

Beitrag von brandelh »

Bei einem SLE sollte es immer gehen, aber ab und zu muss ich da dann die rechte Maustaste benutzen (im DBEditor), in meinen eigenen geht es einwandfrei, keine Ahnung warum da und dort nicht ...

Bei @ SAY GET Masken (oGET-Objekt) funktionierte das nie, daher habe ich dort eine F2 Funktion erweitert, dass in den Feldern der Inhalt aus der Zwischenablage gesetzt wird, seither geht das im GET einwandfrei :-)
Gruß
Hubert
Antworten