Text an notepad senden und unter bestehendem Text einfügen ?
Verfasst: 28.04.2015 22:23
Ich möchte einen selektierten Text, den ich mit:
aus einem EditorGadget hole, an ein neues oder bestehendes Notepad senden, und zwar so,
das der neue Text unter dem bestehenden eingefügt wird.
Die notepad.exe öffne ich über RunProgram() und halte es dann geöffnet, so dass ich
alle folgenden Textstücke dahin senden kann, bis entweder der User das Notepad schließt
( dann wird einfach ein neues geöffnet) oder die Applikation beendet wird.Das funktioniert.
Bisher habe ich dazu nur die folgenden zwei Methoden gefunden:
Beides funktioniert soweit, aber es ist noch nicht ganz das, was ich will.
1. setzt den kompletten Text im notepad, um den alten Text nicht zu überschreiben, müßte ich diesen vorher
aus dem Notepad auslesen, mit dem neuen Text kombinieren und dann wieder ins Notepad zurückschreiben.
2. der Umweg übers Clipboard funktioniert, aber ich möchte es vermeiden, Text ohne eindeutige User-Aktion ins
Clipboard zu kopieren, da es sonst beim Paste erfahrungsgemäß Überraschungen gibt.Außerdem müßte ich
irgendwie noch einen Linefeed in das Clipboard reinmogeln, damit der neue Textblock unter dem
bestehenden eingefügt wird.Den selektierten Text ins Clipboard zu befördern, biete ich per Rechtsklick
trotzdem an ( aber dann macht der User das auch selber aktiv).Evtl. könnte man das Clipboard
zwischenspeichern und dann wiederherstellen, aber ist irgendwie auch Gemurkse
Beides sind für mich nur Notlösungen, daher suche ich nach einer sauberen Lösung dafür.
Im Endeffekt soll das Notepad Textschnipsel sammeln, die der User im EditorGadget selektiert hat.
Sinn ist natürlich, manuelle Useraktionen zu verringern ( also copy to clipboard, Notepad vorholen,
Linefeed, Paste Text).
Code: Alles auswählen
Procedure.s GetSelectedEditorText(iEdId.i)
;-----------------------------------------
Protected sSelected.s, Range.CHARRANGE, iSize.i
SendMessage_(GadgetID(iEdId), #EM_EXGETSEL, 0, Range)
iSize = (Range\cpMax - Range\cpMin)
sSelected = Space((iSize * 2) + 1)
SendMessage_(GadgetID(iEdId),#EM_GETSELTEXT, 0, sSelected)
ProcedureReturn(sSelected)
EndProcedure
das der neue Text unter dem bestehenden eingefügt wird.
Die notepad.exe öffne ich über RunProgram() und halte es dann geöffnet, so dass ich
alle folgenden Textstücke dahin senden kann, bis entweder der User das Notepad schließt
( dann wird einfach ein neues geöffnet) oder die Applikation beendet wird.Das funktioniert.
Bisher habe ich dazu nur die folgenden zwei Methoden gefunden:
Code: Alles auswählen
1. SendMessage_(FindWindowEx_(FindWindow_("notepad",0),0,"Edit",0),#WM_SETTEXT,0,"Hallo Welt"+#CRLF$)
2. SendMessage_(FindWindowEx_(FindWindow_("notepad",0),0,"Edit",0),#WM_PASTE,0,0)
1. setzt den kompletten Text im notepad, um den alten Text nicht zu überschreiben, müßte ich diesen vorher
aus dem Notepad auslesen, mit dem neuen Text kombinieren und dann wieder ins Notepad zurückschreiben.
2. der Umweg übers Clipboard funktioniert, aber ich möchte es vermeiden, Text ohne eindeutige User-Aktion ins
Clipboard zu kopieren, da es sonst beim Paste erfahrungsgemäß Überraschungen gibt.Außerdem müßte ich
irgendwie noch einen Linefeed in das Clipboard reinmogeln, damit der neue Textblock unter dem
bestehenden eingefügt wird.Den selektierten Text ins Clipboard zu befördern, biete ich per Rechtsklick
trotzdem an ( aber dann macht der User das auch selber aktiv).Evtl. könnte man das Clipboard
zwischenspeichern und dann wiederherstellen, aber ist irgendwie auch Gemurkse

Beides sind für mich nur Notlösungen, daher suche ich nach einer sauberen Lösung dafür.
Im Endeffekt soll das Notepad Textschnipsel sammeln, die der User im EditorGadget selektiert hat.
Sinn ist natürlich, manuelle Useraktionen zu verringern ( also copy to clipboard, Notepad vorholen,
Linefeed, Paste Text).