Sign in to follow this  
Followers 0
_Kurt

Playing with GUICtrlSetGraphic

5 posts in this topic

#1 ·  Posted (edited)

I'm currently very frustrated, I've looked over the helpfiles examples several times and played around with it, but I can't seem to be able to create a quarter-circle:

Posted Image

Am I missing the obvious here?

Thanks,

Kurt

Edited by _Kurt

Awaiting Diablo III..

Share this post


Link to post
Share on other sites



I know it can be done with the Bezier type.. I'm just not patient enough to play with the parameters:

#include <GUIConstants.au3>
    
$MAXGr=7
Global $a[$MAXGr+1] ; 0 and $MAXGr entries not used to allow GUICtrlDelete result
Global $child, $del

GUICreate("My Main", -1,-1,100,100)
$del1=GuiCtrlCreateButton("Delete", 50,200, 50)
GUISetState()
CreateChild()

$i=1
$inc=1
;$i=5   ; uncomment to delete starting from last define Graphic control
;$inc=-1

Do
    $msg = GUIGetMsg()
    if $msg= $del1 then Del()

    if $msg= $del then
        GuiCtrlDelete($a[$i])
        $i = $i+$inc
        if $i <0 OR $i>$MAXGr then exit
    EndIf
Until $msg=$GUI_EVENT_CLOSE

Func Del()
    GuiDelete($child)
    CreateChild()
EndFunc

Func CreateChild()
$child=GUICreate("My Draw")
$del=GuiCtrlCreateButton("Delete", 50,165, 50)

;~ $a[1]=GuiCtrlCreateGraphic(20, 50, 100,100)
;~ GUICtrlSetBkColor(-1,0xffffff)
;~ GUICtrlSetColor(-1,0)
;~ GUICtrlSetGraphic(-1,$GUI_GR_BEZIER, 120,100, 200,20, 200,100)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xff0000,0xff0000)
;~ GUICtrlSetGraphic(-1,$GUI_GR_PIE, 50,50, 40,30,270)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0x00ff00,0xffffff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_PIE, 58,50, 40,-60,90)

;~ GUICtrlSetGraphic(-1,$GUI_GR_ELLIPSE, 100,100, 50,80)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0x00ff00,0xc0c0ff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_RECT, 350,200, 50,80)
;~ GuiCtrlCreateLabel("label", 65, 100, 30)
;~ GUICtrlSetColor(-1,0xff)

;~ $a[2]=GuiCtrlCreateGraphic(220, 10, 100,100)

;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0, 0xff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_PIE, 50,50, 40,30,270)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0x00ff00,0xffffff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_PIE, 58,50, 40,-60,90)

;~ $a[3]=GuiCtrlCreateGraphic(220, 110, 100,100)
;~ GUICtrlSetBkColor(-1,0xf08080)
;~ GUICtrlSetColor(-1,0xff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_HINT, 1)

;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xff00)
;~ GUICtrlSetGraphic(-1,$GUI_GR_RECT, 50,50, 80,80)

;~ $a[4]=GuiCtrlCreateGraphic(20, 200, 80,80)
;~ GUICtrlSetBkColor(-1,0xffffff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_HINT, 1)

;~ GUICtrlSetGraphic(-1,$GUI_GR_MOVE, 10,10)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 30,40)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xff00)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 70,70)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xff0000)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 10,50)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xffff00)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 10,10)

;~ $a[5]=GuiCtrlCreateGraphic(150, 10, 50,50)
;~ GUICtrlSetBkColor(-1,0xa0ffa0)
;~ GUICtrlSetGraphic(-1,$GUI_GR_MOVE, 20,20)        ; start point
;~ ; it is better to draw line and after point
;~ ; to avoid to switch color at each drawing
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0x0000ff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_DOT, 30,30)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 20,40)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0xff0000)
;~ GUICtrlSetGraphic(-1,$GUI_GR_DOT, 25,25)
;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 40,40)
;~ GUICtrlSetGraphic(-1,$GUI_GR_DOT, 30,40)

$a[6]=GuiCtrlCreateGraphic(110, 260, 230,130)
;~ GUICtrlSetColor(-1,0)                        ; to display a balck border line
;~ GUICtrlSetBkColor(-1,0xc0c0ff)
;~ GUICtrlSetGraphic(-1,$GUI_GR_HINT, 3)        ; to display control lines and end points

;~ GUICtrlSetGraphic(-1,$GUI_GR_COLOR, 0, 0xff); fill in blue
GUICtrlSetGraphic(-1,$GUI_GR_MOVE, 120,20)      ; start point
GUICtrlSetGraphic(-1,$GUI_GR_BEZIER, 120,100, 200, 20, 200,100);x,y,x1,y1,x2,y2
;~ GUICtrlSetGraphic(-1,$GUI_GR_BEZIER+$GUI_GR_CLOSE, 100,40, 40,100, 40,20)
;~ GUICtrlSetGraphic(-1,$GUI_GR_LINE, 60,30)        ; start point

GuiSetState()
EndFunc

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Yes, I know all that, I don't understand the Bezier type parameters.

I tried fiddling around with the parameters but still, can't figure it out. <_<

Kurt

EDIT: Also, I know I could use $GUI_GR_PIE and cover up the rest with some labels, but I know there's some way to do this the right way.

Edited by _Kurt

Awaiting Diablo III..

Share this post


Link to post
Share on other sites

Well... this is my last try. It does what you want, but I insist that this can be done doing a Bezier courve. Anyway..

#include <GUIConstants.au3>
#include <Math.au3>
 
GUICreate("Form1", 329, 243, 237, 155)
$g= GUICtrlCreateGraphic(38, 22, 261, 185)

$radius=50
$h=50;Center x
$k=50;Center y
$start=0;Start angle
$end=90;End angle

For $i = $start to $end
    $X = $h - sin(_Radian($i))*$radius    
    $Y = $k - cos(_Radian($i))*$radius
    GUICtrlSetGraphic($g,$GUI_GR_PIXEL,$x,$y)
Next
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Note: The bigger the radius is, the uglier the graph looks. To fix that, you'll need to add a 'step' and a number <1 (Like, 0.5) But the smaller this number is, the slower it will be...

Share this post


Link to post
Share on other sites

Thank you very much Nahuel.

I was having a hard time figuring out the bezier. but this is alot more simple.

Kurt


Awaiting Diablo III..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0