Sign in to follow this  
Followers 0
BlackEvil

Image review tool

3 posts in this topic

#1 ·  Posted (edited)

Hi there..

I want to work on a image review tool. The basic idea of this tool is to review some GUI applications (developed in any language) and give comments to the developer with reference to the part of the GUI, I am making comment on. The final report with comments needs to be in MS Excel.

My idea is first run the application under review and get the GUI. Then using AutoIT place a transperant layer over it (could be on whole of the desktop size also) then mark a rectangle with a cross mouse icon on interested area, get the image of that area from the GUI beneath the transparent layer. After that get a text box or something where I can put down my comment about the croped area. Finally save those comments and croped images in excel file.

My questions are:

1. Is it possible to get a transparent layer over the GUI using Autoit?

2. Where to find some examples to start with?

3. How do I get the marked image from the desktop?

Thanks in advance

Edited by BlackEvil

Share this post


Link to post
Share on other sites



BlackEvil,

Something I had in my Snippets folder: ;)

#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <ScreenCapture.au3>
#Include <Misc.au3>

Global $iX1, $iY1, $iX2, $iY2, $aPos, $sMsg, $sBMP_Path

; Create GUI
$hMain_GUI = GUICreate("Select Rectangle", 240, 50)

$hRect_Button   = GUICtrlCreateButton("Mark Area",  10, 10, 80, 30)
$hCancel_Button = GUICtrlCreateButton("Cancel",    150, 10, 80, 30)

GUISetState()

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $hCancel_Button
            FileDelete(@ScriptDir & "Rect.bmp")
            Exit
        Case $hRect_Button
            GUISetState(@SW_HIDE, $hMain_GUI)
            Mark_Rect()
            ; Capture selected area
            $sBMP_Path = @ScriptDir & "Rect.bmp"
            _ScreenCapture_Capture($sBMP_Path, $iX1, $iY1, $iX2, $iY2, False)
            GUISetState(@SW_SHOW, $hMain_GUI)
            ; Display image
            $hBitmap_GUI = GUICreate("Selected Rectangle", $iX2 - $iX1 + 1, $iY2 - $iY1 + 1, 100, 100)
            $hPic = GUICtrlCreatePic(@ScriptDir & "Rect.bmp", 0, 0, $iX2 - $iX1 + 1, $iY2 - $iY1 + 1)
            GUISetState()

    EndSwitch

WEnd

; -------------

Func Mark_Rect()

    Local $aMouse_Pos, $hMask, $hMaster_Mask, $iTemp
    Local $UserDLL = DllOpen("user32.dll")

    ; Create transparent GUI with Cross cursor
    $hCross_GUI = GUICreate("Test", @DesktopWidth, @DesktopHeight - 20, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
    WinSetTrans($hCross_GUI, "", 8)
    GUISetState(@SW_SHOW, $hCross_GUI)
    GUISetCursor(3, 1, $hCross_GUI)

    Global $hRectangle_GUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
    GUISetBkColor(0x000000)

    ; Wait until mouse button pressed
    While Not _IsPressed("01", $UserDLL)
        Sleep(10)
    WEnd

    ; Get first mouse position
    $aMouse_Pos = MouseGetPos()
    $iX1 = $aMouse_Pos[0]
    $iY1 = $aMouse_Pos[1]

    ; Draw rectangle while mouse button pressed
    While _IsPressed("01", $UserDLL)

        $aMouse_Pos = MouseGetPos()

        $hMaster_Mask = _WinAPI_CreateRectRgn(0, 0, 0, 0)
        $hMask = _WinAPI_CreateRectRgn($iX1,  $aMouse_Pos[1], $aMouse_Pos[0],  $aMouse_Pos[1] + 1) ; Bottom of rectangle
        _WinAPI_CombineRgn($hMaster_Mask, $hMask, $hMaster_Mask, 2)
        _WinAPI_DeleteObject($hMask)
        $hMask = _WinAPI_CreateRectRgn($iX1, $iY1, $iX1 + 1, $aMouse_Pos[1]) ; Left of rectangle
        _WinAPI_CombineRgn($hMaster_Mask, $hMask, $hMaster_Mask, 2)
        _WinAPI_DeleteObject($hMask)
        $hMask = _WinAPI_CreateRectRgn($iX1 + 1, $iY1 + 1, $aMouse_Pos[0], $iY1) ; Top of rectangle
        _WinAPI_CombineRgn($hMaster_Mask, $hMask, $hMaster_Mask, 2)
        _WinAPI_DeleteObject($hMask)
        $hMask = _WinAPI_CreateRectRgn($aMouse_Pos[0], $iY1, $aMouse_Pos[0] + 1,  $aMouse_Pos[1]) ; Right of rectangle
        _WinAPI_CombineRgn($hMaster_Mask, $hMask, $hMaster_Mask, 2)
        _WinAPI_DeleteObject($hMask)
        ; Set overall region
        _WinAPI_SetWindowRgn($hRectangle_GUI, $hMaster_Mask)

        If WinGetState($hRectangle_GUI) < 15 Then GUISetState()
        Sleep(10)

    WEnd

    ; Get second mouse position
    $iX2 = $aMouse_Pos[0]
    $iY2 = $aMouse_Pos[1]

    ; Set in correct order if required
    If $iX2 < $iX1 Then
        $iTemp = $iX1
        $iX1 = $iX2
        $iX2 = $iTemp
    EndIf
    If $iY2 < $iY1 Then
        $iTemp = $iY1
        $iY1 = $iY2
        $iY2 = $iTemp
    EndIf

    GUIDelete($hRectangle_GUI)
    GUIDelete($hCross_GUI)
    DllClose($UserDLL)

EndFunc   ;==>Mark_Rect

Feel free to use any of it if it helps. :)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

