Jump to content
minxomat

OOP Extender v0.3 Stable - Real object oriented programming with AutoIt

Recommended Posts

Seems to work fine.

Initial remarks/notes/questions:

I see there is a second script created, can your UDF exit the initial script as it does not seem to be needed?

Is there a way to suppress the Console window that appears in compiled script?

Edited by JohnOne

Share this post


Link to post
Share on other sites

I see there is a second script created, can your UDF exit the initial script as it does not seem to be needed?

Is there a way to suppress the Console window that appears in compiled script?

Re: First question:

Not when the actual script uses the console. It needs to read the running std stream to work correctly. If it would exit immediately, other users would only be able see the console output when the generated script exits (i.e. not real-time). But,

Re: Sec. q.:

Yes, didn't think about that. I'll add an option for that. (Or rather auto-detect if the user's script even uses the console at all).

Edited by minxomat

I will answer every single PM, and you are free to ask anything anytime.

Share this post


Link to post
Share on other sites

This definitely has my attention. As much as I like AutoIT, sometimes having objects would just make my life a whole lot simpler...

Is there anything that script authors would need to keep in mind when using this library? Any best practices that you recommend?

Share this post


Link to post
Share on other sites

Is there anything that script authors would need to keep in mind when using this library? Any best practices that you recommend?

My goal is to keep this as indestructible (and fool-proof) as possible (partly because I use it myself). So instead of recommending best practices, I want to fix any issue you / others might come across. So if you find one - or want something new as a feature, use the issue tracker. If sometime in the distant future this enters v1.0+, I might create some in-depth pages on the wiki.

There are definitely a lot of bug fixes and features coming. :) 


I will answer every single PM, and you are free to ask anything anytime.

Share this post


Link to post
Share on other sites

@Chimp messaged me some problems he had with the OOPE. This told me two things: I need to extend the tutorial and that there are some bigger bugs in this "UDF". I've documented the relevant issues in the tracker and the fixes will come in v0.3 (which in turn will be coming sooner than thought, within this week even).

So thanks Chimp for testing and reporting!


I will answer every single PM, and you are free to ask anything anytime.

Share this post


Link to post
Share on other sites

So... Why would one choose this over AutoItObject?

I only ever used this once in my life. The fact that you need an auxiliary binary file (the DLL) disqualifies it for me. This here is native AutoIt. Of course, your mileage may vary. I won't get into a discussion about it here :) .


I will answer every single PM, and you are free to ask anything anytime.

Share this post


Link to post
Share on other sites

I only ever used this once in my life. The fact that you need an auxiliary binary file (the DLL) disqualifies it for me. This here is native AutoIt. Of course, your mileage may vary. I won't get into a discussion about it here :) .

You mean that optional file you don't actually use? If you don't want to use AO then fine, but don't lie about it.

Share this post


Link to post
Share on other sites

I will answer every single PM, and you are free to ask anything anytime.

Share this post


Link to post
Share on other sites

Released 0.3 Stable

+>21:44:52 Starting AutoIt3Wrapper v.15.920.938.0 SciTE v.3.6.0.0   Keyboard:00000409  OS:WIN_7/  CPU:X64 OS:X64    Environment(Language:0409)
+>         SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE   UserDir => C:\Users\Owner\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE_USERHOME => C:\Users\Owner\AppData\Local\AutoIt v3\SciTE 
>Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\Owner\Downloads\AutoIt-OOP-Extender-0.3\AutoIt-OOP-Extender-0.3\Examples\01 Simple Class.au3"    
--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
!> $oTest wants to be a Test object, but there is no class with that name!
!>21:44:52 AutoIt3.exe ended.rc:75
+>21:44:52 AutoIt3Wrapper Finished.

also, why not place the #include-once on top in OOPE.au3

Share this post


Link to post
Share on other sites

