Jump to content

Marquee UDF - New release 13 Jan 2019


Recommended Posts

@BrewManNH

I've also had that impression, but it's not the way it goes!

In this context UDF, only frees the memory that is no longer in use.

@Melba23

I'm doing some tests and then return when finished, but I will say that the "SetProcessWorkingSetSize" need only be called once and will be marked the minimum and maximum to be used!

JS

http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)

Somewhere Out ThereJames Ingram

somewh10.png

dropbo10.pngDownload Dropbox - Simplify your life!
Your virtual HD wherever you go, anywhere!

Link to post
Share on other sites
  • Replies 70
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

New version - 13 Jan 2019  - Added: 2 new functions to hide/show and existing marquee. New UDF and example script in zip format: Marquee.zip As always, ready for compliments and/or comp

Efo74, I am but a hobbyist coder as well - but with perhaps just a little more experience than you . It was ~50 years ago I got my first experience of programming a computer to play Nim thanks to

New version - 13 Jan 2019  - Added: 2 new functions to hide/show and existing marquee. New UDF and example script in zip in first post. M23

I can only offer what I've read in regards to EmptyWorkingSet from elsewhere. Here's a few links I've found.

http://stackoverflow.com/questions/1812018/what-are-the-side-effects-of-using-emptyworkingset

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/b795740a-fc11-4d39-9df8-598867ffff2f

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites

@BrewManNH

I had seen these links, but understand that the process "explorer.exe" and anyone other who is not "their" program will suffer the consequence of losing performance!

In the case of Melba's UDF and other programs that I did, this function only frees the memory that is no longer being used!

JS

http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)

Somewhere Out ThereJames Ingram

somewh10.png

dropbo10.pngDownload Dropbox - Simplify your life!
Your virtual HD wherever you go, anywhere!

Link to post
Share on other sites

The problem comes when your program needs that data again and it has to page it back in from the hard drive, that's where the performance issues can hit. I'm just saying that if you have a memory issue, using it isn't going to magically fix it, it's just going to hide it. As all the links I've read have said, let Windows worry about its memory, and you worry about making the program run. If there's memory not being used, and Windows needs it for something, it will do the paging for you, when and if it needs to

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites

At this point I agree with you, surely the memory management of Windows is becoming more efficient, but sometimes it becomes necessary, see for example the memory management in Firefox...

JS

http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)

Somewhere Out ThereJames Ingram

somewh10.png

dropbo10.pngDownload Dropbox - Simplify your life!
Your virtual HD wherever you go, anywhere!

Link to post
Share on other sites

AUTTRY,,

Try this version of the UDF - I get very similar memory usage between the 2 versions now: :)

#include-once

;#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w- 7

; #INDEX# =======================================================================================================================
; Title .........: Marquee
; Description ...: This module contains functions to create and manage marquee controls
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;_GUICtrlMarquee_Init : Initialises a Marquee control
;_GUICtrlMarquee_SetScroll : Sets movement parameters for Marquee
;_GUICtrlMarquee_SetDisplay : Sets display parameters for Marquee
;_GUICtrlMarquee_Create : Creates Marquee
;_GUICtrlMarquee_Delete : Deletes a marquee control
;_GUICtrlMarquee_Reset : Resets a marquee control to current parameters
; ===============================================================================================================================

; #INTERNAL_USE_ONLY#============================================================================================================
;__GUIMarquee_MemReduce() : Reduce memory usage by Shell.Explorer.2 objects
;================================================================================================================================

; #INCLUDES# ====================================================================================================================

; #GLOBAL VARIABLES# ============================================================================================================
; Array to hold Marquee parameters
Global $aMarquee_Params[1][13] = [[0, 0, 0, "scroll", "left", 6, 85, 0, 0, 0, 12, "Tahoma", ""]]
; [0][0] = Count [n][0] = ControlID
; [0][1] [n][1] = Obj Ref
; [0][2] = Def loop state [n][2] = Loop state
; [0][3] = Def move state [n][3] = Move state
; [0][4] = Def move dirn [n][4] = Move dirn
; [0][5] = Def scroll speed [n][5] = Scroll speed
; [0][6] = Def delay time [n][6] = Delay time
; [0][7] = Def border state [n][7] = Border state
; [0][8] = Def text colour [n][8] = Text colour
; [0][9] = Def back colour [n][9] = Back colour
; [0][10] = Def font family [n][10] = Font size
; [0][11] = Def font size [n][11] = Font family
; [0][12] [n][12] = Text

