It is MS bug not PB
Code: Select all
Global HwndEditText,HwndEditText1
Global RTFPtr.l,a.s
Procedure StreamFileInCallback(dwCookie, pbBuff, cb, pcb)
result = 0
If RTFPtr>=?RTFEnd
cb = 0
result = 1
ElseIf RTFPtr+cb>=?RTFEnd
cb = ?RTFEnd-RTFPtr
EndIf
CopyMemory(RTFPtr, pbBuff, cb)
RTFPtr+cb
PokeL(pcb, cb)
ProcedureReturn result
EndProcedure
Procedure SendStream()
RTFPtr=?RTFStart
uFormat = #SF_RTF ;#SF_TEXT
edstr.EDITSTREAM
edstr\dwCookie = 0
edstr\dwError = 0
edstr\pfnCallback = @StreamFileInCallback()
SendMessage_(HwndEditText1, #EM_STREAMIN, uFormat, edstr)
EndProcedure
Procedure CreateEditText()
hInstance = GetModuleHandle_(0)
HwndEditText = CreateWindowEx_(#WS_EX_STATICEDGE,"EDIT","", #WS_VISIBLE | #WS_CHILDWINDOW | #ES_AUTOHSCROLL | #WS_VSCROLL | #ES_MULTILINE | #ES_WANTRETURN |#ES_NOHIDESEL, 50,50,300,300,WindowID(0),200,hInstance,0)
If OpenLibrary(0,"msftedit.dll")
Class_Name$ = "RichEdit50W"
ElseIf OpenLibrary(0,"Riched20.dll") And Class_Name$ = ""
Class_Name$ = "RichEdit20W"
ElseIf OpenLibrary(0,"Riched32.dll") And Class_Name$ = ""
Class_Name$ = "RichEdit"
Else
MessageRequester("Error","Sorry ,RichEdit Can not be created",#MB_ICONWARNING)
EndIf
HwndEditText1 = CreateWindowEx_(#WS_EX_STATICEDGE,Class_Name$,"", #WS_VISIBLE | #WS_CHILDWINDOW | #ES_AUTOHSCROLL | #WS_VSCROLL | #ES_MULTILINE | #ES_WANTRETURN |#ES_NOHIDESEL, 500,50,300,300,WindowID(0),300,hInstance,0)
EndProcedure
If OpenWindow(0,0,0,900,600,"Basic Text Control",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateEditText()
If CreatePopupMenu(0)
MenuItem(1, "Undo")
MenuItem(2, "Cut")
MenuItem(3, "Copy")
MenuItem(4, "Paste")
MenuBar()
OpenSubMenu("Options")
MenuItem(5, "Window...")
MenuItem(6, "Gadget...")
CloseSubMenu()
MenuBar()
MenuItem( 7, "Quit")
EndIf
;SendMessage_(HwndEditText1,#EM_SETREADONLY, 1, 0) ;Edit OFF
;SendMessage_(HwndEditText1,#EM_SETREADONLY, 0, 0) ;Edit ON
SendMessage_(HwndEditText,#EM_SETTARGETDEVICE,0, 0) ;WordWrap ON
;SendMessage_(HwndEditText1, #EM_SETTARGETDEVICE, 0, 1) ;WordWrap OFF
SendMessage_(HwndEditText1,#EM_SETTARGETDEVICE,0, 0)
ButtonGadget(1,50,500,80,24,"Paste")
EndIf
Text$="Line :"+Str(i)+Chr(13)+Chr(10)
For i = 1 To 31
SendMessage_(HwndEditText,#EM_REPLACESEL,0,Text$)
Next
;SendMessage_(HwndEditText1, #EM_SETTEXTMODE, #TM_PLAINTEXT, 0) ;Plain Text
;SendMessage_(HwndEditText1, #EM_SETTEXTMODE, #TM_RICHTEXT, 0) ;RTF Format
;********************************* ( Send RTF direct )***********************************************
a.s="{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue0;}"
a=a+"{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\fs20 Hello, this is \cf1\b\fs32 RTF\cf2\b0\fs20 direct!\cf0\par}"
*MemoryBuffer = AllocateMemory(Len(a.s)+1)
PokeS(*MemoryBuffer, a.s, Len(a.s)+1,#PB_Ascii)
SendMessage_(HwndEditText1,#EM_REPLACESEL,0,PeekS(*MemoryBuffer ,Len(a.s)+1,#PB_Unicode))
;****************************************************************************************************
;***************************************( Send Stream RTF )******************************************
;SendStream() ;For Test.rtf
;****************************************************************************************************
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Q = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
SetFocus_(HwndEditText1)
SendMessage_(HwndEditText1,#WM_PASTE,0,0)
SendMessage_(HwndEditText1,#EM_REPLACESEL,0,#CRLF$)
EndSelect
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 1
SendMessage_(GetFocus_(),#WM_UNDO,0,0)
Case 2
SendMessage_(GetFocus_(),#WM_CUT,0,0)
Case 3
SendMessage_(GetFocus_(),#WM_COPY,0,0)
Case 4
SendMessage_(GetFocus_(),#WM_PASTE,0,0)
Case 7
Q = 1
EndSelect
Case #WM_RBUTTONDOWN
DisplayPopupMenu(0, WindowID(0))
EndSelect
Until Q = 1
CloseLibrary(0)
End
DataSection
RTFStart:
IncludeBinary "test.rtf" ; change this path to you own file!
RTFEnd:
EndDataSection