... This AutoIt OOP Extender is very nice! I think that it can improve productivity and could simplify coding as well.
just played a bit with the example "06 Arrays of Objects.au3 so to beta testing it.
I've also modified it to make use of the "constructor with argument" way.
(Click on controls to write random chars in it, and use arrows to move the whole matrix)
here are 2 quick considerations:
1) if the listing is used letting it formatted as is, then it works, while if I Tidy the AutoIt listing, then it doesn't works anymore, arising an AutoIt error.
2) I've tried to use a call to a method of the class from within the constructor of the same class, but it doesn't work. (could be useful if this was allowed...).

See you later... I'm  keeping on playing still with this lovely toy ....

; 06 Arrays of Objects_mod.au3
#AutoIt3Wrapper_Run_AU3Check=n
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include '../OOPE/OOPE.au3'
Opt("GUIOnEventMode", 1)

;                 0  1  2   3   4   5   6  7
Local $aArgs[8]= [2, 2, 10, 10, 15, 15, 1, 1]
;            [0]    X position of the panel within the GUI
;            [1]    Y position of the panel within the GUI
;            [2]    nr. of columns
;            [3]    nr. of rows
;            [4]    width of each single controls
;            [5]    height of each single controls
;            [6]    horizontal distance between controls (space between controls)
;            [7]    vertical distance between controls
Local $aPlayers[$aArgs[2]*$aArgs[3]], $iStep1, $iStep2
Global $iIndex = 0

$hGUI = GUICreate("OOP Example")
GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
#classdef <Player> $aPlayers from <$aArgs>
GUISetState()

MsgBox(0,"","Attempt to multicolor the matrix" & @CRLF & "in the constructor it did not work.", 5)

While 1 ; GUIGetMsg() <> -3
        $aPlayers[Random(0,UBound($aPlayers)-1,1)].SetBkColor(Random(0, 16777215, 1))
        $iStep1 = _IsPressed("27") - _IsPressed("25")
        $iStep2 = _IsPressed("28") - _IsPressed("26")
        If $iStep1 Or $iStep2 Then
        For $n = 0 To UBound($aPlayers)-1
            $aPlayers[$n].Move( $iStep1 * $aArgs[4], $iStep2 * $aArgs[5])
            $aPlayers[$n].SetBkColor(Random(0, 16777215, 1))
        Next
        EndIf
WEnd

Func Clicked()
    GUICtrlSetData(@GUI_CtrlId , Chr(Random(32, 127, 1)))
EndFunc

Func _End()
    Exit
EndFunc

#Region Class Player
    Local $iX, $iY, $iHandle

    Func _Player($aArgs)
        $This.iY = Int($iIndex / $aArgs[2])
        $This.iX = $iIndex - ($this.iY * $aArgs[2])
        $this.iX = $aArgs[0] + ($aArgs[4] + $aArgs[6]) * $this.iX
        $this.iY = $aArgs[1] + ($aArgs[5] + $aArgs[7]) * $this.iY

        $This.iHandle = GUICtrlCreateLabel("", $This.iX, $This.iY, $aArgs[4], $aArgs[5], 0x01) ; 0x01 = $SS_CENTER
        GUICtrlSetBkColor($This.iHandle, $This.SetBkColor(Random(0, 16777215, 1))) ; <-- (wrong?) attempt to a call method of this class
        GUICtrlSetOnEvent(-1, "Clicked")
        $iIndex += 1
    EndFunc

    Func Move($iStepX, $iStepY)
        $This.iX += $iStepX
        $This.iY += $iStepY
        GUICtrlSetPos($This.iHandle, $This.iX, $This.iY)
    EndFunc

    Func SetBkColor($iColor)
        GUICtrlSetBkColor($This.iHandle, $iColor)
    EndFunc
#EndRegion

 


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites

@Chimp,

1) if the listing is used letting it formatted as is, then it works, while if I Tidy the AutoIt listing, then it doesn't works anymore, arising an AutoIt error.

I don't use Tidy, but I'll test it to make sure it doesn't break. BTW: What was the error? Can you provide a self-contained example? If so, please use the bug tracker over at github.

2) I've tried to use a call to a method of the class from within the constructor of the same class, but it doesn't work. (could be useful if this was allowed...). 

 The runtime supports this, but there is no "nice" way to implement it in OOPE and keep it working with the current AutoIt stable. This feature would require Maps. As soon as Maps are a thing in the stable, this will be available.


