MemoEdit() und Zwischenablage [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

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:

MemoEdit() und Zwischenablage [Erledigt]

Beitrag von Jan »

Hallo,

noch einmal eine Frage an die, die sich mit sowas noch auskennen: Kann ich in einem MemoEdit() irgendwie Text aus der Zwischenablage einfügen? Ich finde zwar einen Weg, wie ich STRG+V entsprechend per UDF umbiegen kann. Ich lese auch den Inhalt der Zwischenablage aus. Aber wie bekomme ich den jetzt in den Text im MemoEdit() an der Crursor-Position eingefügt?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: MemoEdit() und Zwischenablage

Beitrag von Tom »

Über die UserFunc, die ja die aktuelle Zeile und Spalte (des Textpuffers) übergibt. In der reagierst Du eben auf Strg-V und klemmst den Inhalt des Clipboards irgendwie in den Text, notfalls dadurch, dass Du diesen sicherst, einliest, überarbeitest, das MemoEdit() beendest und neu aufrufst. Warum arbeitest Du überhaupt mit dieser veralteten Grütze?
Herzlich,
Tom
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: MemoEdit() und Zwischenablage

Beitrag von HaPe »

Hallo Jan !
Aber wie bekomme ich den jetzt in den Text im MemoEdit() an der Crursor-Position eingefügt?
In der UDF bekommst du als zweiten und dritten Parameter die aktuelle Position des Cursors:
FUNCTION UserFunc( nMode, nRow, nCol )
Damit sollte doch was zu machen sein mit TextvorCursor + TextausZwischenablage + TextnachCursor.

Tom war schneller ...
--
Hans-Peter
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: MemoEdit() und Zwischenablage

Beitrag von BJelinek »

Hallo Jan

oder einfach

keyboard cTextausZwischenablage
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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:

Re: MemoEdit() und Zwischenablage

Beitrag von Jan »

Hallo Ihr beiden,

mir ist schon klar, wie ich die Position im MemoEdit() raus bekomme. Das Problem liegt darin, wie ich die nutzen kann um z. B. mit einem SubStr(TextDavor) + Inhalt Zwischenablage + Substr(Text danach) den Gesamtstring zusammen zu stellen. Denn an den String komme ich ja nicht ran. Wenn überhaupt am ehesten auf dem Weg von Tom - STRG+W auslösen, Zwischenablage einfügen, Text wieder ins Memoedit einlesen, den Cursor an diese Position setzen. Abgesehen davon, daß das vermutlich auf eine mordsmäßig verklausulierte Vorgehensweise hinauslaufen wird - dann hat der Benutzer keinerlei Möglichkeiten mehr, das Ganze mit ESC abzubrechen oder Änderungen zurück zu nehmen. OK, klar, geht doch. Wenn ich mir das vorher in eine andere Variable wegspeichere als Sicherung. Wie gesagt - mördermäßig verklausuliert.

Wobei es natürlich auch ein irrer Aufwand ist, alleine aus der Position im Memoedit die Position im Text auszurechnen, die ich dann mit SubStr() auswerten könnte.

Tom: Warum? Weil der Kunde der Meinung ist, das 1) man eine OEM-Oberfläche viel schneller und eingängiger bedienen kann, und er 2) der Meinung ist, das GUI-Oberflächen zu programmieren viel länger dauert als eine OEM zu schreiben, und 3) er selber auch manchmal Hand anlegt und er noch ganz wesentlich weniger als ich mit Klassen umgehen kann - ich tu mich ja nur schwer im selber schreiben, aber vorhandene nutzen klappt. Bei ihm aber nicht. Das in solch einem Fall eine Klasse sehr viel eleganter und einfacher einzurichten ist als solche Kunststücke an einem antiken Memoedit anzuschrauben ist dabei noch eine ganz andere Geschichte.

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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() und Zwischenablage

Beitrag von brandelh »

In der Hilfe steht, dass jede Taste die Memoedit() nicht automatisch handhabt, die USER function aufruft.
In der Hilfe steht zu dem Befehl als Beispiel eine die auf K_F8 etc. reagiert.
MemoEdit() calls the user function (or evaluates the code block) when a key is pressed which MemoEdit() does not automatically process.
Such configurable keys can be processed in the user function and the RETURN value of the user function is used to notify MemoEdit() of how to react to the key.
Der Keyboard Befehl unterscheidet je nach Einfügemodus, wenn du immer sicher einfügen willst, musst du das selbst machen.

Hier habe ich ein Beispiel meiner Hilfefunktion, die z.B. das § Zeichen als String übergibt, statt es als Steuerzeichen zu ignorieren

Code: Alles auswählen

*----------------------------------------------------------------------------
function memofunk(modus, zeile, spalte)       && fragt bei ESC oder F3, && ob gespeichert werden soll ?

  local _t,wahl,ins_mode,aendern,rueck
  ins_mode=.f.
  aendern =.t.
  rueck = 0

  DO CASE

    CASE modus = 0 .or. modus=3
       return 0

    OTHERWISE
      _t = LASTKEY()
     IF modus = 2
         aendern = .T.
      ENDIF
      DO CASE
         CASE _T = 21    // Paragraph wurde gedrückt !
            rueck = 33   // und soll als Paragraph in Text eingefügt werden.
         CASE _t = 301 .OR. _t = K_ESC .or. _t= K_F3   && Alt-X / ESC..exit
            IF .NOT. aendern     && keine Änderung, einfach beenden
               rueck = K_ESC
       else
               wahl=ask(17,"Text <S>peichern, "+;
                           "<Ä>ndern oder <Z>urück ohne"+;
                           " Änderung?","<","TE_EDFUNC","ESC")
               DO CASE
                  CASE wahl = "Z"   && Abbrechen
                     rueck = K_ESC
                  CASE wahl = "Ä"   && Eingabe erneut aufrufen
                     rueck = 32
                  CASE wahl = "S"   && Sichern und beenden
                     rueck = K_CTRL_W
               ENDCASE
            ENDIF
      ENDCASE

  ENDCASE
RETURN (rueck)
"UND wie finde ich den Text vor und nach dem Einfügen ..."

das habe ich zwar noch nicht gemacht, aber die Funktion hier sollte dafür gedacht sein und ein Beispiel wird dort auch angegeben (Version 2.00):

MlCtoPos()
Gruß
Hubert
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:

Re: MemoEdit() und Zwischenablage

Beitrag von Jan »

Hallo Bernd,

Du bist mein Held des Tages! genau so klappt es. Ich muß nur den Keyboard-Buffer hoch setzen, damit nicht die standardmäßig letzten 10 Zeichen der Zwischenablage übernommen werden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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:

Re: MemoEdit() und Zwischenablage

Beitrag von Jan »

Und allen Vieren danke für Eure Überlegungen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: MemoEdit() und Zwischenablage

Beitrag von Werner_Bayern »

Tom hat geschrieben: Mo, 08. Jan 2018 12:37Warum arbeitest Du überhaupt mit dieser veralteten Grütze?
Was gibt's besseres, das in Xbase++ integriert (komm jetzt nicht mit txtcontrol :wink:) ist?
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten