Leaderboard
Popular Content
Showing content with the highest reputation on 06/12/2017 in all areas
-
Recent Files Logic
argumentum reacted to czardas for a topic
The following code is intended to illustrate a method of adding recent files to the File menu, once files have been opened or saved. This is not a UDF, nor a universal solution which fits all requirements. It is just the solution I made for myself and I thought it worth sharing. I haven't noticed much about this subject. The example only emulates opening and saving files: nothing is actually written to disk. I have not included any code for opening or saving files - only the File menu and Title bar are updated. The code is intended to illustrate the logic I used. Perhaps you can improve on it or get some ideas from this example. #include <GUIConstants.au3> #include <MsgBoxConstants.au3> Example() #Region ; core functions Func UpdateRecentFiles(ByRef $aRecentFiles, $ahMenu, $sNewPath, $iMenuInsertPos) Local $iMaxFiles = UBound($aRecentFiles) -1 For $i = 1 To $aRecentFiles[0][0] ; check to see if the path was accessed recently If $aRecentFiles[$i][0] = $sNewPath Then ; file is already in the list For $j = $i To 2 Step -1 $aRecentFiles[$j][0] = $aRecentFiles[$j -1][0] ; push items down the list Next $aRecentFiles[1][0] = $sNewPath For $j = 1 To $aRecentFiles[0][0] ; update all recent file menu items GUICtrlSetData($aRecentFiles[$j][1], $aRecentFiles[$j][0]) ; overwrite existing control data Next Return ; the list has simply been reordered EndIf Next ; if we are here, then the file was not found in the recent files list For $i = $iMaxFiles To 2 Step -1 $aRecentFiles[$i][0] = $aRecentFiles[$i -1][0] ; push all existing items down the list Next If $aRecentFiles[0][0] < $iMaxFiles Then $aRecentFiles[0][0] += 1 ; increment the number of recent files in the list $aRecentFiles[$aRecentFiles[0][0]][1] = GUICtrlCreateMenuItem($sNewPath, $ahMenu[0], $aRecentFiles[0][0] + $iMenuInsertPos) ; create a new control ; add a second spacer to the menu after the first recent item appears (one time action) If $aRecentFiles[0][0] = 1 Then $aRecentFiles[0][1] = GUICtrlCreateMenuItem('', $ahMenu[0], $aRecentFiles[0][0] + $iMenuInsertPos +1) ; add divider after adding the first recent item EndIf $aRecentFiles[1][0] = $sNewPath ; add the new path to the files list For $i = 1 To $aRecentFiles[0][0] ; update all recent file menu items GUICtrlSetData($aRecentFiles[$i][1], $aRecentFiles[$i][0]) ; overwrite existing control data Next EndFunc ;==> UpdateRecentFiles Func ClearRecentFiles(ByRef $aRecentFiles, $idDummyInactive) For $i = 0 To $aRecentFiles[0][0] GUICtrlDelete($aRecentFiles[$i][1]) ; delete menu items $aRecentFiles[$i][1] = $idDummyInactive ; render all control IDs inactivate Next $aRecentFiles[0][0] = 0 ; there are now zero files in the list EndFunc ;==> ClearRecentFiles Func DeleteRecentItem(ByRef $aRecentFiles, $iItem, $idDummyInactive) For $i = $iItem To $aRecentFiles[0][0] -1 $aRecentFiles[$i][0] = $aRecentFiles[$i +1][0] GUICtrlSetData($aRecentFiles[$i][1], $aRecentFiles[$i][0]) Next GUICtrlDelete($aRecentFiles[$aRecentFiles[0][0]][1]) $aRecentFiles[$aRecentFiles[0][0]][1] = $idDummyInactive $aRecentFiles[0][0] -= 1 If $aRecentFiles[0][0] = 0 Then GUICtrlDelete($aRecentFiles[0][1]) $aRecentFiles[0][1] = $idDummyInactive EndIf EndFunc ;==> DeleteRecentItem #EndRegion ;==> core functions #Region ; example code Func Example() Local $sGUITitle = "New Project", $hGUI = GUICreate($sGUITitle, 500, 200) ; create GUI Local _ ; declare menu arrays $ahMenu[2] = [" File "," Options"], _ ; 1D array assigned to menus $ahMenuItem = GetMenuItems() ; 2D array assigned to menu item controls For $i = 0 To UBound($ahMenu) -1 $ahMenu[$i] = GUICtrlCreateMenu($ahMenu[$i]) ; create menu For $j = 1 To $ahMenuItem[0][$i] ; add menu item controls $ahMenuItem[$j][$i] = GUICtrlCreateMenuItem($ahMenuItem[$j][$i], $ahMenu[$i]) Next Next Local $iMenuInsertPos = 4 ; this is the menuentry position for the most recent file GUICtrlCreateMenuItem('', $ahMenu[0], $iMenuInsertPos) ; create dividor Local $aRecentFiles[9][2] = [[0]], _ ; zero previously stored items - assuming that the recent files list is empty at startup $idDummyInactive = GUICtrlCreateDummy() ; never send messages to $idDummyInactive For $i = 0 To 8 ; [IMPORTANT] Windows assigned a unique control ID to $idDummyInactive $aRecentFiles[$i][1] = $idDummyInactive ; temporarily set all (recent files list) controls to never receive messages Next GUISetState(@SW_SHOW) Local $msg, $sFilePath While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE, $ahMenuItem[5][0] ExitLoop Case $ahMenuItem[1][0] ; File ==> New New() WinSetTitle($hGUI , WinGetTitle($hGUI), $sGUITitle) Case $ahMenuItem[2][0] ; File ==> Open $sFilePath = Open() If Not @error Then WinSetTitle($hGUI , WinGetTitle($hGUI), $sFilePath) UpdateRecentFiles($aRecentFiles, $ahMenu, $sFilePath, $iMenuInsertPos) EndIf Case $ahMenuItem[3][0] ; File ==> Save $sFilePath = Save(WinGetTitle($hGUI)) If @error Then MsgBox($MB_OK, "Action Failed", "Unable to save file") ContinueLoop ; [use your own code logic] Else WinSetTitle($hGUI , WinGetTitle($hGUI), $sFilePath) UpdateRecentFiles($aRecentFiles, $ahMenu, $sFilePath, $iMenuInsertPos) ; update recent files here EndIf Case $ahMenuItem[4][0] ; File ==> Save As $sFilePath = SaveAs() If @error Then MsgBox($MB_OK, "Action Failed", "Unable to save file") ContinueLoop ; [use your own code logic] Else WinSetTitle($hGUI , WinGetTitle($hGUI), $sFilePath) UpdateRecentFiles($aRecentFiles, $ahMenu, $sFilePath, $iMenuInsertPos) ; update recent files here EndIf Case $ahMenuItem[1][1] ; Options ==> Clear Recent Files ClearRecentFiles($aRecentFiles, $idDummyInactive) Case $aRecentFiles[1][1], $aRecentFiles[2][1], $aRecentFiles[3][1], $aRecentFiles[4][1], $aRecentFiles[5][1], $aRecentFiles[6][1], $aRecentFiles[7][1], $aRecentFiles[8][1] For $i = 1 To $aRecentFiles[0][0] If $msg = $aRecentFiles[$i][1] Then $sFilePath = OpenRecent($aRecentFiles[$i][0]) If Not @error Then WinSetTitle($hGUI , WinGetTitle($hGUI), $sFilePath) UpdateRecentFiles($aRecentFiles, $ahMenu, $sFilePath, $iMenuInsertPos) ; update recent files here ElseIf @error = 1 Then If MsgBox(BitOR($MB_YESNO, $MB_DEFBUTTON2, $MB_TASKMODAL), "Action Failed", "Unable to locate " & $aRecentFiles[$i][0] & @CRLF & _ "Do you want to remove this item from the menu?") = 6 Then DeleteRecentItem($aRecentFiles, $i, $idDummyInactive) EndIf ExitLoop ; return to the While loop EndIf Next EndSwitch WEnd EndFunc ;==> Example Func New() ; start a new project [your code here] EndFunc ;==> New Func Open() Local $sFilePath = FileOpenDialog("Open", @DocumentsCommonDir, "All (*.*)") If @error Then Return SetError(1) ; read file [your code here] Return $sFilePath EndFunc ;== Open Func OpenRecent($sFilePath) If Not FileExists($sFilePath) Then Return SetError(1) ; unable to open recent file ; read file [your code here] Return $sFilePath EndFunc ;== OpenRecent Func Save($sFilePath) If Not FileExists($sFilePath) Then Local $sNewPath = SaveAs() If @error Then Return SetError(1) ; unable to save file Return $sNewPath EndIf ; save file [your code here] Return $sFilePath EndFunc ;==> Save Func SaveAs() Local $sFilePath = FileSaveDialog( "Save As", @DocumentsCommonDir, "All (*.*)") If @error Then Return SetError(1) ; unable to save file ; save new or existing file [your code here] Return $sFilePath EndFunc ;==> SaveAs Func GetMenuItems() Local $aMenuItem[6][2] $aMenuItem[0][0] = 5 ; number of items on the File Menu $aMenuItem[0][1] = 1 ; number of items on the Options Menu ; File Menu $aMenuItem[1][0] = "New" $aMenuItem[2][0] = "Open" $aMenuItem[3][0] = "Save" $aMenuItem[4][0] = "Save As" $aMenuItem[5][0] = "Exit" ; Options Menu $aMenuItem[1][1] = "Clear Recent Files" Return $aMenuItem EndFunc ;==> GetMenuItems #Region ; example code Run the example, open some files and check for new menu items that are added. Then try a few other menu options and check the various changes occurring in the File menu.1 point -
[SOLVED] _IEImgClick Help
SkysLastChance reacted to anthonyjr2 for a topic
For $oForm In $oForms MsgBox($MB_SYSTEMMODAL, "Form Info", $oForm.name) _IEImgClick($oForm, "TogglePlus.gif", "src") Next Does this work? The image doesn't show on my end so I can't test if it clicks.1 point -
Hello. Try this. #include <Date.au3> Local $today=_DateToDayValue(@YEAR,@MON,@MDAY),$Y, $M, $D Local $tomorrow=_DayValueToDate($today+1, $Y, $M, $D) $tomorrow= StringFormat("%02i/%02i/%04i", $M, $D, $Y) ConsoleWrite($tomorrow & @CRLF) Saludos1 point
-
You can't register the same windows message multiple times, it will only register the last one you set. Put all three of your slider checks inside the same function and use something like this. Func WM_H_Slider($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Switch $lParam Case $hSlider_Handle1 GUICtrlSetData($Label3, GUICtrlRead($Slider1)) Case $hSlider_Handle2 GUICtrlSetData($Label4, GUICtrlRead($Slider2)) Case $hSlifer_Handle3 GUICtrlSetData($Label5, GUICtrlRead($Slider3)) EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_H_Slider1 This way you can register once, and check all three sliders in the same function.1 point
-
@tezhihi, Look at StringRegExp help. You'll find that this option allows unsignificant whitespaces in a pattern, for best readability. OTOH with ?x option, significant whitespaces (hex 0x20) need to be escaped as backslash space or \x20.1 point
-
remember this one (I assume on new machines you cannot assume all .NET versions are there) https://blogs.msdn.microsoft.com/dsvc/2013/03/04/usage-of-net-collections-types-in-vbscript-is-not-supported-after-net-4-5/1 point
-
You don't need alternations in the class, and the "+" in the lookahead is useless $a = StringRegExpReplace($a, '(?<![QBJGYR\d])\*(?!\d)', '*') Assuming that the $ sign is present in the "ignore" but not in the "replace" parts, this could work $a = StringRegExpReplace($a, '(?x) (?<! \$[A-Z] | \*\d) \*' , "*")1 point
-
You can edit your topic's title add (SOLVED) You're welcome Saludos1 point
-
It's working right for me. Saludos1 point
-
1 point
-
These are escapes for Unicode characters beyond 7-bit ASCII. It would seem logical to replace every occurence by the corresponding Unicode character: $s = "Something with sequences like ñ á Â æ à å ä or even — or • should be turned to plain Unicode!" $s = Execute('"' & StringRegExpReplace($s, '&#x((?:[[:xdigit:]]{2}){1,2});', '" & ChrW(0x$1) & "') & '"') MsgBox(0, "Now reading", $s)1 point
-
Hello the correct Button instance is 1 do this. #RequireAdmin WinActivate("Malwarebytes AdwCleaner 6.047") ControlClick("Malwarebytes AdwCleaner 6.047","","Button1") Saludos1 point
-
@steveeye Just to point you in the right direction: https://www.sitepoint.com/12-amazing-jquery-tables/1 point
-
LAST VERSION - 1.5 07-Dec-10 Creates a button to quickly select a color from the specified palette. It is possible to change the appearance, at its discretion, determine their own palette, call a standard Windows dialog for selecting colors, as well as change the appearance of buttons. See my example, to understand how it works and how to use it. UDF is written entirely in AutoIt and Windows API. No ActiveX and third-party DLL. I hope you enjoy. I look forward to any feedback and suggestions. History Available functions ColorPicker UDF Library v1.5 Previous downloads: 1007 ColorPicker.au3 Example1 #Include <ColorPicker.au3> Opt('MustDeclareVars', 1) Global $hForm, $Msg, $Label, $Picker $hForm = GUICreate('Color Picker', 179, 100) $Label = GUICtrlCreateLabel('', 5, 5, 90, 90, $SS_SUNKEN) GUICtrlSetBkColor(-1, 0xFF6600) ; Create Picker $Picker = _GUIColorPicker_Create('Color...', 102, 70, 70, 23, 0xFF6600, BitOR($CP_FLAG_DEFAULT, $CP_FLAG_TIP)) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE ExitLoop Case $Picker GUICtrlSetBkColor($Label, _GUIColorPicker_GetColor($Picker)) EndSwitch WEnd Example2 #Include <ColorPicker.au3> #Include <WinAPI.au3> Opt('MustDeclareVars', 1) Global $hForm, $Msg, $Label, $Picker1, $Picker2, $Picker3, $Data, $hInstance, $hCursor $hForm = GUICreate('Color Picker', 300, 200) ; Load cursor $hInstance = _WinAPI_LoadLibrary(@SystemDir & '\mspaint.exe') $hCursor = DllCall('user32.dll', 'ptr', 'LoadCursor', 'ptr', $hInstance, 'dword', 1204) $hCursor = $hCursor[0] _WinAPI_FreeLibrary($hInstance) ; Create Picker1 with custom cursor $Picker1 = _GUIColorPicker_Create('', 100, 50, 44, 44, 0xFF6600, BitOR($CP_FLAG_DEFAULT, $CP_FLAG_CHOOSERBUTTON), 0, -1, -1, $hCursor, 'Simple Text') ; Free cursor DllCall('user32.dll', 'int', 'DestroyCursor', 'ptr', $hCursor) ; Create custom (4 x 5) color palette Dim $aPalette[20] = _ [0xFFFFFF, 0x000000, 0xC0C0C0, 0x808080, _ 0xFF0000, 0x800000, 0xFFFF00, 0x808000, _ 0x00FF00, 0x008000, 0x00FFFF, 0x008080, _ 0x0000FF, 0x000080, 0xFF00FF, 0x800080, _ 0xC0DCC0, 0xA6CAF0, 0xFFFBF0, 0xA0A0A4] ; Create Picker2 with custom color palette $Picker2 = _GUIColorPicker_Create('', 7, 170, 50, 23, 0xFF00FF, BitOR($CP_FLAG_CHOOSERBUTTON, $CP_FLAG_ARROWSTYLE, $CP_FLAG_MOUSEWHEEL), $aPalette, 4, 5, 0, '', 'More...') ; Create custom (8 x 8) color palette Dim $aPalette[64] For $i = 0 To UBound($aPalette) - 1 $aPalette[$i] = BitOR($i, BitShift($i * 4, -8), BitShift($i, -16)) Next ; Create Picker3 with custom color palette $Picker3 = _GUIColorPicker_Create('Color...', 223, 170, 70, 23, 0x2DB42D, BitOR($CP_FLAG_TIP, $CP_FLAG_MAGNIFICATION), $aPalette, 8, 8) $Label = GUICtrlCreateLabel('', 194, 171, 22, 22, $SS_SUNKEN) GUICtrlSetBkColor(-1, 0x2DB42D) GUICtrlSetTip(-1, '2DB42D') GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg ; Color Picker sends the message that the color is selected Case -3 ExitLoop Case $Picker1 $Data = _GUIColorPicker_GetColor($Picker1, 1) If $Data[1] = '' Then $Data[1] = 'Custom' EndIf ConsoleWrite('Picker1: 0x' & Hex($Data[0], 6) & ' (' & $Data[1] & ')' & @CR) Case $Picker2 ConsoleWrite('Picker2: 0x' & Hex(_GUIColorPicker_GetColor($Picker2), 6) & @CR) Case $Picker3 $Data = _GUIColorPicker_GetColor($Picker3) ConsoleWrite('Picker3: 0x' & Hex($Data, 6) & @CR) GUICtrlSetBkColor($Label, $Data) GUICtrlSetTip($Label, Hex($Data, 6)) EndSwitch WEnd Example3 (required ColorChooser UDF) #Include <ColorChooser.au3> #Include <ColorPicker.au3> Opt('MustDeclareVars', 1) Global $hForm, $Msg, $Label, $Picker $hForm = GUICreate('MyGUI', 170, 200) $Label = GUICtrlCreateLabel('', 15, 15, 140, 140, $SS_SUNKEN) GUICtrlSetBkColor(-1, 0x50CA1B) $Picker = _GUIColorPicker_Create('', 55, 166, 60, 23, 0x50CA1B, BitOR($CP_FLAG_CHOOSERBUTTON, $CP_FLAG_MAGNIFICATION, $CP_FLAG_ARROWSTYLE), 0, -1, -1, 0, 'Simple Text', 'Custom...', '_ColorChooserDialog') GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE ExitLoop Case $Picker GUICtrlSetBkColor($Label, _GUIColorPicker_GetColor($Picker)) EndSwitch WEnd1 point
-
Here are another three methods of converting the three colour values to a RGB colour. Note the ease of of identifying RGB colours in 0xRRGGBB hexadecimal format. e.g. 0x0000FF if blue (blue color channel is full); 0xFF0000 is red (red color channel is full); 0x000000 if black (no color in any of the color channels); 0xFFFFFF is white (all color channels are full). Local $red = 0x80 Local $green = 0x90 Local $blue = 255 ConsoleWrite("The three color channels are:-" & @LF) ConsoleWrite("red = 0x" & Hex($red, 2) & " or " & $red & "; " & @LF) ConsoleWrite("green = 0x" & Hex($green, 2) & " or " & $green & "; " & @LF) ConsoleWrite("blue = 0x" & Hex($blue, 2) & " or " & $blue & "; " & @LF) ;--- Using String to number - color channels to color -------------- Local $color = Execute("0x" & Hex($red, 2) & Hex($green, 2) & Hex($blue, 2)) ; Use either Execute(), Int(), or Number() function. ConsoleWrite("RGB Color Execute String" & @TAB & "0x" & Hex($color, 6) & " or " & $color & @LF) ;--- Multiply & Add color channels together to get color ------------ Local $colorAddMulti = ($red * 0x10000 + $green * 0x100 + $blue) ConsoleWrite("RGB Color Add/Multiply " & @TAB & "0x" & Hex($colorAddMulti, 6) & " or " & $colorAddMulti & @LF) ; --- Using Bit operators - color channels to color ---------------- Local $colorBitWise = BitOR(BitShift(($red), -16), BitShift(($green), -8), ($blue)) ConsoleWrite("RGB Color Bit operations" & @TAB & "0x" & Hex($colorBitWise, 6) & " or " & $colorBitWise & @LF) #cs Output:- The three color channels are:- red = 0x80 or 128; green = 0x90 or 144; blue = 0xFF or 255; RGB Color Execute String 0x8090FF or 8425727 RGB Color Add/Multiply 0x8090FF or 8425727 RGB Color Bit operations 0x8090FF or 8425727 #ce1 point
-
cvocvo, Two ways to get a reading of the slider value - Firstly, polling in the While...WEnd loop: #include <GUIConstantsEx.au3> $hGUI = GUICreate("Test", 500, 500) $hSlider = GUICtrlCreateSlider(10, 50, 480, 40) $hLabel = GUICtrlCreateLabel("0", 10, 10, 100, 40) GUICtrlSetFont(-1, 24) GUISetState() $iLastSlider = 0 While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch $iCurrSlider = GUICtrlRead($hSlider) If $iCurrSlider <> $iLastSlider Then GUICtrlSetData($hLabel, $iCurrSlider) $iLastSlider = $iCurrSlider EndIf WEndIf you are wondering why we have the $iCurrSlider/$iLastSlider code then try this: #include <GUIConstantsEx.au3> $hGUI = GUICreate("Test", 500, 500) $hSlider = GUICtrlCreateSlider(10, 50, 480, 40) $hLabel = GUICtrlCreateLabel("0", 10, 10, 100, 40) GUICtrlSetFont(-1, 24) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch GUICtrlSetData($hLabel, GUICtrlRead($hSlider)) WEndSee how the label flickers? That is why you need to limit the GUICtrlSetData calls to when they are needed, not every time round the loop. Secondly a much sexier version: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $hGUI = GUICreate("Test", 500, 500) $hSlider = GUICtrlCreateSlider(10, 50, 480, 40) $hSlider_Handle = GUICtrlGetHandle(-1) $hLabel = GUICtrlCreateLabel("0", 10, 10, 100, 40) GUICtrlSetFont(-1, 24) GUISetState() GUIRegisterMsg($WM_HSCROLL, "WM_H_Slider") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $GUI_EVENT_PRIMARYUP ToolTip("") EndSwitch WEnd Func WM_H_Slider($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam If $lParam = $hSlider_Handle Then GUICtrlSetData($hLabel, GUICtrlRead($hSlider)) EndIf Return $GUI_RUNDEFMSG EndFuncIf you have never used GUIRegisterMsg there is a tutorial in the Wiki whcih explains what it is all about. I hope that helps. M231 point