Seite 1 von 1

Hybridmodus Cut&Paste [ERLEDIGT]

Verfasst: Mi, 19. Feb 2014 13:45
von Manfred
Hi,

ist es eigentlich möglich bei einer Hybridanwendung, im Textmodus in die GET Felder etwas einzufügen, was im Zwischenspeicher ist? Also wenn ich z.B. mit auf einer Webseite etwas kopiere um es dann zu übernehmen. So direkt scheint es ja nicht zu klappen, kann man da was programmieren?

Re: Hybridmodus Cut&Paste

Verfasst: Mi, 19. Feb 2014 13:55
von brandelh
Grundsätzlich kann man in ein GET Feld auch mit normalem Cut&Paste reinschreiben, aber leider ist das nicht zuverlässig.
Was immer geht ist z.B. mit XbpClipBoard() einen Text aus der Zwischenablage abzuholen und in das aktuelle oder ein beliebiges GET Objekt einzufügen (siehe get() :buffer etc.)

Re: Hybridmodus Cut&Paste

Verfasst: Mi, 19. Feb 2014 13:58
von Manfred
bedeutet das nun, das ich die Maus aktivieren, eine Routine schreiben muß, die die rechte Maustaste im Feld abfragt und dann entsprechend reagieren?

Re: Hybridmodus Cut&Paste

Verfasst: Mi, 19. Feb 2014 14:03
von Tom
Oder beispielsweise eine Funktionstaste belegen. An das Clipboard-Objekt kommst Du ja im Hybridmodus.

Re: Hybridmodus Cut&Paste

Verfasst: Mi, 19. Feb 2014 14:05
von Manfred
ah, das wäre eine Möglichkeit. Muß ich mal schauen wie ich das umsetzen könnte.

Re: Hybridmodus Cut&Paste

Verfasst: Mi, 19. Feb 2014 14:42
von brandelh
Unter GUI hatte ich eine Eingabehilfe für Datenübernahme vom Großrechner.
In der Großrechner emu konnte man mit einem Hotkey oder Button den kompletten Bildschirminhalt als Text in die Zwischenablage stellen.
Mit einem PushButton in meiner Anwendung übernahm ich dann alle gewünschten Infos in die SLE.
Bei dir wäre ein Hotkey (set key ...) genauso möglich wie die Buttons der Maus abzufragen, allerdings dürfte der Anwender z.B. schneller F2 drücken als die Maus zu suchen.

Hier ein Beispiel aus meiner Rechenroutine und der Hilfe ... ohne Prüfung, also können einige Fehler drinn sein ;-) :

Code: Alles auswählen

* am Anfang des Programmes ...
set key K_F9 to DatenPaste
...
*-----------------------------------------------------------------------------
procedure DatenPaste(proz,zei,_var) // aus dem GET System kommen nur 3 Parameter !
   // da keine Bildschirmänderungen nötig sind auch nichst sichern ...
   local cTxt 
   local oClipBoard := XbpClipBoard():new():create()  // Objekt erzeugen
   // Clipboard öffnen und feststellen, welche Datenformate 
   // darin abgelegt sind 
   oClipBoard:open() 
   cTxt := oClipBoard:getBuffer( XBPCLPBRD_TEXT ) 
   // oClipBoard:clear()  // Zwischenablage löschen ???
   oClipBoard:close() 
   if ! empty(cTxt)
      keyboard alltrim(cTxt)
   endif
return
mit keyboard wird die Zwischenablage direkt an der Cursorposition als Texteingabe ausgeführt.
Falls du eine strengere Eingabe möchtest, kannst du auch das aktuelle Get Objekt abfragen und den Buffer setzen (auf Länge achten).

Re: Hybridmodus Cut&Paste

Verfasst: Mi, 19. Feb 2014 17:20
von Manfred
ich verneige und bedanke mich vor und bei euch. Das hat mir weiter geholfen.

Re: Hybridmodus Cut&Paste [ERLEDIGT]

Verfasst: Mo, 24. Feb 2014 5:58
von AUGE_OHR
hi,

ich gehe mal davon aus das SETMOUSE( .T. ) gesetzt wurde und damit c:\ALASKA\XPPW32\Source\SYS\GetSysX.prg aktive ist.

Code: Alles auswählen

PROCEDURE GetHandleEvent( oGet, nEvent, mp1, mp2, obj )
...
         // hinzufügen für copy / paste

         // Copy to Clipboard
      CASE nEvent == xbeK_CTRL_C
         oClipBoard := XbpClipBoard():new():create()
         oClipBoard:open()
         cText := oGet:buffer
         oClipBoard:setBuffer(cText, XBPCLPBRD_TEXT)
         oClipBoard:close()
         oClipBoard:destroy()

         // Copy from Clipboard
      CASE nEvent == xbeK_CTRL_V
         oClipBoard := XbpClipBoard() :new() :create()
         oClipBoard:open()
         aFormats := OClipBoard:queryFormats()

         IF ASCAN( aFormats, XBPCLPBRD_TEXT ) > 0
            cText := oClipBoard:getBuffer( XBPCLPBRD_TEXT )
            n := LEN( cText )
            FOR i := 1 TO n
               cChar := cText[ i ]

               /* Transfer character to edit buffer */
               IF SET( _SET_INSERT )
                  oGet:insert( cChar )
               ELSE
                  oGet:overstrike( cChar )
               ENDIF

               /* No room left to type to the right of the cursor */
               IF oGet:typeOut
                  IF SET( _SET_BELL )
                     QQOUT( CHR( 7 ) )
                  ENDIF

                  IF !SET( _SET_CONFIRM )
                     oGet:exitState := GE_ENTER
                  ENDIF

                  EXIT
               ENDIF
            NEXT i
         ENDIF
         oClipBoard:close()
         oClipBoard:destroy()
also die selben Tasten wie gewohnt ...

Re: Hybridmodus Cut&Paste [ERLEDIGT]

Verfasst: So, 19. Nov 2017 11:23
von saul
Hallo,

Code: Alles auswählen

 /* Transfer character to edit buffer */
IF SET( _SET_INSERT )
  oGet:insert( cChar )
ELSE
  oGet:overstrike( cChar )
ENDIF
oGet:insert wird wahrscheinlich bei XBP verwendet.
Wenn ich aber

Code: Alles auswählen

@2,2 get cZeile1
@3,2 get cZeile2
read
habe, wie bekomme ich dann z. B. die einzelnen Buchstaben in die Variable cZeile2?

mfg
Wolfgang