Hi all, For the laast few weeks, i was trying to learn nim with little project. 
A GUI library for windows is my project. Not fully finished yet, but i think if 
i show it you guys, i can improve it more. So for your criticism, i am posting 
a sample here. Please take a look .
    
    
    import GuiLib       # My Gui Library header file. It contains all necessary 
module imports.
    
    # This Application class will do the initial jobs such as getting the 
hInstance.
    # You can pass a string for your window class name. It's optional.
    var app = Application("Window-Nim")
    
    
    # Forward declarations.  When will nim avoid the need for forward 
declaration ?
    proc OnFormCreate( e : eventArgs)
    proc OnLoad( e : eventArgs)
    proc OnNCCreate(e : eventArgs)
    proc OnButtonClick( e : eventArgs)
    proc OnButtonClick2( e : eventArgs)
    proc b1OnMouseEnter( e : eventArgs)
    proc OnClosing( e : eventArgs)
    proc OnSetFocus( e : eventArgs)
    proc OnKillFocus( e : eventArgs)
    proc OnMouseLeave_cbt(e : eventArgs)
    proc OnMouseMove_Cal(e : eventArgs)
    proc OnClick_CustomBTN(e : eventArgs)
    
    
    
    # Creating an instance of a form class. We need to pass the Application 
object as parameter--
    # -- in order to get the hInstance and other stuff.
    var Form1 = NewForm(app)
    
    # RegisterMsg is for handling wm_create msg. I can't find a better way to 
do this.
    Form1.RegisterMsg(WM_CREATE, OnFormCreate)
    
    # Now we are creating the form. If you want to set the form properties, you 
can--
    # --set it like this.
    # Form1.posx = 150
    # Form1.posy = 200
    # Form1.width = 800
    # Form1.height = 600
    # Form1.text = "My Nim Window"
    # But i am using default values here.
    Form1.CreateForm()
    
    # Create some control classes
    var
        b1, b2 = Button()
        lv = ListView()
        cal = Calendar()
        ud = UpDown()
        dtp = DateTimePicker()
        trb = TrackBar()
        red = RichEdit()
        cbt = CustomButton()
    
    # Here you can add handler functions to control events lile click, mouse 
move etc.
    b1.AddHandler(b1.event.click, OnButtonClick)
    b2.AddHandler(b2.event.click, OnButtonClick2)
    b2.AddHandler(b2.event.mouseLeave, b2_OnMouseLeave)
    b1.AddHandler(b1.event.mouseEnter, b1OnMouseEnter)
    Form1.AddHandler(Form1.event.mouseRightUp, OnDblClk_Form1)
    Form1.AddHandler(Form1.event.closing, OnClosing)
    Form1.AddHandler(Form1.event.load, OnLoad)
    Form1.AddHandler(Form1.event.setFocus, OnSetFocus)
    Form1.AddHandler(Form1.event.killFocus, OnKillFocus)
    cal.AddHandler(cal.event.mouseEnter, OnMouseMove_Cal)
    red.AddHandler(red.event.mouseLeave, OnMouseLeave_Red)
    cal.AddHandler(cal.event.mouseHover,OnMouseHover_Cal)
    cbt.AddHandler(cbt.event.click, OnClick_CustomBTN)
    cbt.AddHandler(cbt.event.mouseLeave, OnMouseLeave_cbt)
    
    # Now, we can set the control properties.
    b2.posx =140
    b2.posy = 10
    b2.text = "My Button"
    b2.width = 150
    b2.font.name = "Calibri"    # Tahoma is default
    b2.font.size = 12
    
    lv.posx = 350
    lv.posy = 10
    lv.width = 300
    
    cal.posx = 350
    cal.posy = 10
    
    ud.posx = 350
    ud.posy = 320
    
    # See, custom button class has so many color properties.
    cbt.posx= 350
    cbt.posy= 220
    cbt.text = "Owner Drawn BTN"
    cbt.backColor = NewColor(80, 16, 44)    # NewColor function receives RGB 
values and returns a COLORREFF
    cbt.foreColor = NewColor(15, 15, 80)
    cbt.hoverBackColor = cbt.backColor
    cbt.hoverForeColor = NewColor(238,20,49)
    cbt.width = 200
    cbt.height = 80
    
    dtp.posx = 150
    dtp.posy = 150
    
    trb.posx = 150
    trb.posy = 120
    
    red.posx = 10
    red.posy = 200
    
    # Now we can create our controls.
    b1.CreateButton()
    b2.CreateButton()
    cal.CreateCalendar()
    ud.CreateUpDown()
    dtp.CreateDateTimePicker()
    trb.CreateTrackBar()
    red.CreateRichEdit()
    cbt.CreateCustomButton()
    
    # Let's display our form
    Form1.ShowForm()
    
    # This is the main loop.
    app.Run()
    
    
    # Now, these are the event handler function area.
    # Argument "e" is a structure. It contains all necessary elements to handle 
the--
    # --WndProc function
    
    proc OnCreate( e : eventArgs)  =
        echo "Window created....."
        echo e.handle   # e.handle is the window HWND
    
    proc OnLoad( e : eventArgs) =
        echo "Window Loaded...."
    
    proc OnButtonClick( e : eventArgs) =
        b2.text = "Changed Text"
    
    proc OnButtonClick2( e : eventArgs) =
        msgBox("A Message")
    
    proc b1OnMouseEnter( e : eventArgs) =
        echo "Mouse entered on button 1"
    
    proc b2_OnMouseLeave( e : eventArgs) =
        echo "Mouse leaved from Button 2"
    
    proc OnNCCreate( e : eventArgs) =
        echo "NC CREATE handled"
    
    proc OnClosing( e : eventArgs) =
        echo "Form is closing..."
    
    proc OnSetFocus( e : eventArgs) =
        echo "Form is in focus...."
    
    proc OnKillFocus( e : eventArgs) =
        echo "Form lost focus...."
    
    proc OnMouseLeave_cbt(e : eventArgs) =
        echo "Mouse leaved from Custom button..."
    
    proc OnMouseMove_Cal(e : eventArgs) =
        echo "Mouse hovered over Calendar..."
    
    proc OnMouseLeave_Red(e : eventArgs) =
        echo "Mouse leave from Rich Edit..."
    
    # End
    
    
    
    Run

Reply via email to