Update :Desktop Publisher [Early stage 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

Update :Desktop Publisher [Early stage Windows]

Post by RASHAD »

Tested with PB 4.61 x86 - x64 & Win 7 x64

- Can insert up to 20 different objects
- Alt + Arrow Keys for smooth moving
- Control + Arrow Keys for smooth resizing
- Select Object then draw a rectangle for speed moving or resizing
- Can save to Image
- Can print

To do :
- Control the Z-Order of the objects backward or forward
- Insert table
- Insert XLS Chart [If I can :) ]

Have fun

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 hhook,sel.RECT,oldCallback,hdc,drwflag,xt,yt,xb,yb,Ingad,Outgad,Lastgad,oldgad
Global Dim Gadinf(20,2)

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
;ResizeGadget(1,10,10,width+LeftM+RightM,height+TopM+BottomM)   
;SendMessage_(GadgetID(Gad), #EM_SETRECTNP, 0, r)
SendMessage_(GadgetID(Gad), #EM_SETRECT, 0, r)
EndProcedure


Procedure MHookProc(nCode, wParam, lParam)
  *ms.MOUSEHOOKSTRUCT = lParam
  Select wParam
    Case #WM_RBUTTONDOWN
            DisplayPopupMenu(0, WindowID(0))
            
    Case #WM_LBUTTONDOWN
           If Ingad = 21
              GetWindowRect_(GadgetID(21), r.RECT)
              ClipCursor_(r)
              GetCursorPos_(p.POINT)
              ScreenToClient_(GadgetID(21), p)
              SetRect_(sel,p\x,p\y,p\x,p\y) 
              hdc = GetDC_(GadgetID(21))
              If Not pen
                pen = CreatePen_(#PS_DASH	, 1, #Cyan)
                brush = GetStockObject_(#NULL_BRUSH)
              EndIf
              SelectObject_(hdc, pen)
              SelectObject_(hdc, brush)
              SetROP2_(hdc, #R2_XORPEN)
              Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
              drwflag = 1
            EndIf
          If Ingad <> 0
             Outgad = Ingad
          EndIf          
          
    Case #WM_LBUTTONUP
            ClipCursor_(0)
            ReleaseDC_(GadgetID(21), hdc)
           If drwflag = 1
            xt = sel\left
            yt = sel\top
            xb = sel\right
            yb = sel\bottom
            drwflag = 0         
           EndIf                      
                        
    Case #WM_MOUSEMOVE          
          GetCursorPos_(p.POINT)
          ScreenToClient_(GadgetID(21), p)
          hGad = ChildWindowFromPoint_ (GadgetID(21), p\y<< 32+p\x)
          Ingad = GetDlgCtrlID_(hGad)
          Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
          sel\right = p\x
          sel\bottom = p\y
          Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
           If Ingad < 20 And Ingad> 0 And drwflag = 0        
;             hdc = GetDC_(GadgetID(21))
;             If Not pen2
;               pen2 = CreatePen_(#PS_DOT, 2, #Red)
;               brush2 = GetStockObject_(#NULL_BRUSH)
;             EndIf
;             SelectObject_(hdc, pen2)
;             SelectObject_(hdc, brush2)
;             Rectangle_(hdc, GadgetX(Ingad)-2,GadgetY(Ingad)-2,GadgetWidth(Ingad)+GadgetX(Ingad)+4, GadgetHeight(Ingad)+GadgetY(Ingad)+4)
;             ReleaseDC_(GadgetID(21), hdc)
              Lastgad = Ingad
              ;rectflag = 1
            EndIf
;           If ingad <> oldgad And rectflag = 1
;                InvalidateRect_(GadgetID(21),0,1)
;                rectflag = 0                 
;           EndIf
;           If IsGadget(Ingad)
;             oldgad = Ingad
;           EndIf
          

  EndSelect
  ProcedureReturn result
EndProcedure


CreateImage(0, 250, 350)
StartDrawing(ImageOutput(0))
  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,600,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(21, 10, 10, 480, 320)
  SendMessage_(GadgetID(21), #EM_CANUNDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_CANREDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_SETTARGETDEVICE, 0, 0)
  ;SetMargin(21,450,330,10,10,20,50)
;   SetGadgetColor(1, #PB_Gadget_BackColor, $E8FEFE)
;   SetGadgetColor(1, #PB_Gadget_FrontColor, #Blue)
  LoadFont(0,"Tahoma",14,#PB_Font_HighQuality)
  SetGadgetFont(21,FontID(0))
  
  ContainerGadget(22,10,315,480,40)
    ButtonGadget(23,0,30,60,22,"Left")
    ButtonGadget(24,65,30,60,22,"Center")
    ButtonGadget(25,130,30,60,22,"Right")
    ButtonGadget(26,195,30,60,22,"Full")
    ComboBoxGadget(27,275,30,70,22,#PB_ComboBox_Editable)
      AddGadgetItem(27, -1, "      Image")
      AddGadgetItem(27, -1, "    Text Box")
      AddGadgetItem(27, -1, "      Table")
      AddGadgetItem(27, -1, "       Chart")
    ButtonGadget(28,350,30,40,22,"Insert")
    ButtonGadget(29,395,30,40,22,"Resize")
    ButtonGadget(30,440,30,40,22,"Move")
    ButtonGadget(31,485,30,40,22,"Print")
    ButtonGadget(32,530,30,50,22,"Refresh")
    TextGadget(33,10,0,200,22,"No Selected Gadget !")
    SetGadgetFont(33,FontID(0))
    SetGadgetColor(33,#PB_Gadget_FrontColor,#Red)
    HideGadget(33,1)
  CloseGadgetList()
  
  SetGadgetState(27, 0)
  
  lpdwProcessId = GetWindowThreadProcessId_(GadgetID(21), 0)
  hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),lpdwProcessId)
  
Repeat
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1       
      
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 21
                                
           Case 23 
                SetAlignment(Outgad, #PFA_LEFT)
                           
           Case 24
                SetAlignment(Outgad,#PFA_CENTER)
           
           Case 25
                SetAlignment(Outgad,#PFA_RIGHT)
                              
           Case 26
                SetAlignment(Outgad,#PFA_JUSTIFY)         
              
           Case 27
                Result = GetGadgetState(27)
                
           Case 28
                If xt <> xb
                    If xt > xb
                        Swap xt,xb              
                    EndIf
                    If yt > yb
                        Swap yt,yb
                    EndIf                
                    ImN + 1                    
                    If Result = 0
                        CopyImage(0,ImN)
                        ResizeImage(ImN,xb-xt,yb-yt)
                        ImageGadget(ImN,xt,yt,xb-xt,yb-yt,ImageID(ImN))                        
                        Imageflag = 1
                    ElseIf Result = 1
                         EditorGadget(ImN,xt,yt,xb-xt,yb-yt)
                         SendMessage_(GadgetID(ImN), #EM_SETTARGETDEVICE, 0, 0)
                         ;SetClassLongPtr_(GadgetID(ImN),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
                         Textflag = 0
                    EndIf
                    SetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE, GetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE) |#WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(ImN), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE| #SWP_SHOWWINDOW|#SWP_NOACTIVATE)
                    SetParent_(GadgetID(ImN),GadgetID(21))
                    GadInf(ImN,0) = GadgetX(ImN)
                    GadInf(ImN,1) = GadgetY(ImN)
                    GadInf(ImN,2) = Result
                    InvalidateRect_(GadgetID(21),0,1)
                EndIf
                
           Case 29
                If IsGadget(Lastgad)
                    HideGadget(33,1)
                    ResizeImage(Lastgad,xb-xt,yb-yt)
                    ResizeGadget(Lastgad,xt,yt,xb-xt,yb-yt)
                    SetGadgetState(Lastgad,ImageID(Lastgad))
                    GadInf(Lastgad,0) = xt
                    GadInf(Lastgad,1) = yt
                    InvalidateRect_(GadgetID(21),0,1)
                Else
                    HideGadget(33,0)
                EndIf 
           
           Case 30
                 If IsGadget(Lastgad)
                      HideGadget(33,1)
                      ResizeGadget(Lastgad,xt,yt,GadgetWidth(Lastgad),GadgetHeight(Lastgad))
                      GadInf(Lastgad,0) = xt
                      GadInf(Lastgad,1) = yt
                      InvalidateRect_(GadgetID(21),0,1)
                  Else
                      HideGadget(33,0)
                  EndIf
                
           Case 31  
                GetClientRect_(GadgetID(21),rc.RECT)
                ClientToScreen_(GadgetID(21),rc)
                ;If width > 0 And height > 0
                  hBitmap = CreateImage(0,GadgetWidth(1),GadgetHeight(1))
                  hdc = StartDrawing(ImageOutput(0))
                  SelectObject_(hdc, hBitmap)
                  BitBlt_(hdc, 0, 0, GadgetWidth(1),GadgetHeight(1), 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
           Case 32
                 InvalidateRect_(GadgetID(21),0,1)
                                        
          EndSelect
          
      Case #PB_Event_Menu      
          Select EventMenu()              
              Case 1
                  SendMessage_(GadgetID(21),#EM_UNDO,0,0)
                  ;SendMessage_(GetFocus_(),#WM_UNDO,0,0)
                  
              Case 2
                  SendMessage_(GadgetID(21),#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_SIZE,#WM_MOVE,#WM_PAINT
            GetClientRect_(WindowID(0),r.RECT)
            ResizeGadget(21,10,10,r\right-20,r\bottom-80)        
            ResizeGadget(22,10,r\bottom-60,r\right-20,r\bottom-80)
              For  i = 1 To 20
                If IsGadget(i)
                  ResizeGadget(i,GadInf(i,0),GadInf(i,1),#PB_Ignore, #PB_Ignore)
                Else
                  Break
                EndIf
              Next
            
            
      Case #WM_MOUSEMOVE
            SetCursor_(LoadCursor_(0,#IDC_ARROW))            
    
            
      Case #WM_CHAR
            ;Debug "#CHAR:    " + Str(EventwParam())
            
             
      Case #WM_KEYDOWN
          If GetAsyncKeyState_(#VK_CONTROL) & $8000 = 32768 And IsGadget(Lastgad)
                If EventwParam() = 37  And GadgetX(Lastgad) >= 0
                   ResizeGadget(Lastgad,GadgetX(Lastgad)+1,#PB_Ignore,GadgetWidth(Lastgad)-2, #PB_Ignore)
                   If GadInf(Lastgad,2) = 0
                      FreeImage(Lastgad)
                      CopyImage(0,Lastgad)
                      ResizeImage(Lastgad,GadgetWidth(Lastgad)-1,GadgetHeight(Lastgad))
                      SetGadgetState(Lastgad,ImageID(Lastgad))
                   EndIf
                ElseIf EventwParam() =39
                   ResizeGadget(Lastgad,GadgetX(Lastgad)-1,GadgetY(Lastgad),GadgetWidth(Lastgad)+2, #PB_Ignore)
                   If GadInf(Lastgad,2) = 0
                      FreeImage(Lastgad)
                      CopyImage(0,Lastgad)
                      ResizeImage(Lastgad,GadgetWidth(Lastgad)+1,GadgetHeight(Lastgad))
                      SetGadgetState(Lastgad,ImageID(Lastgad))
                   EndIf
                ElseIf EventwParam() =38 And GadgetY(Lastgad) >= 0
                   ResizeGadget(Lastgad,GadgetX(Lastgad),GadgetY(Lastgad)+1,GadgetWidth(Lastgad), GadgetHeight(Lastgad)-2)
                   If GadInf(Lastgad,2) = 0
                      FreeImage(Lastgad)
                      CopyImage(0,Lastgad)
                      ResizeImage(Lastgad,GadgetWidth(Lastgad),GadgetHeight(Lastgad)-1)
                      SetGadgetState(Lastgad,ImageID(Lastgad))
                   EndIf
                ElseIf EventwParam() =40
                   ResizeGadget(Lastgad,GadgetX(Lastgad),GadgetY(Lastgad)-1,GadgetWidth(Lastgad), GadgetHeight(Lastgad)+2)
                   If GadInf(Lastgad,2) = 0
                      FreeImage(Lastgad)
                      CopyImage(0,Lastgad)
                      ResizeImage(Lastgad,GadgetWidth(Lastgad),GadgetHeight(Lastgad)+1)
                      SetGadgetState(Lastgad,ImageID(Lastgad))
                   EndIf
                Else                          
                   HideGadget(33,0)
                EndIf
          EndIf
          If IsGadget(Lastgad)
              HideGadget(33,1)         
              GadInf(Lastgad,0) = GadgetX(Lastgad)
              GadInf(Lastgad,1) = GadgetY(Lastgad)              
          EndIf
           
             
      Case #WM_KEYUP
           InvalidateRect_(GadgetID(21),0,1)
            
            
      Case #WM_DEADCHAR 
            ;Debug "#DEADCHAR:   " + Str(EventwParam())
            
             
      Case #WM_SYSCHAR                                          ;Alt + Char
            ;Debug "#SYSCHAR:   " + Str(EventwParam())
            
             
      Case #WM_SYSKEYDOWN
          If GetAsyncKeyState_(#VK_MENU) & $8000 = 32768 And IsGadget(Lastgad)
                If EventwParam() = 37 And IsGadget(Lastgad) And GadgetX(Lastgad) >= 0
                   ResizeGadget(Lastgad,GadgetX(Lastgad)-1,GadgetY(Lastgad),#PB_Ignore, #PB_Ignore)
                ElseIf EventwParam() =39
                   ResizeGadget(Lastgad,GadgetX(Lastgad)+1,GadgetY(Lastgad),#PB_Ignore, #PB_Ignore)
                ElseIf EventwParam() =38 And GadgetY(Lastgad) >= 0
                   ResizeGadget(Lastgad,GadgetX(Lastgad),GadgetY(Lastgad)-1,#PB_Ignore, #PB_Ignore)
                ElseIf EventwParam() =40 And IsGadget(Lastgad)
                   ResizeGadget(Lastgad,GadgetX(Lastgad),GadgetY(Lastgad)+1,#PB_Ignore, #PB_Ignore)
                ElseIf Not IsGadget(Lastgad)                          
                   HideGadget(33,0)
                EndIf
          EndIf
          If IsGadget(Lastgad)
              HideGadget(33,1)         
              GadInf(Lastgad,0) = GadgetX(Lastgad)
              GadInf(Lastgad,1) = GadgetY(Lastgad)              
          EndIf 
            ;Debug "#SYSKEYDOWN:   " + Str(EventwParam())
            
             
      Case #WM_SYSKEYUP 
            ;Debug "#SYSKEYUP:   " + Str(EventwParam()) 
          
  EndSelect
    
  Until Quit = 1
  UnhookWindowsHookEx_(hhook)
EndIf

Last edited by RASHAD on Sun Oct 28, 2012 6:48 pm, edited 2 times in total.
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Desktop Publisher [Early stage Windows]

Post by Kwai chang caine »

Hello RASHAD :D

I have try your code, and have several bug on PB v5.0B5 and VISTA :(
In fact i have no understand what is the function of your plane :oops: :lol:

1/ So i have writen a text, selected it, select Table + Insert and i have an error line 225

Code: Select all

SetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE, GetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE) |#WS_CLIPSIBLINGS)
2/ When i run, the windows is empty, for have the EditorGadget i must move the windows

3/ When i select text with my mouse, i have a little multicolor frame who appears on the text i don't know why :shock:

It's all for the time :mrgreen:
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Desktop Publisher [Early stage Windows]

Post by RASHAD »

Hi KCC
This is a multi objects multi layer document (Like graphics programs)

1- You first press Left Mouse Button and draw a rectangle
2- Choose Image or Text Box from the Combo Box and then press Insert

Table not implemented yet (To do :)

New version :

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()

;Outgad The Choosen Gadget by MouseMove
;Lastgad The Choosen Gadget by LeftMouse Down

Global hhook,sel.RECT,oldCallback,hdc,drwflag,xt,yt,xb,yb,Ingad,Outgad,Lastgad,ldown
Global Dim Gadinf(20,2)

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
;ResizeGadget(1,10,10,width+LeftM+RightM,height+TopM+BottomM)   
;SendMessage_(GadgetID(Gad), #EM_SETRECTNP, 0, r)
SendMessage_(GadgetID(Gad), #EM_SETRECT, 0, r)
EndProcedure


Procedure MHookProc(nCode, wParam, lParam)
  *ms.MOUSEHOOKSTRUCT = lParam
  Select wParam
    Case #WM_RBUTTONDOWN
            DisplayPopupMenu(0, WindowID(0))
            
    Case #WM_LBUTTONDOWN
          ldown ! 1           
          If Ingad = 21           
            GetWindowRect_(GadgetID(21), r.RECT)
            ClipCursor_(r)
            GetCursorPos_(p.POINT)
            ScreenToClient_(GadgetID(21), p)
            SetRect_(sel,p\x,p\y,p\x,p\y) 
            hdc = GetDC_(GadgetID(21))
            If Not pen
              pen = CreatePen_(#PS_DASH	, 1, #Cyan)
              brush = GetStockObject_(#NULL_BRUSH)
            EndIf
            SelectObject_(hdc, pen)
            SelectObject_(hdc, brush)
            SetROP2_(hdc, #R2_XORPEN)
            Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
            drwflag = 1
          EndIf
          If Ingad <> 0
             Outgad = Ingad
          EndIf
          If ldown = 1 And Ingad <> 0 And Ingad <> 21
             SetGadgetText(33,"Selected Gadget")
          Else
             SetGadgetText(33,"No Selected Gadget")
             InvalidateRect_(GadgetID(21),0,1)
          EndIf          
          
    Case #WM_LBUTTONUP        
          ClipCursor_(0)
          ReleaseDC_(GadgetID(21), hdc)
          If drwflag = 1
            xt = sel\left
            yt = sel\top
            xb = sel\right
            yb = sel\bottom
            drwflag = 0       
          EndIf                  
                        
    Case #WM_MOUSEMOVE          
          GetCursorPos_(p.POINT)
          ScreenToClient_(GadgetID(21), p)
          hGad = ChildWindowFromPoint_ (GadgetID(21), p\y<< 32+p\x)
          Ingad = GetDlgCtrlID_(hGad)
          Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
          sel\right = p\x
          sel\bottom = p\y
          Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
          If ldown = 0         
            If Outgad <> Ingad And Ingad <> 0
               InvalidateRect_(GadgetID(21),0,1)
            EndIf          
            If Ingad < 20 And Ingad > 0 
              hdc = GetDC_(GadgetID(21))
              If Not pen2
                pen2 = CreatePen_(#PS_DOT, 2, #Red)
                brush2 = GetStockObject_(#NULL_BRUSH)
              EndIf
              SelectObject_(hdc, pen2)
              SelectObject_(hdc, brush2)
              Rectangle_(hdc, GadgetX(Ingad)+1,GadgetY(Ingad)+1,GadgetWidth(Ingad)+GadgetX(Ingad), GadgetHeight(Ingad)+GadgetY(Ingad))
              ReleaseDC_(GadgetID(21), hdc)
              Outgad = Ingad             
            EndIf
          EndIf

  EndSelect
  ProcedureReturn result
EndProcedure

CreateImage(0, 250, 350)
StartDrawing(ImageOutput(0))
  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,600,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(21, 10, 10, 480, 320)
  SendMessage_(GadgetID(21), #EM_CANUNDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_CANREDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_SETTARGETDEVICE, 0, 0)
  ;SetMargin(21,450,330,10,10,20,50)
;   SetGadgetColor(1, #PB_Gadget_BackColor, $E8FEFE)
;   SetGadgetColor(1, #PB_Gadget_FrontColor, #Blue)
  LoadFont(0,"Tahoma",14,#PB_Font_HighQuality)
  SetGadgetFont(21,FontID(0))
  
  ContainerGadget(22,10,315,480,40)
    ButtonGadget(23,0,30,60,22,"Left")
    ButtonGadget(24,65,30,60,22,"Center")
    ButtonGadget(25,130,30,60,22,"Right")
    ButtonGadget(26,195,30,60,22,"Full")
    ComboBoxGadget(27,275,30,70,22,#PB_ComboBox_Editable)
      AddGadgetItem(27, -1, "Image")
      AddGadgetItem(27, -1, "Text Box")
      AddGadgetItem(27, -1, "Table")
      AddGadgetItem(27, -1, "Chart")
    ButtonGadget(28,350,30,40,22,"Insert")
    ButtonGadget(29,395,30,40,22,"Resize")
    ButtonGadget(30,440,30,40,22,"Move")
    ButtonGadget(31,485,30,40,22,"Print")
    ButtonGadget(32,530,30,50,22,"Refresh")
    TextGadget(33,10,0,200,22,"")
    SetGadgetFont(33,FontID(0))
    SetGadgetColor(33,#PB_Gadget_FrontColor,#Red)
    ButtonGadget(34,530,0,50,22,"Z-Order")
  CloseGadgetList()
  
  SetGadgetState(27, 0)
  
  lpdwProcessId = GetWindowThreadProcessId_(GadgetID(21), 0)
  hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),lpdwProcessId)
  
Repeat
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1       
      
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 21
                                
           Case 23 
                SetAlignment(Outgad, #PFA_LEFT)
                           
           Case 24
                SetAlignment(Outgad,#PFA_CENTER)
           
           Case 25
                SetAlignment(Outgad,#PFA_RIGHT)
                              
           Case 26
                SetAlignment(Outgad,#PFA_JUSTIFY)         
              
           Case 27
                Result = GetGadgetState(27)
                
           Case 28
                If xt <> xb
                    If xt > xb
                        Swap xt,xb              
                    EndIf
                    If yt > yb
                        Swap yt,yb
                    EndIf                
                    ImN + 1                    
                    If Result = 0
                        CopyImage(0,ImN)
                        ResizeImage(ImN,xb-xt,yb-yt)
                        ImageGadget(ImN,xt,yt,xb-xt,yb-yt,ImageID(ImN))                        
                        Imageflag = 1
                    ElseIf Result = 1
                         EditorGadget(ImN,xt,yt,xb-xt,yb-yt)
                         SendMessage_(GadgetID(ImN), #EM_SETTARGETDEVICE, 0, 0)
                         ;SetClassLongPtr_(GadgetID(ImN),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
                         Textflag = 0
                    EndIf
                    SetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE, GetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE) |#WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(ImN), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE| #SWP_SHOWWINDOW|#SWP_NOACTIVATE)
                    SetParent_(GadgetID(ImN),GadgetID(21))
                    GadInf(ImN,0) = GadgetX(ImN)
                    GadInf(ImN,1) = GadgetY(ImN)
                    GadInf(ImN,2) = Result
                    InvalidateRect_(GadgetID(21),0,1)
                EndIf 
                
           Case 29
                If IsGadget(Lastgad)
                    ResizeImage(Lastgad,xb-xt,yb-yt)
                    ResizeGadget(Lastgad,xt,yt,xb-xt,yb-yt)
                    SetGadgetState(Lastgad,ImageID(Lastgad))
                    GadInf(Lastgad,0) = xt
                    GadInf(Lastgad,1) = yt
                    InvalidateRect_(GadgetID(21),0,1)
                EndIf 
           
           Case 30
                If IsGadget(Lastgad)
                    ResizeGadget(Lastgad,xt,yt,GadgetWidth(Lastgad),GadgetHeight(Lastgad))
                    GadInf(Lastgad,0) = xt
                    GadInf(Lastgad,1) = yt
                    InvalidateRect_(GadgetID(21),0,1)
                EndIf
                
           Case 31  
                GetClientRect_(GadgetID(21),rc.RECT)
                ClientToScreen_(GadgetID(21),rc)
                ;If width > 0 And height > 0
                  hBitmap = CreateImage(0,GadgetWidth(1),GadgetHeight(1))
                  hdc = StartDrawing(ImageOutput(0))
                  SelectObject_(hdc, hBitmap)
                  BitBlt_(hdc, 0, 0, GadgetWidth(1),GadgetHeight(1), 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
           Case 32
                 InvalidateRect_(GadgetID(21),0,1)
                 
           Case 34
                  SetWindowLongPtr_(GadgetID(Outgad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Outgad), #GWL_STYLE) |#WS_CLIPSIBLINGS)
                  SetWindowPos_(GadgetID(Outgad), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE| #SWP_SHOWWINDOW|#SWP_NOACTIVATE)
                  SetParent_(GadgetID(Outgad),GadgetID(21))
                  ldown = 0
                                        
          EndSelect
          
      Case #PB_Event_Menu      
          Select EventMenu()              
              Case 1
                  SendMessage_(GadgetID(21),#EM_UNDO,0,0)
                  ;SendMessage_(GetFocus_(),#WM_UNDO,0,0)
                  
              Case 2
                  SendMessage_(GadgetID(21),#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_SIZE,#WM_MOVE,#WM_PAINT
            GetClientRect_(WindowID(0),r.RECT)
            ResizeGadget(21,10,10,r\right-20,r\bottom-80)        
            ResizeGadget(22,10,r\bottom-60,r\right-20,r\bottom-80)
              For  i = 1 To 20
                If IsGadget(i)
                  ResizeGadget(i,GadInf(i,0),GadInf(i,1),#PB_Ignore, #PB_Ignore)
                Else
                  Break
                EndIf
              Next
            
            
      Case #WM_MOUSEMOVE
            SetCursor_(LoadCursor_(0,#IDC_ARROW))            
    
            
      Case #WM_CHAR
            ;Debug "#CHAR:    " + Str(EventwParam())
            
             
      Case #WM_KEYDOWN
          If GetAsyncKeyState_(#VK_CONTROL) & $8000 = 32768 And IsGadget(Outgad)
                If EventwParam() = 37  And GadgetX(Outgad) >= 0
                   ResizeGadget(Outgad,GadgetX(Outgad)+1,#PB_Ignore, GadgetWidth(Outgad)-2, #PB_Ignore)
                   If GadInf(Outgad,2) = 0
                      FreeImage(Outgad)
                      CopyImage(0,Outgad)
                      ResizeImage(Outgad,GadgetWidth(Outgad)-1,GadgetHeight(Outgad))
                      SetGadgetState(Outgad,ImageID(Outgad))
                   EndIf
                ElseIf EventwParam() =39
                   ResizeGadget(Outgad,GadgetX(Outgad)-1,GadgetY(Outgad),GadgetWidth(Outgad)+2, #PB_Ignore)
                   If GadInf(Outgad,2) = 0
                      FreeImage(Outgad)
                      CopyImage(0,Outgad)
                      ResizeImage(Outgad,GadgetWidth(Outgad)+1,GadgetHeight(Outgad))
                      SetGadgetState(Outgad,ImageID(Outgad))
                   EndIf
                ElseIf EventwParam() =38 And GadgetY(Outgad) >= 0
                   ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)+1,GadgetWidth(Outgad), GadgetHeight(Outgad)-2)
                   If GadInf(Outgad,2) = 0
                      FreeImage(Outgad)
                      CopyImage(0,Outgad)
                      ResizeImage(Outgad,GadgetWidth(Outgad),GadgetHeight(Outgad)-1)
                      SetGadgetState(Outgad,ImageID(Outgad))
                   EndIf
                ElseIf EventwParam() =40
                   ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)-1,GadgetWidth(Outgad), GadgetHeight(Outgad)+2)
                   If GadInf(Outgad,2) = 0
                      FreeImage(Outgad)
                      CopyImage(0,Outgad)
                      ResizeImage(Outgad,GadgetWidth(Outgad),GadgetHeight(Outgad)+1)
                      SetGadgetState(Outgad,ImageID(Outgad))
                   EndIf
                EndIf
          EndIf
          If IsGadget(Outgad) And Outgad < 21
              GadInf(Outgad,0) = GadgetX(Outgad)
              GadInf(Outgad,1) = GadgetY(Outgad)              
          EndIf
           
             
      Case #WM_KEYUP
           InvalidateRect_(GadgetID(21),0,1)
            
            
      Case #WM_DEADCHAR 
            ;Debug "#DEADCHAR:   " + Str(EventwParam())
            
             
      Case #WM_SYSCHAR                                          ;Alt + Char
            ;Debug "#SYSCHAR:   " + Str(EventwParam())
            
             
      Case #WM_SYSKEYDOWN
          If GetAsyncKeyState_(#VK_MENU) & $8000 = 32768 And IsGadget(Outgad)
                If EventwParam() = 37 And IsGadget(Outgad) And GadgetX(Outgad) >= 0
                   ResizeGadget(Outgad,GadgetX(Outgad)-1,GadgetY(Outgad),#PB_Ignore, #PB_Ignore)
                ElseIf EventwParam() =39
                   ResizeGadget(Outgad,GadgetX(Outgad)+1,GadgetY(Outgad),#PB_Ignore, #PB_Ignore)
                ElseIf EventwParam() =38 And GadgetY(Outgad) >= 0
                   ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)-1,#PB_Ignore, #PB_Ignore)
                ElseIf EventwParam() =40 And IsGadget(Outgad)
                   ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)+1,#PB_Ignore, #PB_Ignore)
                EndIf
          EndIf
          If IsGadget(Outgad) And Outgad < 21
              GadInf(Outgad,0) = GadgetX(Outgad)
              GadInf(Outgad,1) = GadgetY(Outgad)              
          EndIf
            ;Debug "#SYSKEYDOWN:   " + Str(EventwParam())
            
             
      Case #WM_SYSKEYUP 
            ;Debug "#SYSKEYUP:   " + Str(EventwParam()) 
          
  EndSelect
    
  Until Quit = 1
  UnhookWindowsHookEx_(hhook)
EndIf

I am waiting for your comments
Have fun
Last edited by RASHAD on Fri Oct 19, 2012 11:22 am, edited 1 time in total.
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Desktop Publisher [Early stage Windows]

Post by Kwai chang caine »

Here there are a strange behaviour.
I run your code, i have a empty window
First like you say to me, i clic left in the middle of the window
Immediately an editor gardget appears behind my mouse cursor
A red frame appears too and i can adjust it
I release the button and i have an editor and a red frame and a red text (No selected gadget)
I have breaking something ... :oops: :wink:
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Desktop Publisher [Early stage Windows]

Post by RASHAD »

Press over any gadget until you see Selected Gadget
Then it is yours
Egypt my love
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Re: Desktop Publisher [Early stage Windows]

Post by rsts »

Insert table fails with (line 231)

Gadget not initialized = SetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE, GetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE) |#WS_CLIPSIBLINGS)

very nice start so far.

cheers
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Desktop Publisher [Early stage Windows]

Post by RASHAD »

Thanks rsts
Table and Chart in the todo list see first post :P
I am trying hard my friend
Be tuned
Egypt my love
kvitaliy
Enthusiast
Enthusiast
Posts: 162
Joined: Mon May 10, 2010 4:02 pm

Re: Desktop Publisher [Early stage Windows]

Post by kvitaliy »

Code: Select all

Case 5
                  SendMessage_(GadgetID(1),#WM_PASTE,0,0)
Error!

GadgetID(21) ?
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Desktop Publisher [Early stage Windows]

Post by RASHAD »

Thanks kvitaliy
1- Bug fixed to take into consideration that you may have more than one EditorGadet() in the session
2- Added Editflag to prevent The mouse graphic action while using any of the Editorgadget()
3- Many other bugs fixed

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 hhook,sel.RECT,oldCallback,hdc,drwflag,xt,yt,xb,yb,Ingad,Outgad,Selected,Lastgad,Editflag
Global Dim Gadinf(20,2)

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
;ResizeGadget(1,10,10,width+LeftM+RightM,height+TopM+BottomM)   
;SendMessage_(GadgetID(Gad), #EM_SETRECTNP, 0, r)
SendMessage_(GadgetID(Gad), #EM_SETRECT, 0, r)
EndProcedure


Procedure MHookProc(nCode, wParam, lParam)
  *ms.MOUSEHOOKSTRUCT = lParam
  Select wParam
    Case #WM_RBUTTONDOWN
            DisplayPopupMenu(0, WindowID(0))
            
    Case #WM_LBUTTONDOWN
          If Editflag = 0 
          If Ingad = 21
            InvalidateRect_(GadgetID(21),0,1)          
            GetWindowRect_(GadgetID(21), r.RECT)
            ClipCursor_(r)
            GetCursorPos_(p.POINT)
            ScreenToClient_(GadgetID(21), p)
            SetRect_(sel,p\x,p\y,p\x,p\y) 
            hdc = GetDC_(GadgetID(21))
              If Not pen
                pen = CreatePen_(#PS_DASH	, 1, #Cyan)
                brush = GetStockObject_(#NULL_BRUSH)
              EndIf            
            SelectObject_(hdc, pen)
            SelectObject_(hdc, brush)
            SetROP2_(hdc, #R2_XORPEN)
            Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
            drwflag = 1
          EndIf
          If Ingad <> 0
             Outgad = Ingad
          EndIf
          If IsGadget(Lastgad) And Lastgad <> Ingad And Lastgad <> 21
             InvalidateRect_(GadgetID(Lastgad),0,1)             
          EndIf           
           If Ingad > 0 And Ingad < 21
            hdc = GetDC_(GadgetID(21))
            If Not pen2
              pen2 = CreatePen_(#PS_DOT, 2, #Red)
              brush2 = GetStockObject_(#NULL_BRUSH)
            EndIf
            SelectObject_(hdc, pen2)
            SelectObject_(hdc, brush2)
            Rectangle_(hdc, GadgetX(Outgad)+4,GadgetY(Outgad)+4, GadgetWidth(Outgad)+GadgetX(Outgad)-4, GadgetHeight(Outgad)+GadgetY(Outgad)-4)
            ReleaseDC_(GadgetID(21), hdc)
            SetGadgetText(33,"Selected Gadget")
            Selected = 1
          Else
             SetGadgetText(33,"No Selected Gadget")
             Selected = 0             ;
           EndIf
           Lastgad = Ingad
          EndIf
      
          
    Case #WM_LBUTTONUP
        If Editflag = 0
          ClipCursor_(0)
          ReleaseDC_(GadgetID(21), hdc)
          If drwflag = 1
            xt = sel\left
            yt = sel\top
            xb = sel\right
            yb = sel\bottom
            drwflag = 0       
          EndIf
        EndIf                  
                        
    Case #WM_MOUSEMOVE
        If Editflag = 0
          GetCursorPos_(p.POINT)
          ScreenToClient_(GadgetID(21), p)
          hGad = ChildWindowFromPoint_ (GadgetID(21), p\y<< 32+p\x)
          Ingad = GetDlgCtrlID_(hGad)
          Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
          sel\right = p\x
          sel\bottom = p\y
          Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
        EndIf
          
  EndSelect
  ProcedureReturn result
EndProcedure

CreateImage(0, 250, 350)
StartDrawing(ImageOutput(0))
  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,600,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(21, 10, 10, 480, 320)
  SendMessage_(GadgetID(21), #EM_CANUNDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_CANREDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_SETTARGETDEVICE, 0, 0)
  ;SetMargin(21,450,330,10,10,20,50)
;   SetGadgetColor(1, #PB_Gadget_BackColor, $E8FEFE)
;   SetGadgetColor(1, #PB_Gadget_FrontColor, #Blue)
  LoadFont(0,"Tahoma",14,#PB_Font_HighQuality)
  SetGadgetFont(21,FontID(0))
  
  ContainerGadget(22,10,315,480,40)
    ButtonGadget(23,0,30,60,22,"Left")
    ButtonGadget(24,65,30,60,22,"Center")
    ButtonGadget(25,130,30,60,22,"Right")
    ButtonGadget(26,195,30,60,22,"Full")
    ComboBoxGadget(27,275,30,70,22,#PB_ComboBox_Editable)
      AddGadgetItem(27, -1, "Image")
      AddGadgetItem(27, -1, "Text Box")
      AddGadgetItem(27, -1, "Table")
      AddGadgetItem(27, -1, "Chart")
    ButtonGadget(28,350,30,40,22,"Insert")
    ButtonGadget(29,395,30,40,22,"Resize")
    ButtonGadget(30,440,30,40,22,"Move")
    ButtonGadget(31,485,30,40,22,"Print")
    ButtonGadget(32,530,30,50,22,"Refresh")
    TextGadget(33,10,0,200,22,"")
    SetGadgetFont(33,FontID(0))
    SetGadgetColor(33,#PB_Gadget_FrontColor,#Red)
    ButtonGadget(34,440,0,85,22,"Graphic Mode")
    ButtonGadget(35,530,0,50,22,"Z-Order")
  CloseGadgetList()
  
  SetGadgetState(27, 0)
  
  lpdwProcessId = GetWindowThreadProcessId_(GadgetID(21), 0)
  hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),lpdwProcessId)
  
Repeat
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1       
      
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 21
                                
           Case 23 
                SetAlignment(Outgad, #PFA_LEFT)
                           
           Case 24
                SetAlignment(Outgad,#PFA_CENTER)
           
           Case 25
                SetAlignment(Outgad,#PFA_RIGHT)
                              
           Case 26
                SetAlignment(Outgad,#PFA_JUSTIFY)         
              
           Case 27
                Result = GetGadgetState(27)
                
           Case 28
                ;If xt <> xb
                    If xt > xb
                        Swap xt,xb              
                    EndIf
                    If yt > yb
                        Swap yt,yb
                    EndIf                
                    ImN + 1                    
                    If GetGadgetState(27) = 0
                        CopyImage(0,ImN)
                        ResizeImage(ImN,xb-xt,yb-yt)
                        ImageGadget(ImN,xt,yt,xb-xt,yb-yt,ImageID(ImN))                        
                        Imageflag = 1
                    ElseIf GetGadgetState(27) = 1
                         EditorGadget(ImN,xt,yt,xb-xt,yb-yt)
                         SendMessage_(GadgetID(ImN), #EM_SETTARGETDEVICE, 0, 0)
                         ;SetClassLongPtr_(GadgetID(ImN),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
                         Textflag = 0
                    EndIf
                    SetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE, GetWindowLongPtr_(GadgetID(ImN), #GWL_STYLE) | #WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(ImN), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
                    SetParent_(GadgetID(ImN),GadgetID(21))
                    GadInf(ImN,0) = GadgetX(ImN)
                    GadInf(ImN,1) = GadgetY(ImN)
                    GadInf(ImN,2) = Result
                    ;InvalidateRect_(GadgetID(21),0,1)
                ;EndIf 
                
           Case 29
                If IsGadget(Outgad)
                    InvalidateRect_(GadgetID(21),0,1)
                    If GadInf(Outgad,2) = 0
                        ResizeImage(Outgad,xb-xt,yb-yt)
                        ResizeGadget(Outgad,xt,yt,xb-xt,yb-yt)
                        SetGadgetState(Outgad,ImageID(Outgad))
                    ElseIf GadInf(Outgad,2) = 1
                        ResizeGadget(Outgad,xt,yt,xb-xt,yb-yt)
                    EndIf
                    GadInf(Outgad,0) = xt
                    GadInf(Outgad,1) = yt
                    SetGadgetText(33,"No Selected Gadget")
                EndIf 
           
           Case 30
                If IsGadget(Outgad)
                    InvalidateRect_(GadgetID(21),0,1)
                    ResizeGadget(Outgad,xt,yt,GadgetWidth(Outgad),GadgetHeight(Outgad))
                    GadInf(Outgad,0) = xt
                    GadInf(Outgad,1) = yt
                    SetGadgetText(33,"No Selected Gadget")
                EndIf
                
           Case 31  
                GetClientRect_(GadgetID(21),rc.RECT)
                ClientToScreen_(GadgetID(21),rc)
                ;If width > 0 And height > 0
                  hBitmap = CreateImage(0,GadgetWidth(1),GadgetHeight(1))
                  hdc = StartDrawing(ImageOutput(0))
                  SelectObject_(hdc, hBitmap)
                  BitBlt_(hdc, 0, 0, GadgetWidth(1),GadgetHeight(1), 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
           Case 32
                 InvalidateRect_(GadgetID(21),0,1)
                 
           Case 34
                Editflag ! 1
                If Editflag = 0
                   SetGadgetText(34,"Graphic Mode")
                Else
                   SetGadgetText(34,"Text Mode")
                EndIf
                 
           Case 35
                  SetWindowLongPtr_(GadgetID(Outgad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Outgad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
                  SetWindowPos_(GadgetID(Outgad), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
                  SetParent_(GadgetID(Outgad),GadgetID(21))
                  ldown = 0
                                        
          EndSelect
          
      Case #PB_Event_Menu      
          Select EventMenu()              
              Case 1
                  SendMessage_(GetFocus_(),#EM_UNDO,0,0)
                  ;SendMessage_(GetFocus_(),#WM_UNDO,0,0)
                  
              Case 2
                  SendMessage_(GetFocus_(),#EM_REDO,0,0)

              Case 3
                  SendMessage_(GetFocus_(),#WM_CUT,0,0)
    
              Case 4
                  SendMessage_(GetFocus_(),#WM_COPY,0,0)
    
              Case 5
                  SendMessage_(GetFocus_(),#WM_PASTE,0,0)
    
              Case 8
                Quit = 1
               
            EndSelect
            
            
      Case #WM_SIZE,#WM_MOVE,#WM_PAINT
            GetClientRect_(WindowID(0),r.RECT)
            ResizeGadget(21,10,10,r\right-20,r\bottom-80)        
            ResizeGadget(22,10,r\bottom-60,r\right-20,r\bottom-80)
              For  i = 1 To 20
                If IsGadget(i)
                  ResizeGadget(i,GadInf(i,0),GadInf(i,1),#PB_Ignore, #PB_Ignore)
                Else
                  Break
                EndIf
              Next
            
            
      Case #WM_MOUSEMOVE
            SetCursor_(LoadCursor_(0,#IDC_ARROW))
            
            
      Case #WM_CHAR
            ;Debug "#CHAR:    " + Str(EventwParam())
            
             
      Case #WM_KEYDOWN
            If GetAsyncKeyState_(#VK_CONTROL) & $8000 = 32768 And IsGadget(Outgad) And Selected = 1
              If EventwParam() = 37  And GadgetX(Outgad) >= 0
                 ResizeGadget(Outgad,GadgetX(Outgad)+1,#PB_Ignore,GadgetWidth(Outgad)-1, #PB_Ignore)
                 If GadInf(Outgad,2) = 0
                    FreeImage(Outgad)
                    CopyImage(0,Outgad)
                    ResizeImage(Outgad,GadgetWidth(Outgad)-1,GadgetHeight(Outgad))
                    SetGadgetState(Outgad,ImageID(Outgad))
                 EndIf
              ElseIf EventwParam() =39
                 ResizeGadget(Outgad,GadgetX(Outgad)-1,GadgetY(Outgad),GadgetWidth(Outgad)+1, #PB_Ignore)
                 If GadInf(Outgad,2) = 0
                    FreeImage(Outgad)
                    CopyImage(0,Outgad)
                    ResizeImage(Outgad,GadgetWidth(Outgad)+1,GadgetHeight(Outgad))
                    SetGadgetState(Outgad,ImageID(Outgad))
                 EndIf
              ElseIf EventwParam() =38 And GadgetY(Outgad) >= 0
                 ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)+1,GadgetWidth(Outgad), GadgetHeight(Outgad)-1)
                 If GadInf(Outgad,2) = 0
                    FreeImage(Outgad)
                    CopyImage(0,Outgad)
                    ResizeImage(Outgad,GadgetWidth(Outgad),GadgetHeight(Outgad)-1)
                    SetGadgetState(Outgad,ImageID(Outgad))
                 EndIf
              ElseIf EventwParam() =40
                 ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)-1,GadgetWidth(Outgad), GadgetHeight(Outgad)+1)
                 If GadInf(Outgad,2) = 0
                    FreeImage(Outgad)
                    CopyImage(0,Outgad)
                    ResizeImage(Outgad,GadgetWidth(Outgad),GadgetHeight(Outgad)+1)
                    SetGadgetState(Outgad,ImageID(Outgad))
                 EndIf
              EndIf
            EndIf
            If IsGadget(Outgad) And Outgad < 21
                GadInf(Outgad,0) = GadgetX(Outgad)
                GadInf(Outgad,1) = GadgetY(Outgad)              
            EndIf
           
             
      Case #WM_KEYUP
           InvalidateRect_(GadgetID(21),0,1)
            
            
      Case #WM_DEADCHAR 
            ;Debug "#DEADCHAR:   " + Str(EventwParam())
            
             
      Case #WM_SYSCHAR                                          ;Alt + Char
            ;Debug "#SYSCHAR:   " + Str(EventwParam())
            
             
      Case #WM_SYSKEYDOWN
          If GetAsyncKeyState_(#VK_MENU) & $8000 = 32768 And IsGadget(Outgad) And Selected = 1
              If EventwParam() = 37 And IsGadget(Outgad) And GadgetX(Outgad) >= 0
                 ResizeGadget(Outgad,GadgetX(Outgad)-1,GadgetY(Outgad),#PB_Ignore, #PB_Ignore)
              ElseIf EventwParam() =39
                 ResizeGadget(Outgad,GadgetX(Outgad)+1,GadgetY(Outgad),#PB_Ignore, #PB_Ignore)
              ElseIf EventwParam() =38 And GadgetY(Outgad) >= 0
                 ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)-1,#PB_Ignore, #PB_Ignore)
              ElseIf EventwParam() =40 And IsGadget(Outgad)
                 ResizeGadget(Outgad,GadgetX(Outgad),GadgetY(Outgad)+1,#PB_Ignore, #PB_Ignore)
              EndIf
          EndIf
          If IsGadget(Outgad) And Outgad < 21
              GadInf(Outgad,0) = GadgetX(Outgad)
              GadInf(Outgad,1) = GadgetY(Outgad)              
          EndIf
            ;Debug "#SYSKEYDOWN:   " + Str(EventwParam())
            
             
      Case #WM_SYSKEYUP 
            ;Debug "#SYSKEYUP:   " + Str(EventwParam()) 
          
  EndSelect
    
  Until Quit = 1
  UnhookWindowsHookEx_(hhook)
EndIf

Edit : More bugs fixed
Egypt my love
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Update :Desktop Publisher [Early stage Windows]

Post by RASHAD »

New version
- More bugs fixed
- Added lots of functions
- Smooth event logic
- Still more work to do

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

#CFM_BOLD = 1 :#CFM_ITALIC = 2 :#CFM_UNDERLINE = 4 :#CFM_STRIKEOUT = 8 :#CFM_PROTECTED = $10 :#CFM_LINK = $20 :#CFM_SMALLCAPS = $40 :#CFM_ALLCAPS = $80
#CFM_HIDDEN = $100 :#CFM_OUTLINE = $200:#CFM_SHADOW =  $400:#CFM_EMBOSS  = $800:#CFM_IMPRINT = $1000:#CFM_DISABLED = $2000:#CFM_COLOR = $40000000
#CFM_REVISED = $4000 :#CFM_REVAUTHOR =  $8000:#CFM_SUPERSCRIPT = $10000:#CFM_SUBSCRIPT  =  $30000:#CFM_ANIMATION  =  $40000 :#CFM_SIZE  = $80000000
#CFM_STYEL = $80000 :#CFM_KERNING =  $100000:#CFM_SPACING  = $200000:#CFM_WEIGHT = $400000:#CFM_UNDERLINETYPE = $800000 :#CFM_LCID  =  $2000000 
#CFM_CHARSET = $8000000:#CFM_OFFSET = $10000000:#CFM_FACE = $20000000 :#CFM_BACKCOLOR = $4000000

ExamineDesktops()

UseJPEGImageEncoder()
UsePNGImageEncoder()

UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

Global hBrush,egPrevFunc,hhook,sel.RECT,hdc,ImN,xt,yt,xb,yb,uX,uY,Ingad,GraGad,EditGad, NewGad, Delgad, Selected, Drwflag, Editflag, Downflag
Global transcolor, FName$, FSize, FColor, BColor, Color,Tol
Global Dim Gadinf(20,3)

Color = $DBFEFE

#ULW_ALPHA = $2 

Macro UBYTE(byte) 
  (byte & 255) 
EndMacro 

Structure CustomColorList 
  RGB.l[2] 
EndStructure

Macro MakeLong(low, high)
  low | high <<16
EndMacro


ProcedureDLL GrabRegion(ImageID, transcolor) ; HBITMAP ImageID, COLORREF transcolor 

  ;======================================================= 
  ;                                                      = 
  ;      Very fast bitmap -> region creator              = 
  ;                                                      = 
  ;      By netmaestro                                   = 
  ;                                                      = 
  ;      Contributors: eesau, nico                       = 
  ;                                                      = 
  ;      June 26, 2007                                   = 
  ;                                                      = 
  ;======================================================= 

  Structure RGBTRIPLEC 
    rgbtBlue.b 
    rgbtGreen.b 
    rgbtRed.b 
  EndStructure 

  GetObject_(ImageID, SizeOf(BITMAP), @bmp.BITMAP) 
  
  Protected width       = bmp\bmWidth 
  Protected height      = bmp\bmHeight 
  Protected hVisibleRgn = CreateRectRgn_(0, 0, width, height) 
  Protected tred        = Red(transcolor) 
  Protected tgreen      = Green(transcolor) 
  Protected tblue       = Blue(transcolor) 
  
  BmiInfo.BITMAPINFOHEADER 
  With BmiInfo 
    \biSize         = SizeOf(BITMAPINFOHEADER) 
    \biWidth        = width 
    \biHeight       = -height 
    \biPlanes       = 1 
    \biBitCount     = 24 
    \biCompression  = #BI_RGB 
  EndWith    
  
  bytesperrow = 4*((3*width+3)/4) 

  *ColorBits = AllocateMemory(bytesperrow*height) 
  hDC   = GetWindowDC_(#Null) 
  iRes  = GetDIBits_(hDC, ImageID, 0, height, *ColorBits, @bmiInfo, #DIB_RGB_COLORS) 
  ReleaseDC_(#Null, hDC) 
  
  Structure_Max=(width*height*16)+SizeOf(RGNDATAHEADER) 
  *Buffer.RGNDATAHEADER=AllocateMemory(Structure_Max) 
  *rd.LONG=*Buffer+SizeOf(RGNDATAHEADER) 

  bufferloc = 0 : rectcount = 0 
  For y=0 To height-1 
    pxcount=0 
    For x=0 To bytesperrow-1 Step 3 
      *px.RGBTRIPLEC = *ColorBits + bytesperrow * y + x 
      If UBYTE(*px\rgbtRed)=tred And UBYTE(*px\rgbtGreen)=tgreen And UBYTE(*px\rgbtBlue)=tblue 
        transcount = 1 : firsttrans = pxcount 
        While UBYTE(*px\rgbtRed)=tred And UBYTE(*px\rgbtGreen)=tgreen And UBYTE(*px\rgbtBlue)=tblue And x<=bytesperrow-4 
          transcount+1 : pxcount+1 : x+3 : *px = *ColorBits + bytesperrow * y + x 
        Wend 
        rectcount+1 
        *rd\l = firsttrans            : *rd+4 
        *rd\l = y                     : *rd+4 
        *rd\l = firsttrans+transcount : *rd+4 
        *rd\l = y+1                   : *rd+4 
      EndIf 
      pxcount+1 
    Next 
  Next 
  
  With *Buffer 
    \dwSize         = SizeOf(RGNDATAHEADER) 
    \iType          = #RDH_RECTANGLES 
    \nCount         = rectcount 
    \nRgnSize       = rectcount * SizeOf(RECT) 
    \rcBound\left   = 0 
    \rcBound\top    = 0 
    \rcBound\right  = width 
    \rcBound\bottom = height 
  EndWith 
  
  RegionSize=SizeOf(RGNDATAHEADER)+(rectcount * SizeOf(RECT)) 
  hTransparentRgn = ExtCreateRegion_(#Null, RegionSize, *Buffer) 
  CombineRgn_(hVisibleRgn, hVisibleRgn, hTransparentRgn, #RGN_XOR) 
    
  FreeMemory(*Buffer) 
  FreeMemory(*ColorBits) 
  DeleteObject_(hTransparentRgn) 
  
  ProcedureReturn hVisibleRgn 
  
EndProcedure 


Procedure ChooseColor(hWnd,startRGB,*cl.CustomColorList) 
  c.choosecolor
  c\LStructSize = SizeOf(c) 
  c\hwndOwner = hWnd
  c\rgbResult = startRGB 
  c\lpCustColors = *cl 
  c\flags = #CC_ANYCOLOR|#CC_FULLOPEN|#CC_RGBINIT
  If ChooseColor_(@c)  
    ProcedureReturn c\rgbResult 
  Else 
    ProcedureReturn -1 
  EndIf 
EndProcedure


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
;ResizeGadget(1,10,10,width+LeftM+RightM,height+TopM+BottomM)   
SendMessage_(GadgetID(Gad), #EM_SETRECTNP, 0, r)
;SendMessage_(GadgetID(Gad), #EM_SETRECT, 0, r)
EndProcedure


Procedure Format_Text(Gadget,Line,FName$,FSize,FColor,BColor,Style)
  ft.CHARRANGE
  ft\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, Line, 0)
  ft\cpMax = ft\cpMin + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, ft\cpMin, 0)
  SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel)  
  
  LineFont = LoadFont(0,FName$,FSize,Style)    
  SelectObject_(hdc, LineFont)
  GetTextMetrics_(hdc, @lf.TEXTMETRIC)
  Height = Height + lf\tmheight
  
  format.CHARFORMAT2
  format\cbSize = SizeOf(CHARFORMAT2)
  format\dwMask = #CFM_FACE|#CFM_COLOR|#CFM_BACKCOLOR|#CFM_SIZE|#CFM_ITALIC|#CFM_BOLD| #CFM_STRIKEOUT|#CFM_UNDERLINE|#CFM_EMBOSS|#CFM_OUTLINE|#CFM_SHADOW| #CFM_LINK| #CFM_SUBSCRIPT|#CFM_SUPERSCRIPT|#CFM_PROTECTED
  PokeS(@format\szFaceName, FName$)
  format\yHeight = FSize*1440/72
  format\crTextColor = FColor
  format\crBackColor = BColor
  format\dwEffects = Style
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure


Procedure Flip_H()
  If Editflag = 0 And Selected = 1
      nWidth = GadgetWidth(Gragad)
      nHeight = GadgetHeight(Gragad)
      hBitmap = CreateImage(#PB_Any,nwidth,nheight)
      sDC = CreateCompatibleDC_(0)
      dDC = StartDrawing(ImageOutput(hBitmap))
          SelectObject_(sDC, GetGadgetState(Gragad))
          SelectObject_(dDC, hBitmap)
          StretchBlt_(dDC,nWidth-1,0,-nWidth,nHeight,sDC,0,0,nWidth,nHeight, #SRCCOPY) ; 
      StopDrawing()
      SetGadgetState(Gragad,ImageID(hBitmap))
      GadInf(Gragad,3) = hBitmap
  Else
      MessageRequester("Error","Please Select Object First !",#MB_APPLMODAL|#MB_ICONERROR)
  EndIf
EndProcedure


Procedure Flip_V()
  If Editflag = 0 And Selected = 1
      nWidth = GadgetWidth(Gragad)
      nHeight = GadgetHeight(Gragad)
      hBitmap = CreateImage(#PB_Any,nwidth,nheight)
      sDC = CreateCompatibleDC_(0)
      dDC = StartDrawing(ImageOutput(hBitmap))
          SelectObject_(sDC, GetGadgetState(Gragad))
          SelectObject_(dDC, hBitmap)
          StretchBlt_(dDC,0,nHeight-1,nWidth,-nHeight,sDC,0,0,nWidth,nHeight, #SRCCOPY)
      StopDrawing()
      SetGadgetState(Gragad,ImageID(hBitmap))
      GadInf(Gragad,3) = hBitmap
  Else
      MessageRequester("Error","Please Select Object First !",#MB_APPLMODAL|#MB_ICONERROR)
  EndIf
EndProcedure


Procedure Rotate_I()
  If Editflag = 0 And Selected = 1
      nWidth = GadgetWidth(Gragad)
      nHeight = GadgetHeight(Gragad)  
      If nHeight > nWidth 
        hBitmap = CreateImage(#PB_Any,nHeight,nHeight) 
      Else 
        hBitmap = CreateImage(#PB_Any,nWidth,nWidth) 
      EndIf
      sDC = CreateCompatibleDC_(0)                       
      Dim p.POINT(2)
        p(0)\x=nHeight :p(0)\y=0: p(1)\x=nHeight: p(1)\y=nWidth: p(2)\x=0 :p(2)\y=0                        
      dDC = StartDrawing(ImageOutput(hBitmap))
           SelectObject_(sDC, GetGadgetState(Gragad)) 
           SelectObject_(dDC, hBitmap)
           PlgBlt_(dDC,p(),sDC,0,0,nWidth,nHeight,0,0,0) 
      StopDrawing() 
      nImage = GrabImage(hBitmap,#PB_Any,0,0,nHeight,nWidth) 
      FreeImage(hBitmap)
      SetGadgetState(Gragad,ImageID(nImage))
      GadInf(Gragad,3) = nImage                                        
  Else
      MessageRequester("Error","Please Select Object First !",#MB_APPLMODAL|#MB_ICONERROR)
  EndIf
EndProcedure


Procedure Move_OB()
  If IsGadget(Gragad)                    
      ResizeGadget(Gragad,xt,yt,GadgetWidth(Gragad),GadgetHeight(Gragad))
      GadInf(Gragad,0) = xt
      GadInf(Gragad,1) = yt
      SetGadgetText(57,"No Selected Object")
      InvalidateRect_(GadgetID(21),0,1)
  EndIf
EndProcedure


Procedure Resize_OB()
  If IsGadget(Gragad)                    
      If GadInf(Gragad,2) = 0          
          ResizeGadget(Gragad,xt,yt,xb-xt,yb-yt)
          ResizeImage(GadInf(Gragad,3),xb-xt,yb-yt)
          SetGadgetState(Gragad,ImageID(GadInf(Gragad,3)))                                                            
          InvalidateRect_(GadgetID(21),0,1)                        
      ElseIf GadInf(Gragad,2) = 1
          ResizeGadget(Gragad,xt,yt,xb-xt,yb-yt)
      EndIf
      GadInf(Gragad,0) = xt
      GadInf(Gragad,1) = yt
      SetGadgetText(57,"No Selected Object")
  EndIf 
EndProcedure


Procedure EditProc(hWnd,uMsg,wParam,lParam)
    Select uMsg
        Case #WM_LBUTTONDOWN
              If Editflag = 0
                  HideCaret_(GadgetID(21))
                  ProcedureReturn 1
              EndIf   
    EndSelect     
 ProcedureReturn CallWindowProc_(egPrevFunc,hWnd,uMsg,wParam,lParam)
EndProcedure


Procedure MHookProc(nCode, wParam, lParam)
  *ms.MOUSEHOOKSTRUCT = lParam
  Select wParam
            
    Case #WM_LBUTTONDOWN 
          downflag = 1                    
          If Editflag = 0
             GetCursorPos_(p.POINT)
             ScreenToClient_(GadgetID(21), p)
             hGad = ChildWindowFromPoint_ (GadgetID(21), p\y<< 32+p\x)
             Ingad = GetDlgCtrlID_(hGad)
          EndIf
          If Editflag = 0 And Ingad = 21
             InvalidateRect_(GadgetID(21),0,1)
          EndIf
          If Editflag = 1 And Ingad > 0
               EditGad = Ingad
          EndIf
          If Ingad= 21 And Editflag = 0 And Drwflag = 0
            GetWindowRect_(GadgetID(21), r.RECT)
            SetRect_(r,r\left,r\top,r\right,r\bottom) 
            ClipCursor_(r)
            SetRect_(sel,p\x,p\y,p\x,p\y) 
            hdc = GetDC_(GadgetID(21))
              If Not pen
                pen = CreatePen_(#PS_DASH	, 1, #Cyan)
                brush = GetStockObject_(#NULL_BRUSH)
              EndIf            
            SelectObject_(hdc, pen)
            SelectObject_(hdc, brush)
            SetROP2_(hdc, #R2_XORPEN)
            Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
            drwflag = 1
          EndIf
          If  Editflag = 0 And Ingad > 0 And Ingad < 21
              GraGad = Ingad
              uX = p\x - GadgetX(GraGad)
              uY = p\y - GadgetY(GraGad)
              SetWindowLongPtr_(GadgetID(GraGad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(GraGad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
              SetWindowPos_(GadgetID(GraGad), #HWND_TOP, 0, 0, 0, 0, #SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
              SetParent_(GadgetID(GraGad),GadgetID(21))           
              SetGadgetText(57,"Object Selected : "+Str(Ingad))
              Selected = 1
          EndIf

          
    Case #WM_LBUTTONUP
          If downflag = 1
             downflag = 0
          EndIf
           ClipCursor_(0)
           ReleaseDC_(GadgetID(21), hdc)
          If Drwflag = 1
            xt = sel\left
            yt = sel\top
            xb = sel\right
            yb = sel\bottom
            drwflag = 0               
          EndIf

                        
    Case #WM_MOUSEMOVE        
          GetCursorPos_(p.POINT)
          ScreenToClient_(GadgetID(21), p)
          hGad = ChildWindowFromPoint_ ( GadgetID(21),p\y<< 32+p\x)
          Ingad = GetDlgCtrlID_(hGad)
          If Ingad > 0 And Ingad < 21 And downflag = 1 And Drwflag = 0 And Editflag = 0
             MoveWindow_(GadgetID(Ingad), p\x-uX,p\y-uY, GadgetWidth(Ingad), GadgetHeight(Ingad), 1)
             InvalidateRect_(GadgetID(Ingad),0,1)  
          EndIf
          If Editflag = 0
            Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
            sel\right = p\x
            sel\bottom = p\y
            Rectangle_(hdc, sel\left,sel\top,sel\right,sel\bottom)
          EndIf
          If Ingad > 0 And Ingad < 21 And Editflag = 0 And Selected = 1
            GadInf(Ingad,0) = GadgetX(Ingad)
            GadInf(Ingad,1) = GadgetY(Ingad)
          EndIf
          
  EndSelect
  ProcedureReturn result
EndProcedure


Procedure Raster_Image()
    If xt <> xb             
        If xt > xb
            Swap xt,xb              
        EndIf
        If yt > yb
            Swap yt,yb
        EndIf
        If Delgad = 0
            ImN + 1
            Newgad = ImN                        
        EndIf
        If Delgad > 0
           Newgad = Delgad                       
           Delgad - 1
        EndIf    
          UnhookWindowsHookEx_(hhook)
            File$ = OpenFileRequester("Select Image", "*", "BMP,JPG, JPEG, TIF,TGA,PNG|*.bmp;*.jpg;*.tif;*.tga;*.png", 0)
            If File$
               hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0)) 
               LoadImage(0,File$)
               CopyImage(0,Newgad)
               ResizeImage(Newgad,xb-xt,yb-yt)
               ImageGadget(Newgad,xt,yt,xb-xt,yb-yt,ImageID(Newgad))
               GadInf(Newgad,2) = 0
               ImgNo = Newgad
             Else
              hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0)) 
              MessageRequester("Error","Image Not Loaded !",#MB_APPLMODAL|#MB_ICONERROR)
              ProcedureReturn
            EndIf
        GadInf(Newgad,0) = GadgetX(Newgad)
        GadInf(Newgad,1) = GadgetY(Newgad)         
        GadInf(Newgad,3) = Newgad
        SetWindowLongPtr_(GadgetID(Newgad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Newgad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
        SetWindowPos_(GadgetID(Newgad), #HWND_TOP, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
        SetParent_(GadgetID(Newgad),GadgetID(21))
    Else
      MessageRequester("Error","Use The Mouse !" + #CRLF$ + "To Draw The Image Container First",#MB_APPLMODAL|#MB_ICONERROR)
      ProcedureReturn 0
    EndIf
EndProcedure


Procedure Skinned_Image()
    If xt <> xb             
        If xt > xb
            Swap xt,xb              
        EndIf
        If yt > yb
            Swap yt,yb
        EndIf
        If Delgad = 0
            ImN + 1
            Newgad = ImN                        
        EndIf
        If Delgad > 0
           Newgad = Delgad                       
           Delgad - 1
        EndIf    
          UnhookWindowsHookEx_(hhook)
            File$ = OpenFileRequester("Select Image", "*", "BMP,JPG, JPEG,TGA,PNG|*.bmp;*.jpg;*.tga;*.png", 0)
            If File$               
               LoadImage(0,File$)
               ResizeImage(0,xb-xt-4,yb-yt-4)
               CreateImage(Newgad,xb-xt,yb-yt)
               StartDrawing(ImageOutput(Newgad))
                 Box(0,0,xb-xt,yb-yt,#White)
                 DrawImage(ImageID(0),2,2)
               StopDrawing()
               temp = ImageGadget(#PB_Any,xt+12,yt+12,xb-xt,yb-yt,ImageID(Newgad),#PB_Image_Border)
               SetGadgetText(57,"Pick the Trans Color")
               hdc = GetDC_(0)               
               Repeat
                  GetCursorPos_(p.POINT)
                  If GetAsyncKeyState_(#VK_LBUTTON) & $8000 = 32768                     
                     TransColor = GetPixel_(hdc, p\x, p\y)
                  EndIf                     
               Until TransColor
               FreeGadget(temp)
               hBrush = CreatePatternBrush_(ImageID(Newgad))
               PanelGadget(Newgad,xt,yt,xb-xt,yb-yt)
               SetWindowTheme_(GadgetID(Newgad), @null.w, @null.w)
               SetClassLongPtr_(GadgetID(Newgad),#GCL_HBRBACKGROUND, hBrush)
               SetWindowRgn_(GadgetID(Newgad), GrabRegion(ImageID(Newgad),TransColor),#True)               
               CloseGadgetList()
               SetGadgetText(57,"No Selected Object")
               GadInf(Newgad,2) = 2
               ImgNo = Newgad
               hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0)) 
             Else
              hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0)) 
              MessageRequester("Error","Image Not Loaded !",#MB_APPLMODAL|#MB_ICONERROR)
              ProcedureReturn
            EndIf
        GadInf(Newgad,0) = GadgetX(Newgad)
        GadInf(Newgad,1) = GadgetY(Newgad)         
        GadInf(Newgad,3) = Newgad
        SetWindowLongPtr_(GadgetID(Newgad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Newgad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
        SetWindowPos_(GadgetID(Newgad), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
        SetParent_(GadgetID(Newgad),GadgetID(21))
        InvalidateRect_(GadgetID(21),0,1)
    Else
      MessageRequester("Error","Use The Mouse !" + #CRLF$ + "To Draw The Image Container First",#MB_APPLMODAL|#MB_ICONERROR)
      ProcedureReturn 0
    EndIf
EndProcedure


Procedure Text_Box()
  If xt <> xb             
      If xt > xb
          Swap xt,xb              
      EndIf
      If yt > yb
          Swap yt,yb
      EndIf
      If Delgad = 0
          ImN + 1
          Newgad = ImN                        
      EndIf
      If Delgad > 0
         Newgad = Delgad                       
         Delgad - 1
      EndIf
      EditorGadget(Newgad,xt,yt,xb-xt,yb-yt)
      GadInf(Newgad,2) = 1
      SendMessage_(GadgetID(Newgad), #EM_SETTARGETDEVICE, 0, 0)
      SetGadgetAttribute(Newgad, #PB_Editor_ReadOnly,1)
      HideCaret_(GadgetID(Newgad))
      GadInf(Newgad,0) = GadgetX(Newgad)
      GadInf(Newgad,1) = GadgetY(Newgad)         
      GadInf(Newgad,3) = Newgad
      SetWindowLongPtr_(GadgetID(Newgad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Newgad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
      SetWindowPos_(GadgetID(Newgad), #HWND_TOP, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
      SetParent_(GadgetID(Newgad),GadgetID(21))
  Else
    MessageRequester("Error","Use The Mouse !" + #CRLF$ + "To Draw The Image Container First",#MB_APPLMODAL|#MB_ICONERROR)
    ProcedureReturn 0
  EndIf
EndProcedure


Procedure WndProc(hwnd, uMsg, wParam, lParam)
Result = #PB_ProcessPureBasicEvents 
 Select uMsg           
    Case #WM_SIZE,#WM_MOVE,#WM_PAINT
          GetClientRect_(WindowID(0),r.RECT)
            If (r\right - r\left) > 1000
              Tol = (r\right-r\left - 980)/2
            Else
              Tol = 10
            EndIf
          ResizeGadget(21,tol,10,r\right-r\left-2*Tol,r\bottom-r\top-80)
          ResizeGadget(30,(r\right - r\left - 690)/2,r\bottom-65,688,60)
          For  i = 1 To 20
            If IsGadget(i)
              ResizeGadget(i,GadInf(i,0),GadInf(i,1),#PB_Ignore, #PB_Ignore)
            Else
              Break
            EndIf
          Next
 EndSelect   
ProcedureReturn Result
EndProcedure


LoadFont(0,"Tahoma",14,#PB_Font_HighQuality)
LoadFont(1,"Tahoma",24,#PB_Font_HighQuality)

; CreateImage(0, 250, 350)
; StartDrawing(ImageOutput(0))
;   For x = 0 To 249
;     For y = 0 To 349
;       Plot(x,y, RGB(x,y,x*y))
;     Next
;   Next
;   DrawingMode(#PB_2DDrawing_Transparent)
;   DrawingFont(FontID(1)) 
;   DrawText(20,20,"RASHAD",#Red)
; StopDrawing()

OpenWindow(0, 0, 0,700,500, "EditorGadget", #PB_Window_SystemMenu| #PB_Window_ScreenCentered| #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget| #PB_Window_SizeGadget)
  If DesktopWidth(0) < 1100
    wwidth = DesktopWidth(0)
  Else 
    wwidth = 1100
  EndIf
  
  WindowBounds(0,700,500,wwidth,DesktopHeight(0)-60)

    If CreateImageMenu(0, WindowID(0),#PB_Menu_ModernLook)
    MenuTitle("File")
      MenuItem( 1, "&Load...")
      MenuItem( 2, "Save")
      OpenSubMenu("Save As...")
        MenuItem( 3, "bmp")
        MenuItem( 4, "jpg")
        MenuItem( 5, "png")
      CloseSubMenu()
    MenuTitle("Edit")
      MenuItem(6, "Undo")
      MenuItem(7, "Redo")      
      MenuBar()
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste        ")
    MenuTitle("Format")
      MenuItem(13, "Left")
      MenuItem(14, "Center")
      MenuItem(15, "Right")
      MenuItem(15, "Full")      
    MenuTitle("?")
      MenuItem(16, "About")
  EndIf
  
  If CreatePopupImageMenu(1,#PB_Menu_ModernLook)
      MenuItem(70, "Undo")
      MenuItem(71, "Redo")
      MenuBar()
      MenuItem(72, "Cut")
      MenuItem(73, "Copy")
      MenuItem(74, "Paste         ")
      MenuBar()
      ;MenuItem(75, "Delete Object")
      ;MenuBar()
;       OpenSubMenu("Options")
;         MenuItem(76, "Window...")
;         MenuItem(77, "Gadget...")
;       CloseSubMenu()
;       MenuBar()
      MenuItem(78, "Quit")
  EndIf
  
  If CreatePopupImageMenu(2,#PB_Menu_ModernLook)
      OpenSubMenu("Insert Object")
        MenuItem( 90, "Raster Image")
        MenuItem( 91, "Skinned Image")
        MenuItem( 92, "Text Box")
      CloseSubMenu()
      MenuBar()
      ;MenuItem(100, "Transparency")   
      MenuItem(101, "Flip Horizontal")
      MenuItem(102, "Flip Vertical")
      MenuItem(103, "Rotate")
;      MenuBar()
;       OpenSubMenu("Object Z-Order")
;         MenuItem(104, "Step Backward")
;         MenuItem(105, "Step Forward")
;         MenuItem(106, "Send to Back")
;         MenuItem(107, "Bring to Front")
;       CloseSubMenu()
      MenuBar() 
      MenuItem(110, "Move Object")
      MenuItem(111, "Resize Object")  
      MenuBar()
      MenuItem(112, "Delete Object")
      MenuBar()
;       OpenSubMenu("Transparency")
;         MenuItem(96, "White Transparent")
;         MenuItem(97, "Special Transparent")
;       CloseSubMenu()
;      MenuBar()
      MenuItem(120, "Quit")
  EndIf

  
  EditorGadget(21, 10, 10, 680, 400) 
  ;SetGadgetColor(21, #PB_Gadget_BackColor,$DAFCFB)
  SendMessage_(GadgetID(21), #EM_CANUNDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_CANREDO, 0, 0)
  SendMessage_(GadgetID(21), #EM_SETTARGETDEVICE, 0, 0)
  SendMessage_(GadgetID(21), #EM_SETMARGINS, #EC_LEFTMARGIN|#EC_RIGHTMARGIN, MakeLong(20, 20))
  ;SetMargin(21,680,200,20,10,20,50)
  SetGadgetFont(21,FontID(0))
 
;   SetGadgetAttribute(21, #PB_Editor_ReadOnly,1)
;   HideCaret_(GadgetID(21))
  
  ContainerGadget(30,5,415,690,60,#PB_Container_Raised)
  SetGadgetColor(30, #PB_Gadget_BackColor, Color)
    ButtonGadget(31,0,30,60,22,"Left")
    ButtonGadget(32,65,30,60,22,"Center")
    ButtonGadget(33,130,30,60,22,"Right")
    ButtonGadget(34,195,30,60,22,"Full")
    ButtonGadget(35,0,2,60,22,"Font&&Style")
    ButtonGadget(36,65,2,60,22,"Font Color")
    ButtonGadget(37,130,2,60,22,"Back Color")
    ButtonGadget(38,195,2,60,22,"Format")
    ;ComboBoxGadget(51,280,30,70,21,#PB_ComboBox_Editable)
      ;AddGadgetItem(51, -1, "Image")
      ;AddGadgetItem(51, -1, "Text Box")
      ;AddGadgetItem(51, -1, "Table")
      ;AddGadgetItem(51, -1, "Chart")
    ;ButtonGadget(52,355,30,40,22,"Insert")
    ;ButtonGadget(53,410,30,40,22,"Resize")
    ;ButtonGadget(54,455,30,40,22,"Move")
    ButtonGadget(55,510,30,60,22,"Print")
    ButtonGadget(56,575,30,50,22,"Refresh")
    TextGadget(57,280,0,200,50,"No Selected Object",#SS_CENTERIMAGE | #SS_CENTER)
    SetGadgetColor(57, #PB_Gadget_BackColor,Color)
    SetGadgetFont(57,FontID(0))
    SetGadgetColor(57,#PB_Gadget_FrontColor,#Red)
    ButtonGadget(58,510,2,60,22,"Save As")
    ButtonGadget(59,575,2,105,22,"Graphic Mode")
    ButtonGadget(60,630,30,50,22,"Exit")
  CloseGadgetList()
  
  ;SetGadgetState(51, 0)
  
  egPrevFunc = SetWindowLongPtr_(GadgetID(21),#GWL_WNDPROC,@EditProc())
  
  SetWindowCallback(@WndProc())
 
  hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0))
  
  InvalidateRect_(WindowID(0),0,1)
  
Repeat
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1       
      
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 21

                                                
           Case 31
                If Editflag = 1 
                    SetAlignment(EditGad, #PFA_LEFT)
                EndIf
                           
           Case 32
                If Editflag = 1
                    SetAlignment(EditGad,#PFA_CENTER)
                EndIf
           
           Case 33
                If Editflag = 1
                    SetAlignment(EditGad,#PFA_RIGHT)
                EndIf
                              
           Case 34
                If Editflag = 1
                    SetAlignment(EditGad,#PFA_JUSTIFY)
                EndIf
                
           Case 35
                If Editflag = 1
                    FontRequester(FontName$, FSize,#PB_FontRequester_Effects )
                    FName$ = SelectedFontName()
                    FSize = SelectedFontSize()
                    Style = SelectedFontStyle()
                EndIf
              
           Case 36
                If Editflag = 1
                    FColor = ChooseColor(WindowID(0),0,@startColor)
                EndIf
                 
           Case 37
                If Editflag = 1
                    BColor = ChooseColor(WindowID(0),0,@startColor)
                EndIf
                
           Case 38
                If Editflag = 1
                   Format_Text(Gragad,3,"Times new Roman",16,$FB1404,$FFFFFF,#CFM_ITALIC|#CFM_STRIKEOUT)
                EndIf
                
           Case 51
                Result = GetGadgetState(51)
                
           Case 52
                ;InsertObject(9)
                
           Case 53

           
           Case 54

                
           Case 55
                 ;If PrintRequester()
;                   If StartPrinting("PureBasic Test")
;                     If StartDrawing(PrinterOutput())
;                          DrawImage(ImageID(0), 0, 0,width*4,height*4)
;                        StopDrawing()
;                     EndIf                      
;                     StopPrinting()
;                   EndIf
;                 EndIf

           Case 56
                 InvalidateRect_(GadgetID(21),0,1)
                
           Case 58                 
                GetClientRect_(GadgetID(21),rc.RECT)
                ClientToScreen_(GadgetID(21),rc)
                ;If width > 0 And height > 0
                  hBitmap = CreateImage(0,GadgetWidth(21),GadgetHeight(21))
                  hdc = StartDrawing(ImageOutput(0))
                  SelectObject_(hdc, hBitmap)
                  BitBlt_(hdc, 0, 0, GadgetWidth(21),GadgetHeight(21), 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)
                UnhookWindowsHookEx_(hhook)
                Pattern$ = "bmp (*.bmp)|*.bmp|jpg (*.jpg)|*.jpg|tif (*.tif)|*.tif|png (*.png)|*.png|tga (*.tga)|*.tga,|All files (*.*)|*.*"
                File$ = SaveFileRequester("Please choose file to save", StandardFile$, Pattern$, Pattern)
                If File$
                   hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0)) 
                   SaveImage(0,File$,#PB_ImagePlugin_PNG)
                Else
                   hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0))
                   MessageRequester("Error","Image Not Saved !",#MB_APPLMODAL|#MB_ICONERROR)
                EndIf
                ;SaveImage(0,"F:\Print_Test.png",#PB_ImagePlugin_PNG)


                 
           Case 59
                Editflag ! 1  
                If Editflag = 0
                   SetGadgetText(59,"Graphic Mode")
                   ;SetGadgetAttribute(21, #PB_Editor_ReadOnly,1)
                   For i = 1 To ImN
                    If GadInf(ImN,2) = 1
                       SetGadgetAttribute(i, #PB_Editor_ReadOnly,1)
                       HideCaret_(GadgetID(i))
                    EndIf
                   Next
                Else
                   SetGadgetText(59,"Text Mode")
                   ;SetGadgetAttribute(21, #PB_Editor_ReadOnly,0)
                   For i = 1 To ImN
                    If IsGadget(i)
                        SetGadgetAttribute(i, #PB_Editor_ReadOnly,0)
                        ShowCaret_(GadgetID(i))
                    EndIf
                   Next
                EndIf                
                                
                  
           Case 60
                Quit = 1
                                        
          EndSelect
          
      Case #PB_Event_Menu      
          Select EventMenu()              
              Case 70
                  SendMessage_(GetFocus_(),#EM_UNDO,0,0)
                  
              Case 71
                  SendMessage_(GetFocus_(),#EM_REDO,0,0)

              Case 72
                  EmptyClipboard_()
                  SendMessage_(GetFocus_(),#WM_CUT,0,0)
    
              Case 73
                  EmptyClipboard_()
                  SendMessage_(GetFocus_(),#WM_COPY,0,0)
    
              Case 74
                  SendMessage_(GetFocus_(),#WM_PASTE,0,0)
                  
              Case 75              
    
              Case 78
                Quit = 1                
                
              Case 90
                    Raster_Image()
                
              Case 91            
                    Skinned_Image()
              
              Case 92
                    Text_Box()
                    
              Case 100
              
              
              Case 101
                    Flip_H()
              
              Case 102
                    Flip_V()
              
              Case 103
                    Rotate_I()
                      
              
              Case 104
                    SetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(Gragad), #HWND_NOTOPMOST	, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
                    SetParent_(GadgetID(Gragad),GadgetID(21))
              
              Case 105
                    SetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(Gragad), #HWND_TOP	, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
                    SetParent_(GadgetID(Gragad),GadgetID(21))
              
              Case 106
                    SetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(Gragad), #HWND_BOTTOM, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
                    SetParent_(GadgetID(Gragad),GadgetID(21))

              
              Case 107
                    SetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE, GetWindowLongPtr_(GadgetID(Gragad), #GWL_STYLE) | #WS_CLIPSIBLINGS)
                    SetWindowPos_(GadgetID(Gragad), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE| #SWP_NOMOVE| #SWP_SHOWWINDOW| #SWP_NOACTIVATE)
                    SetParent_(GadgetID(Gragad),GadgetID(21))
                    
              Case 110
                    Move_OB()
                    
              Case 111
                    Resize_OB()
                            
              Case 112
                    If Editflag = 0 And Selected = 1
                        Delgad = Gragad
                        FreeGadget(Gragad)
                        Selected = 0
                        SetGadgetText(57,"No Selected Object")
                    Else
                        MessageRequester("Error", "Please Select Object First",#MB_APPLMODAL|#MB_ICONERROR)
                        Selected = 0
                        SetGadgetText(57,"No Selected Object")
                    EndIf
              
              Case 120 
                   Quit = 1
                   
            EndSelect
            
          
      Case #WM_RBUTTONDOWN
            If hhook
               UnhookWindowsHookEx_(hhook)
            EndIf    
            If Editflag = 0           
              DisplayPopupMenu(2, WindowID(0))
            Else
              DisplayPopupMenu(1, WindowID(0))
            EndIf
            hhook = SetWindowsHookEx_(#WH_MOUSE, @MHookProc(),GetModuleHandle_(0),GetWindowThreadProcessId_(WindowID(0), 0))
            
      Case #WM_RBUTTONUP       
            
            
      Case #WM_MOUSEMOVE
            SetCursor_(LoadCursor_(0,#IDC_ARROW))            
            
      Case #WM_CHAR
            If EventwParam() = 13 Or EventwParam() = 8
                InvalidateRect_(GadgetID(21),0,1)
            EndIf
            
             
      Case #WM_KEYDOWN
            If GetAsyncKeyState_(#VK_SHIFT) & $8000 = 32768 And IsGadget(Ingad) And Selected = 1 And Editflag = 0
              If EventwParam() =37
                  ResizeGadget(Gragad,GadgetX(Gragad)-1,GadgetY(Gragad),GadgetWidth(Gragad)+1, #PB_Ignore)
                  If GadInf(Gragad,2) = 0
                    FreeImage(Gragad)
                    CopyImage(0,Gragad)
                    ResizeImage(Gragad,GadgetWidth(Gragad)+1,GadgetHeight(Gragad))
                    SetGadgetState(Gragad,ImageID(Gragad))
                  EndIf
              ElseIf EventwParam() = 39  And GadgetX(Gragad) >= 0
                  ResizeGadget(Gragad,GadgetX(Gragad)+1,#PB_Ignore,GadgetWidth(Gragad)-1, #PB_Ignore)
                  If GadInf(Gragad,2) = 0
                    FreeImage(Gragad)
                    CopyImage(0,Gragad)
                    ResizeImage(Gragad,GadgetWidth(Gragad)-1,GadgetHeight(Gragad))
                    SetGadgetState(Gragad,ImageID(Gragad))
                  EndIf
              ElseIf EventwParam() =38 And GadgetY(Gragad) >= 0
                  ResizeGadget(Gragad,GadgetX(Gragad),GadgetY(Gragad)-1, GadgetWidth(Gragad), GadgetHeight(Gragad)+1)
                  If GadInf(Gragad,2) = 0
                    FreeImage(Gragad)
                    CopyImage(0,Gragad)
                    ResizeImage(Gragad,GadgetWidth(Gragad),GadgetHeight(Gragad)+1)
                    SetGadgetState(Gragad,ImageID(Gragad))
                  EndIf
              ElseIf EventwParam() =40
                  ResizeGadget(Gragad,GadgetX(Gragad),GadgetY(Gragad)+1,GadgetWidth(Gragad), GadgetHeight(Gragad)-1)
                  If GadInf(Gragad,2) = 0
                    FreeImage(Gragad)
                    CopyImage(0,Gragad)
                    ResizeImage(Gragad,GadgetWidth(Gragad),GadgetHeight(Gragad)-1)
                    SetGadgetState(Gragad,ImageID(Gragad))
                  EndIf
              EndIf                            
            ElseIf IsGadget(Gragad) And Selected = 1 And Editflag = 0
                  If EventwParam() = 37 And IsGadget(Gragad) And GadgetX(Gragad) >= 0
                     ResizeGadget(Gragad,GadgetX(Gragad)-1,GadgetY(Gragad),#PB_Ignore, #PB_Ignore)
                  ElseIf EventwParam() =39
                     ResizeGadget(Gragad,GadgetX(Gragad)+1,GadgetY(Gragad),#PB_Ignore, #PB_Ignore)
                  ElseIf EventwParam() =38 And GadgetY(Gragad) >= 0
                     ResizeGadget(Gragad,GadgetX(Gragad),GadgetY(Gragad)-1,#PB_Ignore, #PB_Ignore)
                  ElseIf EventwParam() =40 And IsGadget(Gragad)
                     ResizeGadget(Gragad,GadgetX(Gragad),GadgetY(Gragad)+1,#PB_Ignore, #PB_Ignore)
                  EndIf
            ElseIf Selected = 0 And Editflag = 0
                 MessageRequester("Error","Select Object First if in Graphic Mode"+#CRLF$+"                      Or" + #CRLF$ +"    Switch To Text Mode for Typing" , #MB_APPLMODAL|#MB_ICONERROR)
                 Selected = 0
                 SetGadgetText(57,"No Selected Object")
            EndIf
            
            If IsGadget(Gragad) And Gragad < 21
                GadInf(Gragad,0) = GadgetX(Gragad)
                GadInf(Gragad,1) = GadgetY(Gragad)              
            EndIf           
             
      Case #WM_KEYUP
            If EventwParam() = 46
                InvalidateRect_(GadgetID(21),0,1)
            EndIf
            
            
      Case #WM_DEADCHAR
            
             
      Case #WM_SYSCHAR
            
             
      Case #WM_SYSKEYDOWN
            
             
      Case #WM_SYSKEYUP
          
  EndSelect
    
Until Quit = 1
UnhookWindowsHookEx_(hhook)

Edit : Changed again
Edit 2 : Redrawing bug fixed
Some other minor bugs fixed
Edit 3 : Another Update
Edit 4 :To many changes and to many bugs fixed
Last edited by RASHAD on Sun Nov 04, 2012 12:14 am, edited 7 times in total.
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Update :Desktop Publisher [Early stage Windows]

Post by Kwai chang caine »

I'd like to help you by trying your super code .... I'm so ashamed ... :oops:
I always understood nothing ... :oops: :oops:
What object should I select before ??
I know .. I am a wound .. :oops: :oops: :oops:
I clic everywhere and the only thing i have it's red lines after a moment :oops: :oops: :oops:
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Update :Desktop Publisher [Early stage Windows]

Post by RASHAD »

Hi KCC
1- Press the Left Mouse Button and keep pressing it while moving to draw a Red Rectangle
2- Release the left mouse then press Insert Button to insert Image or Text Box
3- You can choose the type of object from the ComboBox()
4- Move the mouse over the object then press Right Mouse Button fro Popup Menu
this as a start


Have fun
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Update :Desktop Publisher [Early stage Windows]

Post by Kwai chang caine »

Thanks RASHAD for your patience :oops:

It's a story of mad, because me since the beginning i have not what you say !! :shock:
When i run the program, i have that
Image
If i clic in the center, a blanc foreground appear, and i can create the red square
But when i have finish to create the square, i have no button, all gadget have disappears :shock:
And if i move the window, by the titlebar, i have that :
Image

I have XP PRO SP3 and PB v5.0B7
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Update :Desktop Publisher [Early stage Windows]

Post by RASHAD »

I just copied the code from the Forum because I keep changing it all the time
Windows XP Pro SP2 x86 - PB 4.61 x86 - PB 4.61 x64
It works perfect

Check it with Windows 7 and I am waiting for your response
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Update :Desktop Publisher [Early stage Windows]

Post by Kwai chang caine »

Check it with Windows 7 and I am waiting for your response
I not have W7 me :(
ImageThe happiness is a road...
Not a destination
Post Reply