Seite 1 von 1
Gelöst! RTF-Text in Editorgadget importieren
Verfasst: 16.11.2024 11:24
von EmmJott
Guude Morsche (wie man in Hessen die Leute freundlich grüßt),
würde gerne mittels Editorgadget einen rtf-formatierten Text darstellen. Geht das überhaupt?
Bar jeder Ahnung war die Überlegung, mittels
den Text einzubauen um dann irgendwann im Programmablauf den Text ins Gadget einzufügen. Und hier kommt der Punkt: Wenn das überhaupt geht, wie macht man das?
Re: RTF-Text in Editorgadget importieren
Verfasst: 16.11.2024 12:24
von mk-soft
Sollte hier mit gehen ...
Code: Alles auswählen
;-TOP
; *****************************************************************************
; AddTextRTF by mk-soft, v1.05, 27.03.2018
CompilerIf #PB_Compiler_Version < 550
Procedure Ascii(Text.s)
Protected *mem = AllocateMemory(StringByteLength(Text, #PB_Ascii) + 1)
If *mem
PokeS(*mem, Text, -1, #PB_Ascii)
EndIf
ProcedureReturn *mem
EndProcedure
Procedure UTF8(Text.s)
Protected *mem = AllocateMemory(StringByteLength(Text, #PB_UTF8) + 1)
If *mem
PokeS(*mem, Text, -1, #PB_UTF8)
EndIf
ProcedureReturn *mem
EndProcedure
CompilerEndIf
Procedure AddTextRTF(Gadget, Text.s , NewLine=#False)
If Left(Text, 5) <> "{\rtf"
Text = "{\rtf " + Text + "}"
EndIf
If NewLine
Text = Left(Text, Len(text) - 1) + "\line}"
EndIf
CompilerIf #PB_Compiler_Unicode
Protected hEdit = GadgetID(Gadget)
Protected ndx = GetWindowTextLength_(hEdit)
Protected *szBuffer = Ascii(Text)
SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
FreeMemory(*szBuffer)
CompilerElse
AddGadgetItem(Gadget, -1 , Text)
CompilerEndIf
EndProcedure
; *****************************************************************************
If OpenWindow(0, 0, 0, 540, 260, "Richedit Unicode EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 5, 5, 530, 250)
SendMessage_(GadgetID(0), #EM_SETTEXTMODE, #TM_RICHTEXT, 0)
Global Notiz$
Global a$ = ""
a$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
a$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
a$ + "{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \'84Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \'84Baumwollburg\ldblquote bedeutet)\cf1\f0\par"
a$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €"
a$ + "}"
AddTextRTF(0, a$)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Gelöst! RTF-Text in Editorgadget importieren
Verfasst: 16.11.2024 12:30
von EmmJott
Herzlichen Dank! Wenn es Euch nicht gäbe, ...
Re: Gelöst! RTF-Text in Editorgadget importieren
Verfasst: 16.11.2024 13:26
von mk-soft
Kleines Update mit DataSection ...
Code: Alles auswählen
;-TOP
; *****************************************************************************
; AddTextRTF by mk-soft, v1.05, 27.03.2018
CompilerIf #PB_Compiler_Version < 550
Procedure Ascii(Text.s)
Protected *mem = AllocateMemory(StringByteLength(Text, #PB_Ascii) + 1)
If *mem
PokeS(*mem, Text, -1, #PB_Ascii)
EndIf
ProcedureReturn *mem
EndProcedure
Procedure UTF8(Text.s)
Protected *mem = AllocateMemory(StringByteLength(Text, #PB_UTF8) + 1)
If *mem
PokeS(*mem, Text, -1, #PB_UTF8)
EndIf
ProcedureReturn *mem
EndProcedure
CompilerEndIf
Procedure AddTextRTF(Gadget, Text.s , NewLine=#False)
If Left(Text, 5) <> "{\rtf"
Text = "{\rtf " + Text + "}"
EndIf
If NewLine
Text = Left(Text, Len(text) - 1) + "\line}"
EndIf
CompilerIf #PB_Compiler_Unicode
Protected hEdit = GadgetID(Gadget)
Protected ndx = GetWindowTextLength_(hEdit)
Protected *szBuffer = Ascii(Text)
SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
FreeMemory(*szBuffer)
CompilerElse
AddGadgetItem(Gadget, -1 , Text)
CompilerEndIf
EndProcedure
; ----
Procedure CatchTextRTF(Gadget, *szTextRTF)
If *szTextRTF
SendMessage_(GadgetID(Gadget), #WM_SETTEXT, 0, *szTextRTF)
EndIf
EndProcedure
; *****************************************************************************
CompilerIf #PB_Compiler_IsMainFile
If OpenWindow(0, 0, 0, 540, 260, "Richedit Unicode EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 5, 5, 530, 250)
SendMessage_(GadgetID(0), #EM_SETTEXTMODE, #TM_RICHTEXT, 0)
Global Notiz$
Global a$ = ""
a$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
a$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
a$ + "{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \'84Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \'84Baumwollburg\ldblquote bedeutet)\cf1\f0\par"
a$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €"
a$ + "}"
;AddTextRTF(0, a$)
CatchTextRTF(0, ?rtfText)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
DataSection
rtfText:
IncludeBinary "ReadMe.rtf"
Data.w 0
EndDataSection
CompilerEndIf