; Get system text and background colours
Global $aMarquee_Colours_Ret = DllCall("User32.dll", "int", "GetSysColor", "int", 8)
$aMarquee_Params[0][8] = BitAND(BitShift(String(Binary($aMarquee_Colours_Ret[0])), 8), 0xFFFFFF)
$aMarquee_Colours_Ret = DllCall("User32.dll", "int", "GetSysColor", "int", 5)
$aMarquee_Params[0][9] = BitAND(BitShift(String(Binary($aMarquee_Colours_Ret[0])), 8), 0xFFFFFF)

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlMarquee_Init
; Description ...: Initialises UDF prior to creating a Marquee control
; Syntax.........: _GUICtrlMarquee_Init()
; Parameters ....: None
; Return values .: Index of marquee to be passed to other _GUICtrlMarquee functions
; Author ........: Melba 23
; Related .......: Other _GUICtrlMarquee functions
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================

Func _GUICtrlMarquee_Init()

; Add a new line to the array
$aMarquee_Params[0][0] += 1
ReDim $aMarquee_Params[$aMarquee_Params[0][0] + 1][13]
; Copy over the default values
For $i = 2 To 12
$aMarquee_Params[$aMarquee_Params[0][0]][$i] = $aMarquee_Params[0][$i]
Next
; Return index of marquee in array
Return $aMarquee_Params[0][0]

EndFunc ;==>_GUICtrlMarquee_Init

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlMarquee_SetScroll
; Description ...: Sets movement parameters for a Marquee
; Syntax.........: _GUICtrlMarquee_SetScroll($iIndex, [$iLoop, [$sMove, [$sDirection, [$iScroll, [$iDelay]]]]])
; Parameters ....: $iIndex - Index of marquee returned by _GUICtrlMarquee_Init
; $iLoop - [optional] Number of loops to repeat. (Default = infinite, -1 = leave unchanged)
; Use "slide" movement to keep text visible after stopping
; $sMove - [optional] Movement of text. From "scroll" (Default), "slide" and "alternate". (-1 = leave unchanged)
; $sDirection - [optional] Direction of scrolling. From "left" (Default), "right", "up" and "down". (-1 = leave unchanged)
; $iScroll - [optional] Distance of each advance - controls speed of scrolling (Default = 6, -1 = leave unchanged)
; Higher numbers increase speed, lower numbers give smoother animation.
; $iDelay - [optional] Time in milliseconds between each advance (Default = 85, -1 = leave unchanged)
; Higher numbers lower speed, lower numbers give smoother animation.
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error to 1 - @extended set to index of parameter with error
; Author ........: Melba 23
; Related .......: Other _GUICtrlMarquee functions
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================

Func _GUICtrlMarquee_SetScroll($iIndex, $iLoop = Default, $sMove = Default, $sDirection = Default, $iScroll = Default, $iDelay = Default)

; Errorcheck and set parameters
Switch $iIndex
Case 1 To $aMarquee_Params[0][0]
$iIndex = Int($iIndex)
Case Else
Return SetError(1, 1, 0)
EndSwitch

Switch $iLoop
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][2] = $aMarquee_Params[0][2]
Case Else
If IsNumber($iLoop) Then
$aMarquee_Params[$iIndex][2] = Int(Abs($iLoop))
Else
Return SetError(1, 2, 0)
EndIf
EndSwitch

Switch $sMove
Case -1
; No change
Case "scroll", 'alternate', 'slide'
$aMarquee_Params[$iIndex][3] = $sMove
Case Default
$aMarquee_Params[$iIndex][3] = $aMarquee_Params[0][3]
Case Else
Return SetError(1, 3, 0)
EndSwitch

Switch $sDirection
Case -1
; No change
Case 'left', 'right', 'up', 'down'
$aMarquee_Params[$iIndex][4] = $sDirection
Case Default
$aMarquee_Params[$iIndex][4] = $aMarquee_Params[0][4]
Case Else
Return SetError(1, 4, 0)
EndSwitch

