EditorGadget with more functions [Windows]

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

EditorGadget with more functions [Windows]

Post by RASHAD »

It is a start needs more to do
- Undo - Redo
- Cut - Copy - Paste
- Justify text : Left - Right - Center - Full
- Set Page size and Page Margins
- Insert Image at Caret position ( No OLE )

And PRINT

Code: Select all

#PFA_JUSTIFY           = $4
#PFA_FULL_INTERWORD    = $4
#PFA_FULL_INTERLETTER  = $5
#PFA_FULL_SCALED       = $6
#PFA_FULL_GLYPHS       = $7
#PFA_SNAP_GRID         = $8

#EC_LEFTMARGIN  = $1
#EC_RIGHTMARGIN = $2
#EC_USEFONTINFO = $FFFF
#EM_SETMARGINS  = $D3
#EM_GETMARGINS  = $D4

#CAPTUREBLT  = $40000000

UseJPEGImageEncoder()
UsePNGImageEncoder()

Global width,height,ImX,ImY

Procedure SetAlignment(Gad, Align)
alg.PARAFORMAT2
alg\dwMask = #PFM_ALIGNMENT
alg\cbSize = SizeOf(alg)
alg\wAlignment = Align
SendMessage_(GadgetID(Gad), #EM_SETTYPOGRAPHYOPTIONS, #TO_ADVANCEDTYPOGRAPHY, #TO_ADVANCEDTYPOGRAPHY)
SendMessage_(GadgetID(Gad), #EM_SETPARAFORMAT, 0, alg)
EndProcedure

Procedure SetMargin(Gad, PageW,PageH, LeftM, TopM, RightM, BottomM)
r.RECT
r\left = LeftM
r\top = TopM
r\right = PageW - RightM
r\bottom = PageH - BottomM
width = r\right - r\left
height = r\bottom - r\top
SendMessage_(GadgetID(Gad), #EM_SETRECTNP, 0, r)
;SendMessage_(GadgetID(Gad), #EM_SETRECT, 0, r)
EndProcedure

Procedure WndProc(hwnd, uMsg, wParam, lParam)
 result = #PB_ProcessPureBasicEvents
 Select uMsg
   
   Case #WM_NOTIFY      
      
   Case #WM_GETMINMAXINFO        

   Case #WM_SIZE,#WM_MOVE,#WM_PAINT
        GetClientRect_(WindowID(0),r.RECT)
        ResizeGadget(1,10,10,r\right-20,r\bottom-60)        
        ResizeGadget(2,10,r\bottom-32,r\right-20,r\bottom-60)
        If IsGadget(20)
           ResizeGadget(20,GadgetX(1)+ImX,GadgetY(1)+ImY,#PB_Ignore, #PB_Ignore)
        EndIf   

   EndSelect   
  ProcedureReturn result 
EndProcedure


CreateImage(1, 250, 350)
StartDrawing(ImageOutput(1))
  For x = 0 To 249
    For y = 0 To 349
      Plot(x,y, RGB(x,y,x*y))
    Next
  Next
StopDrawing()

If OpenWindow(0, 0, 0,500,400, "EditorGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered| #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
  If CreatePopupMenu(0)
      MenuItem(1, "Undo")
      MenuItem(2, "Redo")
      MenuItem(3, "Cut")
      MenuItem(4, "Copy")
      MenuItem(5, "Paste")
      MenuBar()
      OpenSubMenu("Options")
        MenuItem(6, "Window...")
        MenuItem(7, "Gadget...")
      CloseSubMenu()
      MenuBar()
      MenuItem( 8, "Quit")
  EndIf
  EditorGadget(1, 10, 10, 480, 350)
  SendMessage_(GadgetID(1), #EM_CANUNDO, 0, 0)
  SendMessage_(GadgetID(1), #EM_CANREDO, 0, 0)
  SendMessage_(GadgetID(1), #EM_SETTARGETDEVICE, 0, 0)
  SetMargin(1,450,330,10,10,20,50)
  LoadFont(0,"Tahoma",14,#PB_Font_HighQuality)
  SetGadgetFont(1,FontID(0))
  
  ContainerGadget(2,10,370,480,22)
    ButtonGadget(3,0,0,60,22,"Left")
    ButtonGadget(4,65,0,60,22,"Center")
    ButtonGadget(5,130,0,60,22,"Right")
    ButtonGadget(6,195,0,60,22,"Full")
    ButtonGadget(7,300,0,70,22,"Insert Image")
    ButtonGadget(8,375,0,60,22,"Print")
  CloseGadgetList()
  
  SetWindowCallback(@WndProc())
  
Repeat
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1       
      
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 3 
              SetAlignment(1, #PFA_LEFT)
              SetActiveGadget(1)
           
           Case 4
              SetAlignment(1,#PFA_CENTER)
              SetActiveGadget(1)
           
           Case 5
              SetAlignment(1,#PFA_RIGHT)
              SetActiveGadget(1)
              
           Case 6
              SetAlignment(1,#PFA_JUSTIFY)
              SetActiveGadget(1)
              
              
           Case 7
                GrabImage(1,2,0,0,200,200)
                GetCaretPos_(p.POINT)
                ImageGadget(20,p\x,p\y,200,200,ImageID(2))
                SetParent_(GadgetID(20),GadgetID(1))
                ImX = GadgetX(20)
                ImY = GadgetY(20)
              
           Case 8
                GetClientRect_(GadgetID(1),rc.RECT)
                ClientToScreen_(GadgetID(1),rc)
                If width > 0 And height > 0
                  width+20
                  height+20
                  hBitmap = CreateImage(0,width,height)
                  hdc = StartDrawing(ImageOutput(0))
                  SelectObject_(hdc, hBitmap)
                  BitBlt_(hdc, 0, 0, width+20, height+20, GetDC_(GetDesktopWindow_()), rc\left, rc\top, #SRCCOPY | #CAPTUREBLT)
                  ;StretchBlt_(hdc, 0, 0, width*4, height*4, GetDC_(GetDesktopWindow_()), rc\left, rc\top,width,height,#SRCCOPY | #CAPTUREBLT)
                  StopDrawing()
                EndIf
                DeleteDC_(hdc)
                ;SaveImage(0,"F:\Print_Test.png",#PB_ImagePlugin_PNG)
                If PrintRequester()
                  If StartPrinting("PureBasic Test")
                    If StartDrawing(PrinterOutput())
                         DrawImage(ImageID(0), 0, 0,width*4,height*4)
                       StopDrawing()
                    EndIf                      
                    StopPrinting()
                  EndIf
                EndIf
                       
          EndSelect
          
      Case #PB_Event_Menu      
          Select EventMenu()              
              Case 1
                  SendMessage_(GadgetID(1),#EM_UNDO,0,0)
                  ;SendMessage_(GetFocus_(),#WM_UNDO,0,0)
                  
              Case 2
                  SendMessage_(GadgetID(1),#EM_REDO,0,0)

              Case 3
                  SendMessage_(GetFocus_(),#WM_CUT,0,0)
    
              Case 4
                  SendMessage_(GetFocus_(),#WM_COPY,0,0)
    
              Case 5
                  SendMessage_(GadgetID(1),#WM_PASTE,0,0)
    
              Case 8
                Quit = 1

               
            EndSelect
            
      Case #WM_RBUTTONDOWN
            DisplayPopupMenu(0, WindowID(0))         
      
          
  EndSelect
  
  Until Quit = 1
EndIf

Have fun
Egypt my love
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: EditorGadget with more functions [Windows]

Post by ts-soft »

thx, here can you found a OOP-Like version with most features of RTF.
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: EditorGadget with more functions [Windows]

Post by RASHAD »

Got it thanks Thomas
Egypt my love
Post Reply