I will answer every single PM, and you are free to ask anything anytime.

Share this post


Link to post
Share on other sites

It seems that the "OOP Extender" does not like some embellishments to the listing introduced by Tidy,
The "decorations" of the listing that are not welcome are:

1) The comment added by Tidy to the EndFunc statement (within the #Region Class ... #EndRegion area)

Func _Player()
 
EndFunc   ;==>_Player

the ;==>_Player comment causes an arror like the following:

$aPlayers[$n] = __OOPE_InstantiateClass("int64 iX;int64 iY;int64 iHandle", "  

Error: Unterminated string.

2) the comment added by Tidy to the #EndRegion directive

#Region Class Player

#EndRegion Class Player

the Class Player part added by Tidy to the #EndRegion directive causes the following error on program exit:

Class Player
^ ERROR

Error: Unknown function name.

Edited by Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites

minxomat, is it possible to get around the problem that the same method names in different classes will cause errors?

687474703a2f2f6e34372e696d6775702e6e6574

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

  • Similar Content

    • By ozymandius257
      This is probably a very simple question (I hope!)
      I'm looking to use a UDF to access a SQL database, and have found ADO.au3, but I can't seem to work out how to use it.
      I've copied the files ado.au3 and ado_constants.au3 into the folder C:\Program Files (x86)\AutoIt3\Include, then opened SciTe and started a new project.
      But when I type #include<AD - I don't get offered ADO.au3.
      (I know I should be using the folder C:\Program Files (x86)\AutoIt3\UserInclude, but when it didn't work from there, I tried the above).
      What am I doing wrong?
       
    • By BetaLeaf
      What is Rollbar?
      Rollbar provides real-time error alerting & debugging tools for developers. Learn more about it at https://rollbar.com/product/
      Demo: https://rollbar.com/demo/demo/
      Screenshot:
      Instructions: (RollbarTest.au3)
      ; Include RollbarSDK #include "RollbarSDK.au3" ;Turns on ConsoleWrite debugging override. ;Global $Rollbar_Debug=False ; Initialize RollbarSDK with the project's API key. ; Parameters ....: $__Rollbar_sToken - [Required] Go to https://rollbar.com/<User>/<ProjectName>/settings/access_tokens/ for your project. Use the token for post_server_item. _Rollbar_Init("eaa8464a4082eeabd9454465b8f0c0af") ; Write code that causes an error you want to catch, then call ; _Rollbar_Send ; Parameters ....: $__Rollbar_sErrorLevel - [Required] Must be one of the following values: Debug, Info, Warning, Error, Critical. ; $__Rollbar_sMessage - [Required] The message to be sent. This should contain any useful debugging info that will help you debug. ; $__Rollbar_sMessageSummary - [Optional] A string that will be used as the title of the Item occurrences will be grouped into. Max length 255 characters. If omitted, Rollbar will determine this on the backend. _Rollbar_Send("Debug", "This is an debug message. If you received this, you were successful!", "Debug Message") _Rollbar_Send("Info", "This is a test message. If you received this, you were successful!", "Info Message") _Rollbar_Send("Warning", "This is an warning message. If you received this, you were successful!", "Warning Message") _Rollbar_Send("Error", "This is an error message. If you received this, you were successful!", "Error Message") _Rollbar_Send("Critical", "This is an critical message. If you received this, you were successful!", "Critical Message") _Rollbar_Send("Info", "This is a test message. If you received this, you were successful!") ;No Message ; Rollbar_Send's helper functions ; Parameters ....: $__Rollbar_sMessage - [Required] The message to be sent. This should contain any useful debugging info that will help you debug. ; $__Rollbar_sMessageSummary - [Optional] A string that will be used as the title of the Item occurrences will be grouped into. Max length 255 characters. If omitted, Rollbar will determine this on the backend. _Rollbar_SendDebug("This is an debug message. If you received this, you were successful!", "Debug Message") _Rollbar_SendInfo("This is a test message. If you received this, you were successful!", "Info Message") _Rollbar_SendWarning("This is an warning message. If you received this, you were successful!", "Warning Message") _Rollbar_SendError("This is an error message. If you received this, you were successful!", "Error Message") _Rollbar_SendCritical("This is an critical message. If you received this, you were successful!", "Critical Message") ; Usable Example Local $sImportantFile = "C:\NOTAREALFILE_1234554321.txt" Switch FileExists($sImportantFile) Case True MsgBox(0, "Example Script", "An important file was found. Continuing...") Case Else _Rollbar_SendCritical('An important file was missing. Halting... File: "' & $sImportantFile & '"', 'Important file "' & $sImportantFile & '" is missing.') EndSwitch Notes: Please comment your feedback, advice, & suggestions below. While this is only a proof of concept, I will expand its feature set for everyone to use. 
      Right now, it is fully functional but not tested in production.
       
       
      Changelog:
      RollbarSDK.au3
      RollbarTest.au3
      v0.2
       
      v0.1.1
       
    • By kurtykurtyboy
      GuiFlatButton is a UDF to easily create regular buttons with different colors for background, foreground, border, hover, focus, etc..
      This started as an effort to change the background color of a button and eventually grew into a full UDF.
      If you've looked around forums for changing button background colors, you have probably noticed that each proposed workaround has its own set of issues/side-effects. The answers usually circle back to 'use ownerdrawn buttons' and 'not worth it'. Well, now it is possible for anyone to easily create ownerdrawn buttons - totally worth it!
      Some issues with other workarounds such as drawing with GDI+ or using a colored label as a 'button':
      Not 'real' buttons so you lose built-in functionality that windows gives to buttons Messy / inefficient code in the main while loop to check for mouse position Slow to respond to click, paint, etc... Having to deal with GUIRegisterMsg messages Not straight-forward to implement GuiFlatButton is not a workaround; it is a technique to respond to Windows' built-in owner-drawn button events.
      With minimal effort, we can now create true simple colored buttons.
      The idea is to create an owner-drawn button using GUICtrlCreateButton then subclass the GUI and controls to handle the button-specific events to paint it however we want.
      This UDF magically does all of this for us! No need to worry about event handling or main while loop logic.
       
      How to use
      It couldn't be any easier! Simply create a new button using the familiar syntax. This creates an ownerdrawn button with default colors.
      $mybutton1 = GuiFlatButton_Create("Button 1", 78, 20, 120, 40) If you want to change the background and text colors:
      GuiFlatButton_SetBkColor(-1, 0x5555FF) GuiFlatButton_SetColor(-1, 0xFFFFFF) Advanced Usage
      Set background/text/border all at once
      GuiFlatButton_SetColors(-1, 0x0000FF, 0xFFFFFF, 0x9999FF) Set ALL colors for ALL button states! (normal, focus, hover, selected)
      Local $aColorsEx = [0x0000FF, 0xFFFFFF, -2, 0x4444FF, 0xFFFFFF, 0xAAAAFF, 0x6666FF, 0xFFFFFF, 0xCCCCFF, 0x0000EE, 0xFFFFFF, 0x7777EE] GuiFlatButton_SetColorsEx(-1, $aColorsEx) Set default colors to apply to any future buttons
      ;set colors GuiFlatButton_SetDefaultColors(0x0000FF, 0xFFFFFF, 0x9999FF) ;create buttons $mybutton1 = GuiFlatButton_Create("Button 1", 12, 20, 120, 40) $mybutton2 = GuiFlatButton_Create("Button 2", 143, 20, 120, 40) Set ALL color defaults
      ;set colors Local $aColorsEx = [0x0000FF, 0xFFFFFF, -2, 0x4444FF, 0xFFFFFF, 0xAAAAFF, 0x6666FF, 0xFFFFFF, 0xCCCCFF, 0x0000EE, 0xFFFFFF, 0x7777EE] GuiFlatButton_SetDefaultColorsEx($aColorsEx) ;create buttons $mybutton1 = GuiFlatButton_Create("Button 1", 12, 20, 120, 40) $mybutton2 = GuiFlatButton_Create("Button 2", 143, 20, 120, 40)  
      Available Functions
       
      Simple Example

      #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include "GuiFlatButton.au3" Example() ;GUI with one button Func Example() Local $hGUI, $mybutton1 $hGUI = GUICreate("GuiFlatButton Ex0", 275, 120) GUISetBkColor(0x333333) $idLabel = GUICtrlCreateLabel("Click the button", 10, 100, 150, 30) GUICtrlSetColor(-1, 0xFFFFFF) ;create new button then set the background and foreground colors $mybutton1 = GuiFlatButton_Create("Button 1", 78, 20, 120, 40) GuiFlatButton_SetBkColor(-1, 0x5555FF) GuiFlatButton_SetColor(-1, 0xFFFFFF) GUISetState(@SW_SHOW, $hGUI) Local $i = 0 Local $iMsg While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE ExitLoop Case $mybutton1 $i += 1 GUICtrlSetData($idLabel, $i) ConsoleWrite($i & @CRLF) EndSwitch Sleep(10) WEnd GUIDelete() EndFunc ;==>Example
      Menu/Toolbar Example

      #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include "GuiFlatButton.au3" Example() ;Example GUI with toolbar Func Example() Local $hGUI, $idLabel, $aButtons, $iTbSize $hGUI = GUICreate("GuiFlatButton Ex2", 300, 200) GUISetBkColor(0x444444) $idLabel = GUICtrlCreateLabel("Click a button", 10, 180, 150, 30) GUICtrlSetColor(-1, 0xFFFFFF) $aButtons = createToolbar() $iTbSize = UBound($aButtons) GUISetState(@SW_SHOW, $hGUI) Local $i = 0 Local $iMsg While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE ExitLoop Case $aButtons[0] To $aButtons[$iTbSize - 1] ConsoleWrite("1") GUICtrlSetData($idLabel, GuiFlatButton_Read($iMsg)) EndSwitch Sleep(10) WEnd GUIDelete() EndFunc ;==>Example Func createToolbar() Local $aButtons[6] Local $bkColor = 0x777777 Local $textColor = 0xFFFFFF Local $borderColor = 0x999999 Local $aBtnClrs[12] = [0x777777, 0xFFFFFF, $GUI_BKCOLOR_TRANSPARENT, 0x888888, 0xFFFFFF, $GUI_BKCOLOR_TRANSPARENT, 0x999999, 0xFFFFFF, $GUI_BKCOLOR_TRANSPARENT, 0x666666, 0xFFFFFF, $GUI_BKCOLOR_TRANSPARENT] For $i = 0 To UBound($aButtons) - 1 $aButtons[$i] = GuiFlatButton_Create("B" & $i, $i * 50, 0, 50, 17) GuiFlatButton_SetColorsEx($aButtons[$i], $aBtnClrs) Next Return $aButtons EndFunc ;==>createToolbar  
      Icon Example
      You can even easily add icons to your buttons -- just create a new button and send it an icon!

      #include <GDIPlus.au3> #include "GuiFlatButton.au3" Example() ;buttons with Icon images Func Example() ;get images for demonstration _GDIPlus_Startup() ;initialize GDI+ Local $hIcon = _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 258, 24, 24) ;extract the 'Save' icon Local $hBitmap = _GDIPlus_BitmapCreateFromHICON($hIcon) ;Create Bitmap from Icon (for demonstration) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ;Create HBitmap from Bitmap _GDIPlus_BitmapDispose($hBitmap) ;dispose the bitmap _GDIPlus_Shutdown() ;done with GDI+ Local $hGUI = GUICreate("GuiFlatButton Ex5", 255, 400) GUISetBkColor(0xEEEEEE) ;set default colors of future buttons Local $aColorsEx = _ [0xE2E5E8, 0X000000, 0x888888, _ ; normal : Background, Text, Border 0xE2E5E8, 0X000000, 0x333333, _ ; focus : Background, Text, Border 0xE8E8E8, 0X000000, 0x666666, _ ; hover : Background, Text, Border 0xDDDDDD, 0X000000, 0xAAAAAA] ; selected : Background, Text, Border GuiFlatButton_SetDefaultColorsEx($aColorsEx) ;normal button with icon $label1 = GUICtrlCreateLabel( "$BS_TOOLBUTTON -->", 5, 10) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) Local $mybutton1 = GuiFlatButton_Create("Save", 130, 5, 50, 48, $BS_TOOLBUTTON) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybutton1), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align top Local $mybuttonT = GuiFlatButton_Create("Top", 5, 65, 120, 55, $BS_TOP) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonT), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align top-left Local $mybuttonTL = GuiFlatButton_Create("Top-Left", 5, 125, 120, 55, BITOR($BS_TOP, $BS_LEFT)) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonTL), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align top-right Local $mybuttonTR = GuiFlatButton_Create("Top-Right", 5, 185, 120, 55, BITOR($BS_TOP, $BS_RIGHT)) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonTR), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align left Local $mybuttonL = GuiFlatButton_Create("Left", 5, 245, 120, 55, $BS_LEFT) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonL), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align bottom Local $mybuttonB = GuiFlatButton_Create("Bottom", 130, 65, 120, 55, $BS_BOTTOM) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonB), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align bottom-left Local $mybuttonBL = GuiFlatButton_Create("Bottom-Left", 130, 125, 120, 55, BITOR($BS_BOTTOM, $BS_LEFT)) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonBL), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align bottom-right Local $mybuttonBR = GuiFlatButton_Create("Bottom-Right", 130, 185, 120, 55, BITOR($BS_BOTTOM, $BS_RIGHT)) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonBR), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) ;align right Local $mybuttonR = GuiFlatButton_Create("Right", 130, 245, 120, 55, $BS_RIGHT) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonR), $BM_SETIMAGE, $IMAGE_ICON, $hIcon)) GuiFlatButton_SetState($mybuttonR, $GUI_DISABLE ) ;disabled Local $mybuttonDisable = GuiFlatButton_Create("Disabled", 130, 310, 120, 55, $BS_TOOLBUTTON) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($mybuttonDisable), $BM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap)) GuiFlatButton_SetState($mybuttonDisable, $GUI_DISABLE ) ;clean up! _WinAPI_DestroyIcon( $hIcon ) _WinAPI_DeleteObject( $hHBitmap ) GUISetState(@SW_SHOW, $hGUI) Local $iMsg While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE ExitLoop EndSwitch Sleep(10) WEnd GUIDelete() EndFunc ;==>Example  
      I'm sure there are some use-cases I've forgotten, so feedback is welcome!
       
      Download the UDF and several more examples: GuiFlatButton_20190414.zip
      Update 2019-04-14
      Fixed bug, not showing pressed down state when clicking rapidly
      Added Icon/Bitmap support!
      Added function GuiFlatButton_SetPos to change the position and/or size of a button
      Update 2019-02-09
      Added 2 new functions to set the button colors globally for all future buttons.
      GuiFlatButton_SetDefaultColors 
      GuiFlatButton_SetDefaultColorsEx

      Credits to:
      Melba23 (UDF template)
      LarsJ (general subclassing code)
      4ggr35510n (TrackMouseEvent example)
      binhnx (disable dragging with $WS_EX_CONTROLPARENT)
      GUIRegisterMsg in AutoIt Help (owner-draw button example)
      funkey (_WinAPI_DrawState example)
    • By MFrancisca
      Hello! 
      I've been checking the logging UDFs in the wiki, mostly Log4a and Loga and I wanted to ask which one would you recommend for a script that will be executed remotely through PSExec. My main question is where the logs are located in that situation and if I can change that location to a custom one., because I need to retrieve them at the end of execution.
      So in a rough description the process is
      Open PSExec
      Send compiled AutoIT script to remote machine
      Execute script
      Copy logs from the remote to the local machine.
       
      Any opinions? 
    • By caramen
      I watched _OL_ItemSend&_OL_ItemFind&_OL_ItemCreate in OutlookEx UDF but hmmm
       
      Since it use the test environnement i cant get the orders of the mail creation
       
      Can someone make me win some time of reading all exemples script and lead me how to do one ?
      That whould be lovely.
      Gnight
×
×
  • Create New...