Switch $iScroll
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][5] = $aMarquee_Params[0][5]
Case Else
If IsNumber($iScroll) Then
$aMarquee_Params[$iIndex][5] = Int(Abs($iScroll))
Else
Return SetError(1, 5, 0)
EndIf
EndSwitch

Switch $iDelay
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][6] = $aMarquee_Params[0][6]
Case Else
If IsNumber($iDelay) Then
$aMarquee_Params[$iIndex][6] = Int(Abs($iDelay))
Else
Return SetError(1, 6, 0)
EndIf
EndSwitch

Return 1

EndFunc ;==>_GUICtrlMarquee_SetScroll

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlMarquee_SetDisplay
; Description ...: Sets display parameters for subsequent _GUICtrlCreateMarquee calls
; Syntax.........: _GUICtrlMarquee_SetDisplay($iIndex, [$iBorder, [$vTxtCol, [$vBkCol, [$iPoint, [$sFont]]]])
; Parameters ....: $iIndex - Index of marquee returned by _GUICtrlMarquee_Init
; $iBorder - [optional] 0 = None (Default), 1 = 1 pixel, 2 = 2 pixel, 3 = 3 pixel (-1 = no change)
; $vTxtCol - [optional] Colour for text (Default = system colour, -1 = no change)
; $vBkCol - [optional] Colour for Marquee (Default = system colour, -1 = no change)
; Colour can be passed as RGB value or as one of the following strings:
; 'black', 'gray', 'white', 'silver', 'maroon', 'red', 'purple', 'fuchsia',
; 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua'
; $iPoint - [optional] Font size (Default = 12, -1 = unchanged)
; $sFont - [optional] Font to use (Default = Tahoma, "" = unchanged)
; Return values .: Success - Returns 0
; Failure - Returns 0 and sets @error to 1 - @extended set to index of parameter with error
; Author ........: Melba 23
; Related .......: Other _GUICtrlMarquee functions
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================

Func _GUICtrlMarquee_SetDisplay($iIndex, $iBorder = Default, $vTxtCol = Default, $vBkCol = Default, $iPoint = Default, $sFont = Default)

; Errorcheck and set parameters
Switch $iIndex
Case 1 To $aMarquee_Params[0][0]
$iIndex = Int($iIndex)
Case Else
Return SetError(1, 1, 0)
EndSwitch

Switch $iBorder
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][7] = $aMarquee_Params[0][7]
Case 0 To 3
$aMarquee_Params[$iIndex][7] = Int($iBorder)
Case Else
Return SetError(1, 2, 0)
EndSwitch

Switch $vTxtCol
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][8] = $aMarquee_Params[0][8]
Case Else
If Number($vTxtCol) Then
$aMarquee_Params[$iIndex][8] = Int(Number($vTxtCol))
Else
$aMarquee_Params[$iIndex][8] = $vTxtCol
EndIf
EndSwitch

Switch $vBkCol
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][9] = $aMarquee_Params[0][9]
Case Else
If Number($vBkCol) Then
$aMarquee_Params[$iIndex][9] = Int(Number($vBkCol))
Else
$aMarquee_Params[$iIndex][9] = $vBkCol
EndIf
EndSwitch

Switch $iPoint
Case -1
; No change
Case Default
$aMarquee_Params[$iIndex][10] = $aMarquee_Params[0][10]
Case Else
If IsNumber($iPoint) Then
$aMarquee_Params[$iIndex][10] = Int(Abs($iPoint / .75))
Else
Return SetError(1, 5, 0)
EndIf
EndSwitch

Switch $sFont
Case ""
; No change
Case Default
$aMarquee_Params[$iIndex][11] = $aMarquee_Params[0][11]
Case Else
If IsString($sFont) Then
$aMarquee_Params[$iIndex][11] = $sFont
Else
Return SetError(1, 5, 0)
EndIf
EndSwitch

Return 1

