Re: RichEdit Functions (OOP)
Posted: Fri Jul 29, 2011 5:08 am
That would be good ts, as I have always wanted to have the images although the file size can get a little bit large. 

http://www.purebasic.com
https://www.purebasic.fr/english/
added many new examples and a spellchecker!Historie wrote:; Version 1.8, July 31, 2011 (neotoma)
; added: IsAlignJustify(),GetWordUnderCursorStart(), GetWordUnderCursorEnd()
; added: GetScrollPosX(), GetScrollPosY(),SetScrollPos(), SetLink()
; added: SetUndoLimit()
; modified : GetWordAtPosition(), GetWordUnderCursor()
; added again: SetTextBackColor()
; added: AppendText()
Thanks to jacobus for some code-examples.Historie wrote:; Version 1.9, August 01, 2011
; added: SetInterface() for ImageSupport
; added: SetImage()
Code: Select all
EnableExplicit
XIncludeFile "RichEdit.pbi"
Define.RichEdit Edit
OpenWindow(0, #PB_Ignore, #PB_Ignore, 600, 100, "Test Image")
Edit = New_RichEdit(0, 0, 600, 100)
Edit\SetInterface()
Edit\SetText("This is a picture: ")
LoadImage(0, #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp")
Edit\SetImage(ImageID(0))
Edit\SetText(" in a EditorGadget!" + #CRLF$)
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Code: Select all
Procedure RichEdit_Print(*this.RichEditClassTemplate, DocName.s = "pbprint", dialog.i = #False)
Protected.PRINTDLG lppd
Protected.RECT cRect
Protected.FORMATRANGE FormatRange
Protected.Docinfo Docinfo
Protected LastChar.l, MaxLen.l, OldMapMode.l, OffsetX.l, OffsetY.l, HorzRes.l, VertRes.l
Protected DC.i, i.i = 1
If dialog
lppd\lStructsize = SizeOf(PRINTDLG)
lppd\Flags = #PD_ALLPAGES | #PD_HIDEPRINTTOFILE | #PD_NOSELECTION | #PD_RETURNDC
If PrintDlg_(@lppd)
DC = lppd\hDC
EndIf
Else
DC = DefaultPrinter()
EndIf
If DC
Docinfo\cbSize = SizeOf(Docinfo)
Docinfo\lpszDocName = @DocName
StartDoc_(DC, Docinfo)
MaxLen = Len(GetGadgetText(*this\ID)) - SendMessage_(*this\hWnd, #EM_GETLINECOUNT, 0, 0)
OldMapMode = GetMapMode_(DC)
SetMapMode_(DC, #MM_TWIPS)
OffsetX = GetDeviceCaps_(DC, #PHYSICALOFFSETX)
OffsetY = - GetDeviceCaps_(DC, #PHYSICALOFFSETY)
HorzRes = GetDeviceCaps_(DC, #HORZRES)
VertRes = - GetDeviceCaps_(DC, #VERTRES)
SetRect_(cRect, OffsetX, OffsetY, HorzRes, VertRes)
DPtoLP_(DC, cRect, 2)
SetMapMode_(DC, OldMapMode)
FormatRange\hDC = DC
FormatRange\hdcTarget = DC
FormatRange\rc\left = cRect\left
FormatRange\rc\top = cRect\top
FormatRange\rc\right = cRect\right
FormatRange\rc\bottom = cRect\bottom
FormatRange\rcPage\left = cRect\left
FormatRange\rcPage\top = cRect\top
FormatRange\rcPage\right = cRect\right
FormatRange\rcPage\bottom = cRect\bottom
Repeat
StartPage_(DC)
FormatRange\chrg\cpMax = - 1
LastChar = SendMessage_(*this\hWnd, #EM_FORMATRANGE, #True, @FormatRange)
FormatRange\chrg\cpMin = LastChar
SendMessage_(*this\hWnd, #EM_DISPLAYBAND, 0, cRect)
i + 1
EndPage_(DC)
Until LastChar >= MaxLen Or LastChar = -1
EndDoc_(DC)
SendMessage_(*this\hWnd, #EM_FORMATRANGE, 0, 0)
EndIf
EndProcedure
Here a small example to drop image or imagefile to editorgadget:Historie wrote:; Version 2.0, August 03, 2011
; fixed bug in Print method
; added Unicode-Support for SetImage
Code: Select all
EnableExplicit
XIncludeFile "RichEdit.pbi"
UsePNGImageDecoder()
UseJPEGImageDecoder()
Define.RichEdit Edit
Define.s Files, File, Ext
Define.i i, j
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "EditorGadget with ImageDrop-Support", #PB_Window_SizeGadget | #PB_Window_SystemMenu)
Edit = New_RichEdit(5, 5, 630, 470)
Edit\SetInterface()
EnableGadgetDrop(Edit\GetID(), #PB_Drop_Image | #PB_Drop_Files, #PB_Drag_Copy | #PB_Drag_Move)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_SizeWindow
ResizeGadget(Edit\GetID(), #PB_Ignore, #PB_Ignore, WindowWidth(0) - 10, WindowHeight(0) - 10)
Case #PB_Event_GadgetDrop
If EventGadget() = edit\GetID()
Select EventDropType()
Case #PB_Drop_Image
If EventDropImage(0)
Edit\SetImage(ImageID(0))
EndIf
Case #PB_Drop_Files
Files = EventDropFiles()
j = CountString(Files, #LF$) + 1
For i = 1 To j
File = StringField(Files, i, #LF$)
Ext = LCase(GetExtensionPart(File))
Select Ext
Case "bmp", "jpg", "png"
If LoadImage(0, File)
Edit\SetImage(ImageID(0))
EndIf
Case "rtf"
Edit\LoadRTF(File, #True)
Case "txt"
Edit\LoadText(File, #True)
EndSelect
Next
EndSelect
EndIf
EndSelect
ForEver
Code: Select all
UsePNGImageDecoder() ; only required for loadimage (not for dropimage!)
UseJPEGImageDecoder() ; only required for loadimage (not for dropimage!)
Code: Select all
Define.s File, Files, Ext
Define.i Result, i, mx, my, align, j
Code: Select all
Edit\SetInterface() ; this enables the image-support and shows images in rtf-files
EnableGadgetDrop(Edit\GetID(), #PB_Drop_Image | #PB_Drop_Files, #PB_Drag_Copy | #PB_Drag_Move)
Code: Select all
Case #PB_Event_GadgetDrop
If EventGadget() = edit\GetID()
Select EventDropType()
Case #PB_Drop_Image
If EventDropImage(0)
Edit\SetImage(ImageID(0))
EndIf
Case #PB_Drop_Files
Files = EventDropFiles()
j = CountString(Files, #LF$) + 1
For i = 1 To j
File = StringField(Files, i, #LF$)
Ext = LCase(GetExtensionPart(File))
Select Ext
Case "bmp", "jpg", "png"
If LoadImage(0, File)
Edit\SetImage(ImageID(0))
EndIf
Case "rtf"
Edit\LoadRTF(File, #True)
Case "txt"
Edit\LoadText(File, #True)
EndSelect
Next
EndSelect
EndIf
I'm still using PB4.51 until PB4.6 gets out of beta this time.Code: Select all
Place these lines after - Edit = New_RichEdit(0, 0, 0, 0); die grösse können wir ignorieren, passt sich im SizeEvent an!... Code: Edit\SetInterface() ; this enables the image-support and shows images in rtf-files EnableGadgetDrop(Edit\GetID(), #PB_Drop_Image | #PB_Drop_Files, #PB_Drag_Copy | #PB_Drag_Move)
Code: Select all
EnableExplicit
XIncludeFile "RichEdit.pbi"
Define.RichEdit Edit
Define.s Text
Macro FE()
While WindowEvent() : Wend
Delay(2000)
EndMacro
OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 140, "")
Edit = New_RichEdit(0, 0, WindowWidth(0), WindowHeight(0))
Edit\SetReadOnly(#True)
Edit\SetLeftMargin(5)
Edit\SetRightMargin(5)
; adding some text
Text = #CRLF$ + "Feel the ..Pure.. Power" + #CRLF$ + #CRLF$ + "Example ©2011 by ts-soft" + #CRLF$
; format the text
Edit\SetAlignment(#PB_Text_Center)
Edit\SetFont("Comic Sans MS")
Edit\SetText(Text)
Edit\SetSelection(1, 1)
Edit\SetFontSize(16)
Edit\SetFontStyle(#PB_Font_Bold)
Edit\SetTextColor(#Blue)
Debug Edit\GetTextColor() ; <---- Here try to get the color that was set above, 0 is the result
FE()
; make "..Pure.." big and colored
If Edit\FindText("..Pure..")
FE()
Edit\SetTextColor(#Yellow, #Blue)
Edit\SetFontSize(26)
EndIf
FE()
; make Copyright small, left align, Arial, black
If Edit\FindText("Example ©2011 by ts-soft")
FE()
Edit\SetFont("Arial")
Edit\SetFontSize(8)
Edit\SetFontStyle()
Debug Edit\GetTextColor()
Edit\SetTextColor(#Black)
Edit\SetCursorPos(1, 4)
FE()
Edit\SetAlignment()
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow