Memoedit und einfügen von fertigen Textzeilen ...?!?
Moderator: Moderatoren
Memoedit und einfügen von fertigen Textzeilen ...?!?
Hm .. wie soll ich das beschreiben ...
also ...
ich verwende memoedit() ...
ist es möglich während ins memoedit Fenster was eingegeben wird ...
aus einer DBF Datenbank mit vorgefertigten Textphrasen ...
so wie
"Hallo"
"Guten Morgen wie geht es"
"Mit freundlichen Grüßen"
eine auszuwählen und in den Text einzufügen an der Stelle wo der Cursor gerade steht ....
und dann einfach weiter per hand eingeben
ich hoffe ich habe mich verständlich ausgedrückt
Gruß Frank
also ...
ich verwende memoedit() ...
ist es möglich während ins memoedit Fenster was eingegeben wird ...
aus einer DBF Datenbank mit vorgefertigten Textphrasen ...
so wie
"Hallo"
"Guten Morgen wie geht es"
"Mit freundlichen Grüßen"
eine auszuwählen und in den Text einzufügen an der Stelle wo der Cursor gerade steht ....
und dann einfach weiter per hand eingeben
ich hoffe ich habe mich verständlich ausgedrückt
Gruß Frank
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Frank,
ja.
Du könntest z.B. mit PostAppEvent() die Tastendrücke an das MLE senden...
Viele Grüße,
Martin
ja.
Du könntest z.B. mit PostAppEvent() die Tastendrücke an das MLE senden...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Hi Frank
so ähnlich könnte die Funktion aussehen die bei einem Enter im MLE ausgelöst wird.
Grüße Rolf
so ähnlich könnte die Funktion aussehen die bei einem Enter im MLE ausgelöst wird.
Code: Alles auswählen
/***********************************************************
Name : translateKuerz
Does : übersetzt den Kürzeltext in Langtext
***********************************************************/
METHOD dlgBlock:translateKuerz(oMle)
//** DEC VAR
LOCAL iOldSelect := SELECT()
LOCAL iOldRecno := 1
LOCAL aMarked := {}
LOCAL iPosMark := 0
LOCAL iCount := 0
LOCAL cKuerzel := ""
LOCAL cText := ""
LOCAL cMle := ""
if( ( 27 )->(Used()) )
SELECT 27 //-- texte.dbf
iOldRecno := Recno()
//-- Kursorposition ermitteln
aMarked := oMle:queryMarked()
iPosMark:= aMarked[2]
//-- Mle-Inhalt auslesen
cMle := oMle:getData()
cText := SPACE(6)+cMle //-- " ##Das ist eine Test td##"
cText := substr(cText,aMarked[2],6) //-- "t td##"
cText := strtran(cText,CHR(13),"") //-- "t td#"
cText := strtran(cText,CHR(10),"") //-- "t td"
cText := RTrim(cText) //-- "t td"
cText := substr(cText,rAt(" ",cText)+1) //-- "td"
cText := Upper(Alltrim(cText))
cKuerzel:= cText+Space( 5-Len(cText) )
//Msg(,"|"+cKuerzel+"|")
if(.not.Empty(cKuerzel))
LOCATE FOR (cKuerzel == KRZ).And.(ART == ::cFilter)
if(found())
cText := Rtrim(TEXT)
//-- Ersetzung einfügen
cKuerzel := Alltrim(cKuerzel)+" "
iCount := iPosMark - (Len(cKuerzel))
iCount := Max(1,iCount)
//Msg(,iPosMark)
//Msg(,iCount)
oMle:setMarked( { iPosMark, iCount} )
oMle:cutMarked()
oMle:insert( , cText )
endif
endif
GOTO iOldRecno
endif
SELECT(iOldSelect)
RETURN NIL
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Frank,
meinst du MemoEdit() oder XbpMLE()'s ?
Wenn du wirklich ein MemoEdit() meinst, kann man über keyboard die Texte einstreuen, wobei über Funktionstasten eine Funktion mit achoice etc. aufgerufen werden kann um die Auswahl des Textes zu ermöglichen :
so ähnlich habe ich im DEVCON Projekt Hilfslisten mit F2 je nach Feldname realisiert. dev_f2.prg hat dazu Beispiele, wobei ich bei GET Variablen meist direkt den Buffer setze.
meinst du MemoEdit() oder XbpMLE()'s ?
Wenn du wirklich ein MemoEdit() meinst, kann man über keyboard die Texte einstreuen, wobei über Funktionstasten eine Funktion mit achoice etc. aufgerufen werden kann um die Auswahl des Textes zu ermöglichen :
Code: Alles auswählen
#include 'inkey.ch'
...
set key K_F2 to MyTextAuswahl()
memoedit()...
...
function MyTextAuswahl()
//... Achoice, oder je nach Funktionstaste, ich machs mir einfach...
return "Mein Text"
...
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Hallo Hubert,
ich habe ein ähnliches Problem mit MemoEdit im Hybridmodus.
Ich habe eine allgemeine Routine "ZwischenablageEinfuegen()", die bei Eintippen von Strg-V im XbpCrt-Fenster in das aktive Eingabefeld den Inhalt der Zwischenablage schreiben soll. Mit Getfeldern funktioniert das auch gut, indem ich kurzerhand den Text in den Tastaturpufferschreibe und vor CR+LF noch ein Strg-Y für das Löschen bis zum Zeilenende einfüge.
Bei MemoEdit darf ich jedoch Strg-Y nicht einfügen, da hierbei die komplette Zeile gelöscht wird. Es gelingt mir aber nicht innerhalb ZwischenablageEinfuegen() festzustellen, ob ein MemoFeld aktiv ist!
Hat jemand eine Lösung?
Uli
ich habe ein ähnliches Problem mit MemoEdit im Hybridmodus.
Ich habe eine allgemeine Routine "ZwischenablageEinfuegen()", die bei Eintippen von Strg-V im XbpCrt-Fenster in das aktive Eingabefeld den Inhalt der Zwischenablage schreiben soll. Mit Getfeldern funktioniert das auch gut, indem ich kurzerhand den Text in den Tastaturpufferschreibe und vor CR+LF noch ein Strg-Y für das Löschen bis zum Zeilenende einfüge.
Bei MemoEdit darf ich jedoch Strg-Y nicht einfügen, da hierbei die komplette Zeile gelöscht wird. Es gelingt mir aber nicht innerhalb ZwischenablageEinfuegen() festzustellen, ob ein MemoFeld aktiv ist!
Hat jemand eine Lösung?
Uli
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
ich hoffe das ich das richtig verstehe :
1.) mit Memoline kann ich ja feststellen in welcher Zeile der Cursor im
Memofeld steht.
2.) angenommen 3 Zeilen und du stehst auf der 2st Zeile und willst dort
vor der 3st Zeile noch "myText" einfügen
gruss by OHR
Jimmy
ich hoffe das ich das richtig verstehe :
1.) mit Memoline kann ich ja feststellen in welcher Zeile der Cursor im
Memofeld steht.
2.) angenommen 3 Zeilen und du stehst auf der 2st Zeile und willst dort
vor der 3st Zeile noch "myText" einfügen
Code: Alles auswählen
FOR n:=1 TO nMaxLines
aLines[ n ] := Trim( MemoLine( cText, 80, n ) )
NEXT
cVor := aLines[1]+aLines[2]
cDazu := myText
cNach := aLines[3]
REPLACE myMemo with (cVor+cDazu+cNach)
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Frank.
Bei mir können Textbausteine aus einem Browse ausgewählt werden und sie werden an der Stelle im MLE-Text eingefügt, an der man gerade stand. Zudem werden bestimmte Tastaturkürzel direkt während der Eingabe ausgewertet und ggf. gegen Textbausteine ausgetauscht. Wenn man zum Beispiel "#mfg" tippt, erscheint "Mit freundlichen Grüßen". Ich kann den Code mal posten, aber erst am Montag. Genügt das?
Bei mir können Textbausteine aus einem Browse ausgewählt werden und sie werden an der Stelle im MLE-Text eingefügt, an der man gerade stand. Zudem werden bestimmte Tastaturkürzel direkt während der Eingabe ausgewertet und ggf. gegen Textbausteine ausgetauscht. Wenn man zum Beispiel "#mfg" tippt, erscheint "Mit freundlichen Grüßen". Ich kann den Code mal posten, aber erst am Montag. Genügt das?
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
sein Problem ist, dass er memoedit nutzt und nicht XbpMLE().
Die GET Felder auf das STRG-Y anders reagieren als das Memoedit.
Bei Memoedit kannst du eine benutzerdefinierte Funktion hinterlegen, die auf den Steuercode z.B. F2 gedrückt anders reagiert als die Standardbehandlung mit Set key festgelegt hat. Leider ist es ewig her dass ich damit gearbeitet habe.
Ein zweiter Ansatz ist, dass die Funktion die durch z.B. F2 aufgerufen wird den Prozedur und Variablennamen übergeben bekommt. Je nachdem was da drin steht könntest du unterscheiden welche Hilfe bzw. Übergabe du machst. So mache ich das auch in meinen Programmen. Sie dir dazu die Funktionen im ..._F2.PRG des Devcon Programmes an.
sein Problem ist, dass er memoedit nutzt und nicht XbpMLE().
Die GET Felder auf das STRG-Y anders reagieren als das Memoedit.
Bei Memoedit kannst du eine benutzerdefinierte Funktion hinterlegen, die auf den Steuercode z.B. F2 gedrückt anders reagiert als die Standardbehandlung mit Set key festgelegt hat. Leider ist es ewig her dass ich damit gearbeitet habe.
Ein zweiter Ansatz ist, dass die Funktion die durch z.B. F2 aufgerufen wird den Prozedur und Variablennamen übergeben bekommt. Je nachdem was da drin steht könntest du unterscheiden welche Hilfe bzw. Übergabe du machst. So mache ich das auch in meinen Programmen. Sie dir dazu die Funktionen im ..._F2.PRG des Devcon Programmes an.
Gruß
Hubert
Hubert
Hallo,
Hab hier eine kleine memoedit - routine mit macros über Alt-Tasten
Grüsse aus dem verregneten Wien
/*** --------------------- ***/
FUNCTION PKMULTIEDIT ( cHeader, cMemo, csiz1, csiz2 )
Local GetList := {}, GetOptions, oDlgmem, _cMemo, aRef, oMenuMacro, kmacm,i,ctext,oCol, oRow,;
oMemo ,oMenmem , lOk, kmac, kmaca, ismac := .f., newmac := .f., iserst := .t., mp1
DEFAULT csiz1 := 55, csiz2 := 10
kmac := {}
kmacm := {}
IF FILE(MEMVAR->CurrentPath+"MACROS.AR")
kmac := DC_ARRAY_R( MEMVAR->CurrentPath+"MACROS.AR")
if Len(kmac) > 0
ismac := .t.
i := 1
FOR i = 1 to len(kmac)
AADD(kmacm, kmac[i,1]+" = "+Alltrim(kmac[i,2]))
NEXT
else
AADD(kmacm, "Keine Macros eingetragen")
endif
ELSE
AADD(kmacm, "Keine Macros eingetragen")
ENDIF
//DEFAULT cHeader := 'Memo-Text', _cMemo := space(10), csiz1 := 55, csiz2 := 10
_cMemo := cMemo
i := 1
@ 1.5,2 DCMULTILINE cMemo ;
SIZE csiz1, csiz2 ;
OBJECT oMemo ;
FONT "10.Courier" ;
ID 'KFMEMO' ;
MESSAGE 'Rechte Maustaste f
Hab hier eine kleine memoedit - routine mit macros über Alt-Tasten
Grüsse aus dem verregneten Wien
/*** --------------------- ***/
FUNCTION PKMULTIEDIT ( cHeader, cMemo, csiz1, csiz2 )
Local GetList := {}, GetOptions, oDlgmem, _cMemo, aRef, oMenuMacro, kmacm,i,ctext,oCol, oRow,;
oMemo ,oMenmem , lOk, kmac, kmaca, ismac := .f., newmac := .f., iserst := .t., mp1
DEFAULT csiz1 := 55, csiz2 := 10
kmac := {}
kmacm := {}
IF FILE(MEMVAR->CurrentPath+"MACROS.AR")
kmac := DC_ARRAY_R( MEMVAR->CurrentPath+"MACROS.AR")
if Len(kmac) > 0
ismac := .t.
i := 1
FOR i = 1 to len(kmac)
AADD(kmacm, kmac[i,1]+" = "+Alltrim(kmac[i,2]))
NEXT
else
AADD(kmacm, "Keine Macros eingetragen")
endif
ELSE
AADD(kmacm, "Keine Macros eingetragen")
ENDIF
//DEFAULT cHeader := 'Memo-Text', _cMemo := space(10), csiz1 := 55, csiz2 := 10
_cMemo := cMemo
i := 1
@ 1.5,2 DCMULTILINE cMemo ;
SIZE csiz1, csiz2 ;
OBJECT oMemo ;
FONT "10.Courier" ;
ID 'KFMEMO' ;
MESSAGE 'Rechte Maustaste f
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Hallo allerseits,
da keine Lösungen zur Feststellung, ob ein MemoFeld aktiv ist, gekommen sind, geht dies vermutlich mit Standard-xBase nicht.
Ich habe mir nun mit Hilfe einer Routine UTsMemoEdit() geholfen,
die kurzerhand im Cargo-Feld des zugehörigen Threads einträgt, das MemoEdit aktiv ist:
Das Cargo-Feld kann ich dann an geeigneter Stelle abfragen und bekomme zusätzlich noch die Größe und Position des Memofeldes.
Uli
da keine Lösungen zur Feststellung, ob ein MemoFeld aktiv ist, gekommen sind, geht dies vermutlich mit Standard-xBase nicht.
Ich habe mir nun mit Hilfe einer Routine UTsMemoEdit() geholfen,
die kurzerhand im Cargo-Feld des zugehörigen Threads einträgt, das MemoEdit aktiv ist:
Code: Alles auswählen
FUNCTION UTsMemoEdit( cString,nTop,nLeft,nBottom,nRight,lEditMode,bcUserFunc,nLineLen,nTabSize,nBufferRow,nBufferCol,nWindowRow,nWindowCol )
LOCAL cReturn,oThread,OldThreadCargo
oThread := ThreadObject()
OldThreadCargo := oThread:Cargo
oThread:Cargo := { "MemoEdit",nTop,nLeft,nBottom,nRight } // Fuer MemoEditActive()!
cReturn := MemoEdit( @cString,@nTop,@nLeft,@nBottom,@nRight, @lEditMode,@bcUserFunc,@nLineLen,@nTabSize,@nBufferRow, @nBufferCol, @nWindowRow, @nWindowCol )
oThread:Cargo := OldThreadCargo
RETURN( cReturn )
Uli