EndFunc ;==>_GUICtrlMarquee_SetDisplay

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlMarquee_Create
; Description ...: Creates a marquee control
; Syntax.........: _GUICtrlMarquee_Create($iIndex, $sText, $iLeft, $iTop, $iWidth, $iHeight, [$sTipText])
; Parameters ....: $iIndex - Index of marquee returned by _GUICtrlMarquee_Init
; $sText - The text (or HTML markup) the marquee should display.
; $iLeft - The left side of the control.
; $iTop - The top of the control.
; $iWidth - The width of the control.
; $iHeight - The height of the control.
; $sTipTxt - [optional] Tip text displayed when mouse hovers over the control.
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error as follows
; 1 = Invalid index
; 2 = Index already used
; 3 = Failed to create object
; 4 = Failed to embed object
; Author ........: james3mg, trancexx and jscript "FROM BRAZIL"
; Modified.......: Melba23
; Remarks .......: This function attempts to embed an 'ActiveX Control' or a 'Document Object' inside the GUI.
; The GUI functions GUICtrlRead and GUICtrlSet have no effect on this control. The object can only be
; controlled using other _GUICtrlMarquee functions
; Related .......: Other _GUICtrlMarquee functions
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================

Func _GUICtrlMarquee_Create($iIndex, $sText, $iLeft, $iTop, $iWidth, $iHeight, $sTipText = "")

; Errorcheck index
Switch $iIndex
Case 1 To $aMarquee_Params[0][0]
$iIndex = Int($iIndex)
Case Else
Return SetError(1, 0, 0)
EndSwitch

; Check not previously created
If $aMarquee_Params[$iIndex][1] <> "" Then
Return SetError(2, 0, 0)
EndIf

; Store text
$aMarquee_Params[$iIndex][12] = $sText

; Create marquee
Local $oShell = ObjCreate("Shell.Explorer.2")
If Not IsObj($oShell) Then
Return SetError(3, 0, 0)
Else
$aMarquee_Params[$iIndex][1] = $oShell
EndIf
$aMarquee_Params[$iIndex][0] = GUICtrlCreateObj($oShell, $iLeft, $iTop, $iWidth, $iHeight)
If $aMarquee_Params[$iIndex][0] = 0 Then
Return SetError(4, 0, 0)
EndIf

; Wait for marquee to be created
$oShell.navigate("about:blank")
While $oShell.busy
Sleep(100)
WEnd

; Add marquee content
With $oShell.document
.write('<style>marquee{cursor: default}></style>')
.write('<body onselectstart="return false" oncontextmenu="return false" onclick="return false" ondragstart="return false" ondragover="return false">')
.writeln('<marquee width=100% height=100%')
.writeln("loop=" & $aMarquee_Params[$iIndex][2])
.writeln("behavior=" & $aMarquee_Params[$iIndex][3])
.writeln("direction=" & $aMarquee_Params[$iIndex][4])
.writeln("scrollamount=" & $aMarquee_Params[$iIndex][5])
.writeln("scrolldelay=" & $aMarquee_Params[$iIndex][6])
.write(">")
.write($sText)
.body.title = $sTipText
.body.topmargin = 0
.body.leftmargin = 0
.body.scroll = "no"
.body.style.borderWidth = $aMarquee_Params[$iIndex][7]
.body.style.color = $aMarquee_Params[$iIndex][8]
.body.bgcolor = $aMarquee_Params[$iIndex][9]
.body.style.fontSize = $aMarquee_Params[$iIndex][10]
.body.style.fontFamily = $aMarquee_Params[$iIndex][11]
EndWith

; Free memory
__GUIMarquee_MemReduce()

Return 1

EndFunc ;==>_GUICtrlMarquee_Create

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlMarquee_Delete
; Description ...: Deletes a marquee control
; Syntax.........: _GUICtrlMarquee_Delete($iIndex)
; Parameters ....: $iIndex - Index of marquee returned by _GUICtrlMarquee_Init
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error to 1
; Author ........: Melba23
; Remarks .......:
; Related .......: Other _GUICtrlMarquee functions
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================

Func _GUICtrlMarquee_Delete($iIndex)

; Errorcheck index
Switch $iIndex
Case 1 To $aMarquee_Params[0][0]
$iIndex = Int($iIndex)
Case Else
Return SetError(1, 0, 0)
EndSwitch

; Delete the object
$aMarquee_Params[$iIndex][1] = 0
; And free the memory
__GUIMarquee_MemReduce()

; Remove that entry from the array
GUICtrlDelete($aMarquee_Params[$iIndex][0])
For $i = $iIndex To $aMarquee_Params[0][0] - 1
For $j = 0 To UBound($aMarquee_Params, 2) - 1
$aMarquee_Params[$i][$j] = $aMarquee_Params[$i + 1][$j]
Next
Next
ReDim $aMarquee_Params[$aMarquee_Params[0][0]][13]
$aMarquee_Params[0][0] -= 1

