Draw a grid in a "ContainerGadget"

Just starting out? Need help? Post your questions and find answers here.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8452
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: Draw a grid in a "ContainerGadget"

Post by netmaestro »

Actually, PureBasic is all Fred's fault! It's worth a feature request imho. In the meantime changing the class name after creation isn't too easy iirc.
BERESHEIT
Little John
Addict
Addict
Posts: 4812
Joined: Thu Jun 07, 2007 3:25 pm
Location: Berlin, Germany

Re: Draw a grid in a "ContainerGadget"

Post by Little John »

netmaestro wrote:Actually, PureBasic is all Fred's fault!
:D
mestnyi
Addict
Addict
Posts: 1109
Joined: Mon Nov 25, 2013 6:41 am

Re: Draw a grid in a "ContainerGadget"

Post by mestnyi »

Means there is no solution to this for me.
How to add gadgets to winapi container?

Code: Select all

CreateImage(0,300,200,24,$FFFFFF)
StartDrawing(ImageOutput(0))
For X = 10 To 300 Step 20
  For Y = 10 To 200 Step 20
     Line(0,Y,300,1,$C0C0C2)
     Line(X,0,1,200,$C0C0C2)
  Next
Next
StopDrawing()

Procedure ApiContainer(gadgetnumber, X, Y, w, h, Flag)
  dwExStyle = Flag;
  dwStyle = #WS_CHILD|#WS_VISIBLE|#SS_CENTER|#SS_CENTERIMAGE;|#SS_SUNKEN;
  hwndOwner = UseGadgetList(0)
  hInstance = GetModuleHandle_(0)
  apiContainer = CreateWindowEx_(dwExStyle, "STATIC", "Panel 1", dwStyle, X, Y, w, h, hwndOwner, #Null, hInstance, #Null);
  ;apiContainer = CreateWindowEx_(#WS_EX_CONTROLPARENT, "static", "", #WS_CHILD|#WS_VISIBLE|#BS_GROUPBOX, X, Y, w, h, UseGadgetList(0), gadgetnumber, GetModuleHandle_(0), 0)
  SendMessage_(apiContainer, #WM_SETFONT, GetStockObject_(#DEFAULT_GUI_FONT), 0)
  ProcedureReturn apiContainer
EndProcedure


OpenWindow(0,0,0,640,480,"", #PB_Window_SystemMenu|#PB_Window_SizeGadget| #PB_Window_ScreenCentered)
SetWindowColor(0, #White) 

ContainerGadget(1, 10,10,300,200,#PB_Container_Flat) 
  StringGadget(2,10,10,100,20,"") 
  ButtonGadget(3,120,10,50,20,"OK") 
  
  ContainerGadget(22,10,50,100,100,#PB_Container_Flat) 
  CloseGadgetList()
CloseGadgetList()

ApiContainer(11, 320,10,300,200,#PB_Container_Flat) 
;ContainerGadget(11, 320,10,300,200,#PB_Container_Flat) 
  StringGadget(12,10,10,100,20,"") 
  TextGadget(13,120,10,50,20,"OK") 
;CloseGadgetList()

SetClassLongPtr_(GadgetID(1),#GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(0)))
  

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 5015
Joined: Sun Apr 12, 2009 6:27 am

Re: Draw a grid in a "ContainerGadget"

Post by RASHAD »

Tested PB 5.42 x86 windows 10 x64

#1 :

Code: Select all

CreateImage(0,300,200,24,$FFFFFF)
StartDrawing(ImageOutput(0))
For X = 10 To 300 Step 20
  For Y = 10 To 200 Step 20
     Line(0,Y,300,1,$C0C0C2)
     Line(X,0,1,200,$C0C0C2)
  Next
Next
StopDrawing()


OpenWindow(0,0,0,640,480,"", #PB_Window_SystemMenu|#PB_Window_SizeGadget| #PB_Window_ScreenCentered)
ContainerGadget(1, 10,10,300,200,#PB_Container_Flat)
  StringGadget(2,10,10,100,20,"")
  ButtonGadget(3,120,10,50,20,"OK")
 
  ContainerGadget(22,10,50,100,100,#PB_Container_Flat)
    ButtonGadget(23,10,10,50,20,"OK")
  CloseGadgetList()
CloseGadgetList()
SetGadgetColor(22,#PB_Gadget_BackColor,#White)


ContainerGadget(11, 320,10,300,200,#PB_Container_Flat)
  StringGadget(12,10,10,100,20,"")
  ButtonGadget(13,120,10,50,20,"OK")
CloseGadgetList()
SetGadgetColor(11,#PB_Gadget_BackColor,#Yellow)

SetClassLongPtr_(GadgetID(1),#GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(0)))


Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
#2 : Much better than #1

Code: Select all

CreateImage(0,300,200,24,$FFFFFF)
StartDrawing(ImageOutput(0))
For X = 10 To 300 Step 20
  For Y = 10 To 200 Step 20
     Line(0,Y,300,1,$C0C0C2)
     Line(X,0,1,200,$C0C0C2)
  Next
Next
StopDrawing()

CreateImage(10,300,200,24,$A7FFAE)
CreateImage(20,100,100,24,$A7FBFE)

OpenWindow(0,0,0,640,480,"", #PB_Window_SystemMenu|#PB_Window_SizeGadget| #PB_Window_ScreenCentered)
ImageGadget(0,10,10,300,200,ImageID(0))
DisableGadget(0,1)
ContainerGadget(1, 10,10,300,200,#PB_Container_Flat)
  StringGadget(2,10,10,100,20,"")
  ButtonGadget(3,120,10,50,20,"OK")
  ImageGadget(20,10,50,100,100,ImageID(20))
  DisableGadget(20,1)
  ContainerGadget(22,10,50,100,100,#PB_Container_Flat)
    ButtonGadget(23,10,10,50,20,"OK")
  CloseGadgetList()
CloseGadgetList()

ImageGadget(10,320,10,300,200,ImageID(10))
DisableGadget(10,1)
ContainerGadget(11, 320,10,300,200,#PB_Container_Flat)
  StringGadget(12,10,10,100,20,"")
  ButtonGadget(13,120,10,50,20,"OK")
CloseGadgetList()

SetClassLongPtr_(GadgetID(1),#GCL_HBRBACKGROUND, GetStockObject_(#NULL_BRUSH))

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
#3 :
You can use Container created with API
Egypt my love
mestnyi
Addict
Addict
Posts: 1109
Joined: Mon Nov 25, 2013 6:41 am

Re: Draw a grid in a "ContainerGadget"

Post by mestnyi »

The first option works very well I just can not save.
Because I had to, for each сontainer, set a different image and it does not work. Here is an example

Code: Select all

CreateImage(0,300,200,24,$FFFFFF)
StartDrawing(ImageOutput(0))
For X = 10 To 300 Step 20
  For Y = 10 To 200 Step 20
     Line(0,Y,300,1,$C0C0C2)
     Line(X,0,1,200,$C0C0C2)
  Next
Next
StopDrawing()

CreateImage(10,300,200,24,$FFFFFF)
StartDrawing(ImageOutput(10))
For X = 10 To 300 Step 40
  For Y = 10 To 200 Step 40
     Line(0,Y,300,1,$C0C0C2)
     Line(X,0,1,200,$C0C0C2)
  Next
Next
StopDrawing()

OpenWindow(0,0,0,640,480,"", #PB_Window_SystemMenu|#PB_Window_SizeGadget| #PB_Window_ScreenCentered)
ContainerGadget(1, 10,10,300,200,#PB_Container_Flat)
  StringGadget(2,10,10,100,20,"")
  ButtonGadget(3,120,10,50,20,"OK")
 
  ContainerGadget(22,10,50,100,100,#PB_Container_Flat)
    ButtonGadget(23,10,10,50,20,"OK")
  CloseGadgetList()
CloseGadgetList()

ContainerGadget(11, 320,10,300,200,#PB_Container_Flat)
  StringGadget(12,10,10,100,20,"")
  ButtonGadget(13,120,10,50,20,"OK")
CloseGadgetList()

SetGadgetColor(1,#PB_Gadget_BackColor,GetSysColor_( #COLOR_BTNFACE ))
SetGadgetColor(11,#PB_Gadget_BackColor,#Yellow)
SetGadgetColor(22,#PB_Gadget_BackColor,#White)


SetGadgetColor(1, #PB_Gadget_BackColor, #PB_Default)
SetClassLongPtr_(GadgetID(1),#GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(0)))

SetGadgetColor(11, #PB_Gadget_BackColor, #PB_Default)
SetClassLongPtr_(GadgetID(11),#GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(10)))


Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
I think the third option would be the best but that I could not get the example I gave above. :| :cry:
Post Reply