Getting rich text from EditorGadget

Just starting out? Need help? Post your questions and find answers here.
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Getting rich text from EditorGadget

Post by Dude »

Hi dudes! :)

I know how to set RTF (rich text) in an EditorGadget, but I need to be able to get that text in its raw form again later.

Below is what I want to achieve. How can it be done? Thank you in advance.

Code: Select all

rtf$="{\rtf1\ansi\ansicpg1252\deff0\uc1\pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

OpenWindow(0,200,200,200,100,"test",#PB_Window_SystemMenu)

EditorGadget(0,10,10,180,50)
SetGadgetText(0,rtf$)

t$=GetGadgetText(0)
TextGadget(1,10,70,180,20,t$) ; Should show: {\rtf1\ansi\ ...

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: Getting rich text from EditorGadget

Post by RSBasic »

Image
Image
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Re: Getting rich text from EditorGadget

Post by Dude »

Is there a way without using files? Because that seems like an overkill, and my app doesn't use files.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4636
Joined: Sun Apr 12, 2009 6:27 am

Re: Getting rich text from EditorGadget

Post by RASHAD »

Code: Select all

Global plTxt$,str.EDITSTREAM

rtf$="{\rtf1\ansi\ansicpg1252\deff0\uc1\pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

Procedure StreamCB(dwCookie, pbBuff, cb, pcb)
  If cb
    plTxt$ + PeekS(pbBuff, cb, #PB_Ascii)
  EndIf
  pcb = cb
EndProcedure 

OpenWindow(0,0,0,200,200,"test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)

EditorGadget(0,10,10,180,50)
TextGadget(1,10,70,180,100,"") ; Should show: {\rtf1\ansi\ ...

SetGadgetText(0,rtf$)

str\dwCookie = 0
str\dwError = 0
str\pfnCallback = @StreamCB()
SendMessage_(GadgetID(0), #EM_STREAMOUT, #SF_RTF, @str)
SetGadgetText(1, plTxt$)

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Egypt my love
juror
Enthusiast
Enthusiast
Posts: 228
Joined: Mon Jul 09, 2007 4:47 pm
Location: Courthouse

Re: Getting rich text from EditorGadget

Post by juror »

You can also get it via the clipboard, but that will modify clipboard content.
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Re: Getting rich text from EditorGadget

Post by Dude »

Hi juror; the clipboard isn't an option, for the reason you noted. :)

Rashad, thank you again for helping me. 8) I made your example into some nice self-contained code:

Code: Select all

Global EditorRawRichText$

Procedure GetEditorRawRichTextCB(dwCookie,pbBuff,cb,pcb)
  If cb
    EditorRawRichText$+PeekS(pbBuff,cb,#PB_Ascii)
  EndIf
  pcb=cb
EndProcedure

Procedure.s GetEditorRawRichText(gad)
  EditorRawRichText$=""
  str.EDITSTREAM\dwCookie=0
  str\dwError=0
  str\pfnCallback=@GetEditorRawRichTextCB()
  SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_RTF,@str)
  ProcedureReturn EditorRawRichText$
EndProcedure

rtf$="{\rtf1\ansi\ansicpg1252\deff0\uc1\pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

OpenWindow(0,0,0,200,150,"test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)

EditorGadget(0,10,10,180,50)
SetGadgetText(0,rtf$)

TextGadget(1,10,70,180,100,"") ; Shows: {\rtf1\ansi\ ...
SetGadgetText(1,GetEditorRawRichText(0))

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
firace
Addict
Addict
Posts: 899
Joined: Wed Nov 09, 2011 8:58 am

Re: Getting rich text from EditorGadget

Post by firace »

RASHAD wrote: Fri Sep 22, 2017 2:48 pm

Code: Select all

Global plTxt$,str.EDITSTREAM

rtf$="{\rtf1\ansi\ansicpg1252\deff0\uc1\pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

Procedure StreamCB(dwCookie, pbBuff, cb, pcb)
  If cb
    plTxt$ + PeekS(pbBuff, cb, #PB_Ascii)
  EndIf
  pcb = cb
EndProcedure 

OpenWindow(0,0,0,200,200,"test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)

EditorGadget(0,10,10,180,50)
TextGadget(1,10,70,180,100,"") ; Should show: {\rtf1\ansi\ ...

SetGadgetText(0,rtf$)

str\dwCookie = 0
str\dwError = 0
str\pfnCallback = @StreamCB()
SendMessage_(GadgetID(0), #EM_STREAMOUT, #SF_RTF, @str)
SetGadgetText(1, plTxt$)

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Nice code!
But I can't manage to display accented characters properly in recent PB versions - any ideas? (The below code *should* display 'Repééé')

Code: Select all

Global plTxt$,str.EDITSTREAM

rtf$="{\rtf1\ansi\ansicpg1252\deff0\uc1 Rep\'e9\'e9\'e9\par \pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

Procedure StreamCB(dwCookie, pbBuff, cb, pcb)
  If cb
    plTxt$ + PeekS(pbBuff, cb, #PB_Ascii)
  EndIf
  pcb = cb
EndProcedure 

OpenWindow(0,0,0,200,200,"test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)

EditorGadget(0,10,10,180,50)
TextGadget(1,10,70,180,100,"") ; Should show: {\rtf1\ansi\ ...

SetGadgetText(0,rtf$)

str\dwCookie = 0
str\dwError = 0
str\pfnCallback = @StreamCB()
SendMessage_(GadgetID(0), #EM_STREAMOUT, #SF_RTF, @str)
SetGadgetText(1, plTxt$)

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Olli
Addict
Addict
Posts: 1071
Joined: Wed May 27, 2020 12:26 pm

Re: Getting rich text from EditorGadget

Post by Olli »

I'm trying to forge the original work...

Code: Select all

Global plTxt$,str.EDITSTREAM

rtf$="{\rtf1\ansi\ansicpg1252\deff0\uc1 Rep\'e9\'e9\'e9\par \pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

Procedure StreamCB(dwCookie, pbBuff, cb, pcb)
  If cb
    plTxt$ + PeekS(pbBuff, cb)
  EndIf
  pcb = cb
EndProcedure 

OpenWindow(0,0,0,200,200,"test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)

EditorGadget(0,10,10,180,50)
TextGadget(1,10,70,180,100,"") ; Should show: {\rtf1\ansi\ ...

SetGadgetText(0,rtf$)

str\dwCookie = 0
str\dwError = 0
str\pfnCallback = @StreamCB()
SendMessage_(GadgetID(0), #EM_STREAMOUT, #SF_RTF, @str)
SetGadgetText(1, plTxt$)

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
firace
Addict
Addict
Posts: 899
Joined: Wed Nov 09, 2011 8:58 am

Re: Getting rich text from EditorGadget

Post by firace »

OK, managed to make it work using API (#WM_SETTEXT) instead of SetGadgetText...
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4636
Joined: Sun Apr 12, 2009 6:27 am

Re: Getting rich text from EditorGadget

Post by RASHAD »

Simple and direct
No need for Stream process

Code: Select all

rtf$ = "{\rtf1\ansi\ansicpg1252\deff0\uc1 Rep\'e9\'e9\'e9\par \pard\sa200\sl276\b\f0\fs22 do\b0  \i re\i0  \ul mi}"

OpenWindow(0,0,0,200,200,"test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)

EditorGadget(0,10,10,180,50)
TextGadget(1,10,70,180,100,"")

*Buffer = AllocateMemory(Len(rtf$)+1)
 PokeS(*Buffer, rtf$, Len(rtf$)+1,#PB_Ascii)  
 SendMessage_(GadgetID(0),#EM_REPLACESEL,0,PeekS(*Buffer ,Len(rtf$)+1,#PB_Unicode))
 
 SetGadgetText(1, rtf$)   
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Egypt my love
Olli
Addict
Addict
Posts: 1071
Joined: Wed May 27, 2020 12:26 pm

Re: Getting rich text from EditorGadget

Post by Olli »

I failed ! Thank you Rashad !
Post Reply