; Redraw the other marquees
For $i = 1 To $aMarquee_Params[0][0]
_GUICtrlMarquee_Reset($i)
Next

EndFunc ;==>_GUICtrlMarquee_Delete

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlMarquee_Reset
; Description ...: Resets a marquee control to current parameters
; Syntax.........: _GUICtrlMarquee_Reset($iIndex, $sText)
; Parameters ....: $iIndex - Index of marquee returned by _GUICtrlMarquee_Init
; $sText - The text (or HTML markup) the marquee should display (Default leaves text unchanged)
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error as follows
; 1 = Invalid index
; 2 = Invalid object reference
; Author ........: rover
; Modified.......: Melba23
; Remarks .......:
; Related .......: Other _GUICtrlMarquee functions
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================

Func _GUICtrlMarquee_Reset($iIndex, $sText = Default)

; Errorcheck index
Switch $iIndex
Case 1 To $aMarquee_Params[0][0]
$iIndex = Int($iIndex)
Case Else
Return SetError(1, 0, 0)
EndSwitch

; Retrieve object reference
$oShell = $aMarquee_Params[$iIndex][1]
If Not IsObj($oShell) Then
Return SetError(2, 0, 0)
EndIf

If $sText <> Default Then
$aMarquee_Params[$iIndex][12] = $sText
EndIf

$oShell.document.body.innerHTML = '<body onselectstart="return false" oncontextmenu="return false" onclick="return false" ' & _
'ondragstart="return false" ondragover="return false"> ' & _
'<marquee width=100% height=100% ' & "loop=" & $aMarquee_Params[$iIndex][2] & _
" behavior=" & $aMarquee_Params[$iIndex][3] & _
" direction=" & $aMarquee_Params[$iIndex][4] & _
" scrollamount=" & $aMarquee_Params[$iIndex][5] & _
" scrolldelay=" & $aMarquee_Params[$iIndex][6] & _
">" & $aMarquee_Params[$iIndex][12]
With $oShell.document
.body.style.borderWidth = $aMarquee_Params[$iIndex][7]
.body.style.color = $aMarquee_Params[$iIndex][8]
.body.bgcolor = $aMarquee_Params[$iIndex][9]
.body.style.fontSize = $aMarquee_Params[$iIndex][10]
.body.style.fontFamily = $aMarquee_Params[$iIndex][11]
EndWith

Return 1

EndFunc ;==>_GUICtrlMarquee_SetText

; #INTERNAL USE ONLY# ====================================================================================================================
; Name...........: _GUICtrlMarquee_MemReduce
; Description ...: Reduce memory usage by Shell.Explorer.2 objects
; Syntax.........: _GUICtrlMarquee_MemReduce()
; Author ........: AutoUt forum
; Remarks .......: This function is used internally by
; ===============================================================================================================================

Func __GUIMarquee_MemReduce()
Local $aHandle = DllCall("kernel32.dll", "int", "OpenProcess", "int", 0x1f0fff, "int", 0, "int", @AutoItPID)
DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", $aHandle[0])
DllCall("kernel32.dll", "int", "CloseHandle", "int", $aHandle[0])
EndFunc

How do you get on? :huh:

M23

M23,

I took a few days off ~~

Now, I can see the gap of memory usage not so big now. No matter how ugly the method is, I like it!

I also have such a UDF ^_^

Func _ReduceMemory($i_PID = -1)
 If $i_PID <> -1 Then
  Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
  Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
  DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
 Else
  Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
 EndIf
 Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory
Link to post
Share on other sites

The problem comes when your program needs that data again and it has to page it back in from the hard drive, that's where the performance issues can hit.

I think what JScript is trying to say is that since there are no longer any references to the Shell.Explorer.2 object, it gets swapped to the disc. And since there are no more references anymore, it won't need to be swapped back from the hard drive.