Share this post


Link to post
Share on other sites

Wow .. that's pretty fast! :)

Thank you M23! ;)

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

  • Similar Content

    • FMS
      Saving GUI info external
      By FMS
      Dear reader,
       
      At the moment I'm trying to make a script that is changeble by the users.
      It is a script that type's words for you whish u can change what it should be.
      I was thinking that the users may change the button settings in the second tab whit a pull down menu.
       
      At this point the text that must be typed in are hard coded in the program.
      I know that I must "save" the text in a diffrent file but i don't now how.
      Also mine search on the net or forum wasn't fruitfull.(maybe i was looking wrong;))

      Could somebody push me in the right direction?
      (I'm still al little bit new at this so any help or info is appreciated)
       
      thanks in advanced.
       
      #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 318, 228, 192, 124) $Tab1 = GUICtrlCreateTab(8, 32, 289, 177) $TabSheet1 = GUICtrlCreateTabItem("TabSheet1") $Btn001 = GUICtrlCreateButton("Button1", 25, 68, 75, 25) $Btn002 = GUICtrlCreateButton("Button2", 110, 68, 75, 25) $Btn003 = GUICtrlCreateButton("Button3", 196, 68, 75, 25) $Btn004 = GUICtrlCreateButton("Button4", 25, 100, 75, 25) $Btn005 = GUICtrlCreateButton("Button5", 110, 100, 75, 25) $Btn006 = GUICtrlCreateButton("Button6", 196, 100, 75, 25) $Btn007 = GUICtrlCreateButton("Button7", 25, 132, 75, 25) $Btn008 = GUICtrlCreateButton("Button8", 110, 132, 75, 25) $Btn009 = GUICtrlCreateButton("Button9", 196, 132, 75, 25) $Btn010 = GUICtrlCreateButton("Button10", 25, 164, 75, 25) $Btn011 = GUICtrlCreateButton("Button11", 110, 164, 75, 25) $Btn012 = GUICtrlCreateButton("Button12", 196, 164, 75, 25) $TabSheet2 = GUICtrlCreateTabItem("TabSheet2") $Combo1 = GUICtrlCreateCombo("", 144, 72, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUICtrlSetData(-1, " 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12") $Btn013 = GUICtrlCreateButton("Button13", 40, 168, 75, 25) $Btn014 = GUICtrlCreateButton("Button14", 152, 168, 75, 25) GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Btn001 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 1 is pushed") Case $Btn002 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 2 is pushed") Case $Btn003 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 3 is pushed") Case $Btn004 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 4 is pushed") Case $Btn005 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 5 is pushed") Case $Btn006 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 6 is pushed") Case $Btn007 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 7 is pushed") Case $Btn008 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 8 is pushed") Case $Btn009 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 9 is pushed") Case $Btn010 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 10 is pushed") Case $Btn011 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 11 is pushed") Case $Btn012 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 12 is pushed") Case $Btn013 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 13 is pushed") Case $Btn014 send("{ALTDOWN}{TAB}{ALTUP}") Sleep(1000) Send ("Button 14 is pushed") EndSwitch WEnd  
    • BetaLeaf
      [Solved]Gui triggering wrong case events
      By BetaLeaf
      I am puzzled. When I check the radio for "Force Disk Mode", I see "Ram Mode" in ConsoleLog when it should be saying "Disk Mode"(from the consolewrite command). Also, clicking the ok button does not work either. Why is it not working?
       
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $SelectMode = GUICreate("Select Mode", 111, 72, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $DS_SETFOREGROUND)) $DiskMode = GUICtrlCreateRadio("Force Disk Mode", 8, 8, 113, 17) $RamMode = GUICtrlCreateCheckbox("Force Ram Mode", 8, 24, 113, 17) $OkButton = GUICtrlCreateRadio("Ok", 8, 40, 97, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case GUICtrlRead($DiskMode) = $GUI_CHECKED $Mode = 1 ConsoleWrite("Disk Mode" & @CRLF) Case GUICtrlRead($RamMode) = $GUI_CHECKED $Mode = 0 ConsoleWrite("Ram Mode" & @CRLF) Case $OkButton ConsoleWrite("Ok Clicked" & @CRLF) GUISetState(@SW_HIDE) ExitLoop EndSwitch WEnd  
    • TheDcoder
      Help with resizing controls in a resizable window!
      By TheDcoder
      Hello! I am trying make my GUI Controls resize correctly... Here is my GUI's code:
      #include <ButtonConstants.au3> #include <ColorConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Global $g_hMainGUI = GUICreate("Test GUI", 500, 316, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZEBOX, $WS_SIZEBOX)) GUISetBkColor($COLOR_WHITE, $g_hMainGUI) GUICtrlCreateGroup("Box 1", 6, 2, 488, 197) GUICtrlSetResizing(-1, $GUI_DOCKBORDERS) GUICtrlCreateLabel("Label", 9, 20, 67, 15) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUICtrlCreateCombo("", 77, 14, 334, 21, $CBS_DROPDOWNLIST) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUICtrlCreateButton("Button 0", 415, 13, 74, 23) GUICtrlSetResizing(-1, BitOR($GUI_DOCKAUTO, $GUI_DOCKVCENTER, $GUI_DOCKHEIGHT)) GUICtrlCreatelistView("Col 1|Col 2|Col 3", 12, 42, 476, 149, $LVS_SINGLESEL, BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE)) GUICtrlSetResizing(-1, $GUI_DOCKBORDERS) GUICtrlCreateGroup("Box 2", 6, 199, 253, 112) ;GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) GUICtrlCreateButton("Button 1", 11, 214, 121, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 2", 11, 245, 121, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 3", 133, 245, 121, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 4", 133, 214, 121, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 5", 11, 276, 121, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 6", 133, 276, 121, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateGroup("Box 3", 264, 199, 230, 112) ;GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) GUICtrlCreateButton("Button 7", 269, 214, 220, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 8", 269, 245, 220, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUICtrlCreateButton("Button 9", 269, 276, 220, 30) GUICtrlSetResizing(-1, $GUI_DOCKAUTO + $GUI_DOCKSTATEBAR) GUISetState() Local $nMsg = 0 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete($g_hMainGUI) Here is what I need: 

      1. Prevent button 0, Label & Combo from moving down
      2. Prevent expansion of Box 1 & 2
       
      I tried a lot but I can't get the desired result, now my brain hurts!
      Thanks in Advance, TD!
    • gil900
      GUIImageButton* - Create GDIP button with image and with frame
      By gil900
      Hello,
      I worte this:

      $hGUI = GUICreate('', 326, 260, 312, 159) WinSetOnTop($hGUI,'',1) GUISetBkColor(0xF5FF82) GUISetState(@SW_SHOW) _GDIPlus_Startup() $hGUI_hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) $Button1Image = @ScriptDir&'\button.png' ; $Button1Image = 'img_button' ; <- Activate this line if you want the image to be loaded from resources $Button2Image = @ScriptDir&'\button2.png' ; $Button2Image = 'img_button2' ; <- Activate this line if you want the image to be loaded from resources $Button = GUIImageButton_Create($hGUI_hGraphics,$Button1Image,95, 72) Sleep(1000) ; Set frame for the button GUIImageButton_SetSquareFrame($hGUI,$hGUI_hGraphics,$Button,10,0xFF00A300) Sleep(1000) ; Set the image button2.png for the button GUIImageButton_SetNewImage($hGUI_hGraphics,$Button,$Button2Image) Sleep(1000) ; Set the image button1.png for the button GUIImageButton_SetNewImage($hGUI_hGraphics,$Button,$Button1Image) Sleep(1000) ; Set new frame instead of the previous GUIImageButton_SetSquareFrame($hGUI,$hGUI_hGraphics,$Button,5,0xFFFF0505) Sleep(1000) ; Remove the frame from the button GUIImageButton_RemoveSquareFrame($hGUI,$Button) Sleep(1000) ; Set frame again GUIImageButton_SetSquareFrame($hGUI,$hGUI_hGraphics,$Button,1) Sleep(1000) ; Remove only the image from the button GUIImageButton_CleanGraphics($hGUI,$Button,0) ; If the 3 parameter is 1 then it will clean also the frame. *It will not remove the button! only clean the visual output Sleep(1000) ; Set the image button2.png for the button GUIImageButton_SetNewImage($hGUI_hGraphics,$Button,$Button2Image) ; This will remove the button. you can call it without calling GUIImageButton_CleanGraphics before ;~ GUIImageButton_Delete($hGUI,$Button1) ;~ Do ;~ Until GUIGetMsg() = $GUI_EVENT_CLOSE ; To use the button just: ; This will not work if you activated line 80 and will not work during the sleeps... ConsoleWrite('listening to $Button:' & @CRLF) While Sleep(10) Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button[0] ; <- *[0] ConsoleWrite('$Button1 Clicked' & @CRLF) EndSwitch WEnd ; #FUNCTION# ==================================================================================================================== ; Name ..........: GUIImageButton_Create ; Description ...: Create button with image ; Syntax ........: GUIImageButton_Create($hGUI_hGraphics, $Image, $x_pos, $y_pos[, $x_size = Default[, $y_size = Default]]) ; Parameters ....: $hGUI_hGraphics - value of _GDIPlus_GraphicsCreateFromHWND($hGUI) ; $Image - Can be path the the image file or resource name ; $x_pos - the x pos of the image in the GUI. ; $y_pos - the y pos of the image in the GUI. ; $x_size - [optional] the x size of the image ; $y_size - [optional] the y size of the image ; ** x size and y size must be the same as the real xy size of the image file! ; Return values .: Button handle (Array): ; [0] is the ctrl id and this is the only important thing. [1] & [2] are for internal use only ; Author ........: gil900 ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: GUIImageButton_SetSquareFrame ; Description ...: Create frame around the button ; Syntax ........: GUIImageButton_SetSquareFrame($hGUI, $hGUI_hGraphics, Byref $aButton[,$iLineWidth = 1 [, ; $LineColor_rgba = 0xFF000000]]) ; Parameters ....: $hGUI - A handle for the GUI ; $hGUI_hGraphics - value of _GDIPlus_GraphicsCreateFromHWND($hGUI). ; $aButton - value of GUIImageButton_Create ; $iLineWidth - [optional] The width in pixels of the frame. Default is 1. ; $LineColor_rgba - [optional] the color value - [0xFF & RGB code]. ; Default is 0xFF000000. ; Return values .: None ; Author ........: gil900 ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: GUIImageButton_SetNewImage ; Description ...: Set new image over the previous one. ** The new image must be the same size! ; Syntax ........: GUIImageButton_SetNewImage($hGUI_hGraphics, $aButton, $Image) ; Parameters ....: $hGUI_hGraphics - value of _GDIPlus_GraphicsCreateFromHWND($hGUI). ; $aButton - value of GUIImageButton_Create ; $Image - Can be path the the image file or resource name ; Return values .: None ; Author ........: gil900 ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: GUIImageButton_RemoveSquareFrame ; Description ...: Remove only the frame around the image(if exists) ; Syntax ........: GUIImageButton_RemoveSquareFrame($hGUI, Byref $aButton) ; Parameters ....: $hGUI - A handle for the GUI ; $aButton - value of GUIImageButton_Create ; Return values .: None ; Author ........: gil900 ; Example .......: No ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: GUIImageButton_Delete ; Description ...: Remove the button ; Syntax ........: GUIImageButton_Delete($hGUI, Byref $aButton) ; Parameters ....: $hGUI - A handle for the GUI ; $aButton - value of GUIImageButton_Create ; Return values .: None ; Author ........: gil900 ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: GUIImageButton_CleanGraphics ; Description ...: Clean ONLY the graphics of the button. Can clean only the image without the frame or the image+frame((if exists)) ; * It will not delete the button. ; Syntax ........: GUIImageButton_CleanGraphics($hGUI, Byref $aButton[, $CleanFrame = 1]) ; Parameters ....: $hGUI - A handle for the GUI ; $aButton - value of GUIImageButton_Create ; $CleanFrame - [optional] 1 = clean image+frame(if exists) ; 2 = clean image only ; . Default is 1. ; Return values .: None ; Author ........: Your Name ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: No ; ===============================================================================================================================  
      Download full code with the images:
      GUIImageButton - r2.rar
      GUIImageButton.rar
      Tested on Autoit 3.3.14.2
      If the title is not good enough then you can edit it and and write better one.
       
      Hope you found it useful. If so then please leave a comment. It took a long time to share this piece of code with the documentation
    • wakillon
      Html-Imager Update of 17 Dec 2014
      By wakillon
      A simple script for generate a Html file with Images and some few features.
      As usual external files and includes are embedded.
      Compatible with AutoIt Versions 3.3.8.1 to 3.3.13.19
      ChangeLog v 1.0.1.3
      You can now Add/Manage Prev/Next/Home/Top/Bottom Page Links from Gui Menu.
       
      Previous downloads : 111
      Downloads available in the download section
       
      Hope this example can be useful to someone !