However, other parts of the memory will need to be swapped back in from the hard drive, resulting in (or caused by, I'm not sure) page faults.

Bottom line, Melba23, I would recommend against using the __GUIMarquee_MemReduce or _ReduceMemory function, because it's not worth worrying about that 0.4% of your memory being used.

Actually that's 0.4% on my computer, which has only 2gb of ram. If programmers want to use EmptyWorkingSet, let them do it themselves.

[font=arial, sans-serif]How is education supposed to make me feel smarter? Besides, every time I learn something new, it pushes some old stuff out of my brain. Remember when I took that home winemaking course, and I forgot how to drive?[/font][font=arial, sans-serif]<div>This is how you annoy a web developer.</span>[/font]

Link to post
Share on other sites
  • Moderators

darthwhatever,

After further reading I agree with your analysis - and I had also reached the same conclusion and will not include such a function in the UDF itself. ;)

Now enough of this memory stuff - can we now please leave this thread to discussion of my UDF! :D

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to post
Share on other sites
  • 7 months later...

Since this UDF uses HTML mark-up tags here's a link to help with tags:

http://www.quackit.com/html/tags/

Try this:

#include "Marquee.au3"

; The source for your image
; NOTE: The full path (eg. C:\path\to\img\file.jpg) is need or the file is displayed as an X (not found)
$Img = @ScriptDir & "\pix\test.jpg"

GUICreate("Marquee Example", 700, 20)

$aMarquee = _GUICtrlMarquee_Init()
_GUICtrlMarquee_SetScroll($aMarquee, -1, -1, -1, 4, 10)
_GUICtrlMarquee_Create($aMarquee, '"Smooth Scroll" Marquee Parameters <-----<-----<----- The following is a test <----- Img: <img src="' & $Img & '" width="17" height="17" alt="Img_1">', 0, 0, 700, 20)

GUISetState()

While 1
    $iMsg = GUIGetMsg()
    If $iMsg = -3 Then Exit
WEnd

"Just be fred, all we gotta do, just be fred."  -Vocaliod

"That is a Hadouken. A KAMEHAMEHA would have taken him 13 days and 54 episodes to form." - Roden Hoxha

@tabhooked

Clock made of cursors ♣ Desktop Widgets ♣ Water Simulation

Link to post
Share on other sites
  • Moderators

Vinh,

Sorry, I have no idea how to do that. :(

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to post
Share on other sites

hi, how to transparent  this on gui ^^

It's not possible using with this approach. I've been >asked before as well.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to post
Share on other sites
  • 1 month later...

Is it possible to add a _GUICtrlMarquee_GetPos() and a _GUICtrlMarquee_SetPos() function to this UDF?

"Just be fred, all we gotta do, just be fred."  -Vocaliod

"That is a Hadouken. A KAMEHAMEHA would have taken him 13 days and 54 episodes to form." - Roden Hoxha

@tabhooked

Clock made of cursors ♣ Desktop Widgets ♣ Water Simulation

Link to post
Share on other sites
  • Moderators

DatMCEyeBall,

And what exactly are these functions supposed to do? :huh:

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to post
Share on other sites

And what exactly are these functions supposed to do? :huh:

 

Get the scrolling position of the Marquee and set the scrolling position.

Example:

  • Save the position for later use
  • Change the text to show the user something else
  • Change back after a while and revert to the previous scrolling position so that the user can go back to whatever they were doing
Edited by DatMCEyeBall

"Just be fred, all we gotta do, just be fred."  -Vocaliod

"That is a Hadouken. A KAMEHAMEHA would have taken him 13 days and 54 episodes to form." - Roden Hoxha

@tabhooked

Clock made of cursors ♣ Desktop Widgets ♣ Water Simulation

Link to post
Share on other sites
  • Moderators

DatMCEyeBall,

I tried doing somehting like that when I introduced the _GUICtrlMarquee_Reset function and could not determine how to detect nor set the current scrolling position. If you find me a way to do it - I will write the functions. Deal? :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to post
Share on other sites
  • 3 years later...
  • Moderators

djchaney3,

Welcome to the AutoIt forum and thanks for the compliment.

What you are doing is an excellent way to learn - and never be afraid to ask questions about bits of code from other members that you do not understand. Sensible forum members will not bite if asked sensible questions - and if the author of the code is not sensible then you will not be learning much anyway !

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to post
Share on other sites
  • 6 months later...
  • Moderators

mexykanu,

You are quite correct - I had changed the UDF file in the zip, but not the code in the post itself. Now fixed thanks - and delighted you like the UDF.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...