Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 05/07/2023 in all areas

  1. @kurtykurtyboy For the record, this works for me : #include <GUIConstantsEx.au3> #include <GuiRichEdit.au3> #include <WindowsConstants.au3> Example() Func Example() Local $hGUI = GUICreate("RichEdit Set Tab Stops with \deftabN", 500, 300) Local $hRichEdit = _GUICtrlRichEdit_Create($hGUI, "", 1, 1, 498, 298, _ BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL, $WS_HSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $ES_NOHIDESEL)) Local $sRTFtext = _ '{\rtf1\ansi\ansicpg1252\deff0\deflang1036\deftab416{\fonttbl{\f0\fswiss\fcharset0 Arial;}}' & @crlf & _ '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 1234567890123456789012345678901234567890\par' & @crlf & _ 'ab\par' & @crlf & _ '}' _GUICtrlRichEdit_SetText($hRichEdit, $sRTFtext) GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _GUICtrlRichEdit_Destroy($hRichEdit) EndFunc ;==>Example I added \deftab416 (using NotePad) and each Tab Stop corresponds to 4 characters on any line (Font used when creating the RTF with WordPad was Arial 10) Hope it will work for you too
    1 point
  2. ioa747

    Txt split to ini file

    I didn't understand what exactly you want, experimenting a little, I put my imagination to work a little, and here's the result. It can't be, you'll find something useful The rest you can throw away ; https://www.autoitscript.com/forum/topic/210069-txt-split-to-ini-file/?do=findComment&comment=1517679 #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #include <Misc.au3> #include <File.au3> #include <Date.au3> #include <Array.au3> #include <GuiComboBox.au3> #include <GUIConstantsEx.au3> _Singleton(@ScriptName, 0) Global $nMsg, $hGui, $idCombo, $lv, $CurUser Global $aUsers = WriteAllUserData() Global $aData = FindAllIniFile(@ScriptDir & "\Data\") MakeMyGuiList() HotKeySet("{HOME}", "MyArrayDisplay") While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $idCombo _GUICtrlComboBox_GetLBText($idCombo, _GUICtrlComboBox_GetCurSel($idCombo), $CurUser) UpDadeMyGuiList($CurUser) Case $GUI_EVENT_CLOSE GUIDelete() Exit EndSwitch WEnd ;---------------------------------------------------------------------------------------- Func WriteAllUserData() ; Make all ini files Local $aDatalar, $aUsers, $UserName, $aTemp, $IniFile, $aSpl, $sDate _FileReadToArray("Datalar.txt", $aDatalar, $FRTA_NOCOUNT) _FileReadToArray("Users.txt", $aUsers, $FRTA_COUNT, "=") Local $iLines = UBound($aDatalar) $sDate = '' For $i = 0 To $iLines - 1 $aTemp = StringSplit($aDatalar[$i], ", ", $STR_NOCOUNT) $UserName = GetUserName($aUsers, $aTemp[1]) ; if no user skip If $UserName <> "" Then If $sDate <> $aTemp[3] Then $sDate = $aTemp[3] ; format date 00.00.0000 for ini FileName $aSpl = StringSplit($sDate, ".") If StringLen($aSpl[1]) = 1 Then $aSpl[1] = "0" & $aSpl[1] $IniFile = $aSpl[1] & "." & $aSpl[2] & "." & $aSpl[3] & ".ini" ;write ini If IniRead(@ScriptDir & "\Data\" & $IniFile, $UserName, "UserID", "Non-existing key") = "Non-existing key" Then IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "UserID", $aTemp[1]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "Date", $aTemp[3]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "Start", $aTemp[4]) Else If IniRead(@ScriptDir & "\Data\" & $IniFile, $UserName, "Start", "<UNKNOWN>") <> $aTemp[4] Then IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "End", $aTemp[4]) EndIf EndIf EndIf Next Return $aUsers EndFunc ;==>WriteAllUserData ;---------------------------------------------------------------------------------------- Func GetUserName($aUsers, $ID) ; ID to User Name Local $iIndex = _ArraySearch($aUsers, $ID) If $iIndex <> -1 Then Return StringStripWS($aUsers[$iIndex][1], $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES) Else Return "" EndIf EndFunc ;==>GetUserName ;---------------------------------------------------------------------------------------- Func FindAllIniFile($sStartPath = "") ; Find All Ini File If $sStartPath = "" Then $sStartPath = @ScriptDir Local $aArray[1][8] $aArray[0][0] = 0 ; "index" $aArray[0][1] = "UserID" $aArray[0][2] = "UserName" $aArray[0][3] = "Date" $aArray[0][4] = "Start" $aArray[0][5] = "End" $aArray[0][6] = "Time" $aArray[0][7] = "idItem" Local $ArraySrtfiles = _FileListToArrayRec($sStartPath, "*.ini", $FLTAR_FILES, $FLTAR_RECUR) If Not IsArray($ArraySrtfiles) Then ConsoleWrite($sStartPath & " = Invalid input path" & @CRLF) Return Else For $x = 1 To $ArraySrtfiles[0] ;ConsoleWrite($sStartPath & $ArraySrtfiles[$x]& @CRLF) ReadIniToArray($aArray, $sStartPath & $ArraySrtfiles[$x]) Next Return $aArray EndIf EndFunc ;==>FindAllIniFile ;---------------------------------------------------------------------------------------- Func ReadIniToArray(ByRef $aArray, $TxtFile) ; Read Ini To Array Local $index ;Read the INI section names. This will return a 1 dimensional array. Local $aSections = IniReadSectionNames($TxtFile) ;Check if an error occurred. If Not @error Then ;Enumerate through the array displaying the section names. For $i = 1 To $aSections[0] ReDim $aArray[UBound($aArray) + 1][8] $aArray[0][0] += 1 $index = $aArray[0][0] $aArray[$index][0] = $index ;"index" $aArray[$index][1] = IniRead($TxtFile, $aSections[$i], "UserID", "<EMPTY>") ;"UserID" $aArray[$index][2] = $aSections[$i] ;"UserName" $aArray[$index][3] = IniRead($TxtFile, $aSections[$i], "Date", "<EMPTY>") ;"Date" $aArray[$index][4] = IniRead($TxtFile, $aSections[$i], "Start", "<EMPTY>") ;"Start" $aArray[$index][5] = IniRead($TxtFile, $aSections[$i], "End", "<EMPTY>") ;"End" $aArray[$index][6] = "" ;"Time" Next EndIf Return $aArray EndFunc ;==>ReadIniToArray ;---------------------------------------------------------------------------------------- Func MakeMyGuiList() ; GUI Create $hGui = GUICreate("_ank_ File Splitting", 510, 560, -1, -1) $lv = GUICtrlCreateListView("CART ID |DATE |START |END |TIME|NAME AND SURNAME", 10, 30, 490, 520) Local $sLine For $i = 1 To $aData[0][0] $sLine = $aData[$i][1] & "|" & $aData[$i][3] & "|" & $aData[$i][4] & "|" $sLine &= $aData[$i][5] & "|" & TimeDiff($aData[$i][4], $aData[$i][5]) & "|" & $aData[$i][2] $aData[$i][7] = GUICtrlCreateListViewItem($sLine, $lv) If $aData[$i][4] > "08:10:00" And $aData[$i][4] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][4] = "<EMPTY>" Or $aData[$i][5] = "<EMPTY>" Then GUICtrlSetBkColor(-1, 0xFFE5FF) Next $idCombo = GUICtrlCreateCombo("Select User", 10, 1, 490, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") For $i = 1 To $aUsers[0][0] _GUICtrlComboBox_AddString($idCombo, $aUsers[$i][1]) Next GUISetState(@SW_SHOW) EndFunc ;==>MakeMyGuiList ;---------------------------------------------------------------------------------------- Func UpDadeMyGuiList($Filter) ; delete items For $i = 1 To $aData[0][0] GUICtrlDelete($aData[$i][7]) $aData[$i][7] = "" Next Local $sLine ; ReMake items For $i = 1 To $aData[0][0] If $Filter = "Select User" Then $sLine = $aData[$i][1] & "|" & $aData[$i][3] & "|" & $aData[$i][4] & "|" $sLine &= $aData[$i][5] & "|" & TimeDiff($aData[$i][4], $aData[$i][5]) & "|" & $aData[$i][2] $aData[$i][7] = GUICtrlCreateListViewItem($sLine, $lv) If $aData[$i][4] > "08:10:00" And $aData[$i][4] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][4] = "<EMPTY>" Or $aData[$i][5] = "<EMPTY>" Then GUICtrlSetBkColor(-1, 0xFFE5FF) ContinueLoop Else If $aData[$i][2] = $Filter Then $sLine = $aData[$i][1] & "|" & $aData[$i][3] & "|" & $aData[$i][4] & "|" $sLine &= $aData[$i][5] & "|" & TimeDiff($aData[$i][4], $aData[$i][5]) & "|" & $aData[$i][2] $aData[$i][7] = GUICtrlCreateListViewItem($sLine, $lv) If $aData[$i][4] > "08:10:00" And $aData[$i][4] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][4] = "<EMPTY>" Or $aData[$i][5] = "<EMPTY>" Then GUICtrlSetBkColor(-1, 0xFFE5FF) Else $aData[$i][7] = "" EndIf EndIf Next EndFunc ;==>UpDadeMyGuiList ;---------------------------------------------------------------------------------------- Func TimeDiff($sStartTime, $sEndTime) Local $H, $M, $sDiff, $aSpl1, $aSpl2 $aSpl1 = StringSplit($sStartTime, ":") $aSpl2 = StringSplit($sEndTime, ":") If $aSpl1[0] + $aSpl2[0] <> 6 Then ;ConsoleWrite("! Error No valid time format" & @CRLF) Return SetError(1, 0, "") EndIf ; ** 2020/01/01 ** since all the results are from the same date $M = _DateDiff('n', "2020/01/01 " & $sStartTime, "2020/01/01 " & $sEndTime) $H = Floor($M / 60) $M = Mod($M, 60) $sDiff = StringFormat("%i:%02i", $H, $M) Return $sDiff EndFunc ;==>TimeDiff ;---------------------------------------------------------------------------------------- Func MyArrayDisplay() _ArrayDisplay($aData, "$aData") EndFunc ;==>MyArrayDisplay ;----------------------------------------------------------------------------------------
    1 point
  3. Why not to use scite lexer dll ?
    1 point
  4. @pixelsearch great investigation work! Your "\tx" loop solution seems to be the best (and only) solution right now. The \deftabn property was my first thought as well. I believe it goes here in the header: \rtf1\ansi\ansicpg1252\deff0\deflang1033\deftab414 However, I was also unable to get this to work. Strangely though, if I paste the following into an RTF file using notepad then open it with Microsoft WordPad, it follows the deftab as expected. If you create another file with the exact same content but remove the \deftab414, the tabs are larger as expected. This suggests that the concept and method are sound, but there is something with the AutoIt implementation of the RichEdit control that does not follow/support the \deftab property. {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deftab414{\fonttbl{\f0\fnil\fcharset0 Courier New;}} {\colortbl ;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue144;\red240\green0\blue255;\red172\green0\blue169;\red170\green0\blue0;\red0\green153\blue51;} {\*\generator Riched20 10.0.19041}\viewkind4\uc1 \pard\cf1\f0\fs18 Func\cf0 _main\cf2 ()\cf0\par \tab _guiCreate\cf2 ()\cf0\par \tab\cf3 GUISetState\cf2 (\cf4 @SW_SHOWNORMAL\cf2 )\cf0\par \par \tab\cf1 While\cf0 \cf5 1\cf0\par \tab\tab\cf1 Switch\cf0 \cf3 GUIGetMsg\cf2 ()\cf0\par \tab\tab\tab\cf1 Case\cf0 \cf6 $GUI_EVENT_CLOSE\cf0\par \tab\tab\tab\tab\cf1 ExitLoop\cf0\par \par \tab\tab\tab\cf1 Case\cf0 \cf1 Else\cf0\par \tab\tab\tab\tab\cf7 ;\par \cf0\tab\tab\cf1 EndSwitch\cf0\par \tab\cf1 WEnd\cf0\par \cf1 EndFunc\cf0\par }
    1 point
  5. I will have to disagree. The bot/AI is an aid, but the concepts, is you who needs to know them. The advise I gave you, you did not apply it. Maybe you can tell or train the AI to use it. In any case, you show to have a good head on your shoulders and you'll come around ( applying best practices ) once you gain sufficient experience. I know how pressing a desired project can get when we first start. We all go thru these "growing pains" while learning something new. Have fun coding and keep at it. And thanks for posting the evolution on the project and do post the final code.
    1 point
  6. @kurtykurtyboy ok I'll try to explain in a long post what I did yesterday to shrink the Tabs size : 1) in a regular edit control 2) in a RichEdit control containing plain text 3) in a RichEdit control containing RTF text (as found in GuiBuilderPlus) First of all there are 2 functions found in AutoIt, to set Tab Stops in edit controls : _GUICtrlEdit_SetTabStops (for regular edit control) _GUICtrlRichEdit_SetTabStops (for Richedit control) _GUICtrlEdit_SetTabStops was scripted by Gary Frost in 2007 in this post and its 2nd parameter must be an Array of Tab stops On the contrary, _GUICtrlRichEdit_SetTabStops 2nd parameter can't be an Array and must be an integer or a string. imho both functions could have been combined into one, making it easier to use, especially they're both based on the same EM_SETTABSTOPS message. Here is what we read on msdn concerning this message : The EM_SETTABSTOPS message sets the tab stops in a multiline edit control. When text is copied to the control, any tab character in the text causes space to be generated up to the next tab stop. This message is processed only by multiline edit controls. You can send this message to either an edit control or a rich edit control. In the following scripts, I won't use these 2 functions but a personal function named _SetTabStops() which contains only 2 lines (and a lot of comments inside it, comments that will be deleted after the 1st script) 1) Here is the 1st script concerning a regular edit control : #include <GuiEdit.au3> #include <GUIConstantsEx.au3> #include <SendMessage.au3> Example() Func Example() Local $hGUI = GUICreate("Edit Set Tab Stops", 500, 300) Local $idEdit = GUICtrlCreateEdit("", 1, 1, 498, 298) GUICtrlSetFont(-1, 11, 400, 0, "Lucida Console") ; An array as 2nd parameter would work fine when used with _GUICtrlEdit_SetTabStops ; Local $aTabStops[1] = [14] ; _GUICtrlEdit_SetTabStops($idEdit, $aTabStops) _SetTabStops($idEdit, 14) ; 14 corresponds approx. to 4 characters width (as my Scite) in this Standard Edit control with this font GUISetState() ; placed here after 5 Tabs on purpose (for testing horizontal position) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE EndFunc ;==>Example ;================================================================= Func _SetTabStops($hWnd, $iTabStops) ; personal, based on simplified _GUICtrlEdit_SetTabStops() and _GUICtrlRichEdit_SetTabStops, with an integer as 2nd parameter. ; See also discussion on https://www.autoitscript.com/forum/topic/51587-tab-size-in-edit/ ; msdn : EM_SETTABSTOPS message : ; The EM_SETTABSTOPS message sets the tab stops in a multiline edit control. When text is copied to the control, any tab character ; in the text causes space to be generated up to the next tab stop. ; This message is processed only by multiline edit controls. You can send this message to either an edit control or a rich edit control. If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) ; Next line _SendMessage based on _GUICtrlEdit_SetTabStops / _GUICtrlRichEdit_SetTabStops, with "uint*" instead of "struct*" of course. _SendMessage($hWnd, $EM_SETTABSTOPS, 1, $iTabStops, 0, "wparam", "uint*") EndFunc ;==>_SetTabStops See the good result on my computer ? The GuiSetState() line starts on purpose with 5 Tabs in my Scite window, the alignment is correct with the content of the Edit control. 2) Here is the 2nd script concerning a RichEdit control containing plain text #include <GUIConstantsEx.au3> #include <GuiRichEdit.au3> #include <SendMessage.au3> #include <WindowsConstants.au3> #include <FontConstants.au3> ; for _WinAPI_CreateFont #include <WinAPIGdiInternals.au3> ; ditto Example() Func Example() Local $hGUI = GUICreate("RichEdit Set Tab Stops", 500, 300) Local $hRichEdit = _GUICtrlRichEdit_Create($hGUI, "", 1, 1, 498, 298, _ BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL, $WS_HSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $ES_NOHIDESEL)) ; horizontal scrollbar ; Nine's - https://www.autoitscript.com/forum/topic/206070-setup-permanent-font-for-richedit-control/?do=findComment&comment=1484072 Local $hFont = _WinAPI_CreateFont(14, 0, 0, 0, $FW_NORMAL, False, False, False, $DEFAULT_CHARSET, _ $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Lucida Console') ; trying to match Standard Edit control having font 11 Lucida Console _SendMessage($hRichEdit, $WM_SETFONT, $hFont, True) ; True = the control redraws itself _WinAPI_DeleteObject($hFont) ; An array as 2nd parameter generates an error when used with _GUICtrlRichEdit_SetTabStops ; Local $aTabStops[1] = [14] ; _GUICtrlRichEdit_SetTabStops($hRichEdit, $aTabStops) ; ConsoleWrite("@error = " & @error & @crlf) ; 1021 _SetTabStops($hRichEdit, 14) ; 14 corresponds approx. to 4 characters width (as my Scite) in this RichEdit control with this font GUISetState() ; placed here after 5 Tabs on purpose (for testing horizontal position) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _GUICtrlRichEdit_Destroy($hRichEdit) EndFunc ;==>Example ;================================================================= Func _SetTabStops($hWnd, $iTabStops) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) _SendMessage($hWnd, $EM_SETTABSTOPS, 1, $iTabStops, 0, "wparam", "uint*") EndFunc ;==>_SetTabStops Good result again, this time it was in a RichEdit control containing plain text 3) The 3rd script concerns a RichEdit control containing RTF text (GuiBuilderPlus) * First the code concerning "GuiBuilderPlus_formGenerateCode.au3" (e.g. 1 line _SetTabStops + Func _SetTabStops) ... $editCodeGeneration = _GUICtrlRichEdit_Create($hFormGenerateCode, "", 10, 10, $w - 20, $h - $titleBarHeight - 78, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL)) GUICtrlSetResizing(-1, $GUI_DOCKBORDERS) GUICtrlSetFont(-1, 9, -1, -1, "Courier New") _SetTabStops($editCodeGeneration, 22) ; 22 corresponds approx. to 4 characters width (as my Scite) in this RichEdit control with this font _RESH_SyntaxHighlight($editCodeGeneration, 0, _code_generation()) ... ;================================================================= Func _SetTabStops($hWnd, $iTabStops) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) _SendMessage($hWnd, $EM_SETTABSTOPS, 1, $iTabStops, 0, "wparam", "uint*") EndFunc ;==>_SetTabStops * Then the code concerning your customized version of "RESH.au3" . Here is the reworked function __RESH_HeaderFooter with a header containing 32 Tab Stops : Func __RESH_HeaderFooter(ByRef $sCode) Local $iFirstTab = 412, $sTabPos = "" ; 413 would be acceptable too For $i = 1 To 32 ; $MAX_TAB_STOPS = 32 (let's add them all in case of severe indentation) $sTabPos &= "\tx" & ($iFirstTab * $i) ; "\tx412\tx824\tx1236\..." Next #Tidy_Off $sCode = "{" & _ "\rtf1\ansi\ansicpg1252\deff0\deflang1033" & _ "{" & _ "\fonttbl" & _ "{" & _ "\f0\fnil\fcharset0 " & $g_RESH_sFont & ";" & _ "}" & _ "}" & _ "{" & _ "\colortbl;" & _ $g_RESH_sColorTable & _ "}" & _ "{" & _ "\*\generator Msftedit 5.41.21.2510;" & _ "}" & _ "\viewkind4\uc1\pard" & $sTabPos & _ "\f0\fs" & $g_RESH_iFontSize & " " & _ StringStripWS($sCode, 2) & "\par" & _ "}" #Tidy_On EndFunc ;==>__RESH_HeaderFooter The result can be found in the pic of my preceding post ("Live Generated Code") which shows the shrinked Tabs size. If applied it also to Beege's original "RESH.au3", here is the result when using his example, after I added for fun 1 Tab per line (going from 1 Tab to 10) : Note: instead of these 32 \tx...\tx...\tx... I wish I could have added this : \deftabn Default tab width (720) But I couldn't make it. If anyone knows how and where to place \deftab in a RTF file, please share your knowledge, thanks ! Hope it helps
    1 point
  7. Skeletor

    ImageTOGreyscale

    I took some inspiration from this post. They used a screen capture, I modified the script to rather open an image. Try this: #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7 #include <GDIPlus.au3> Example() Func Example() _GDIPlus_Startup() Local $sInputFile = "image.jpg" Local $sOutputFile = "image_gray.jpg" Local $hImage = _GDIPlus_ImageLoadFromFile($sInputFile) If Not $hImage Then ConsoleWriteError("Failed to load image: " & $sInputFile & @CRLF) Return False EndIf Local Const $iWidth = _GDIPlus_ImageGetWidth($hImage) Local Const $iHeight = _GDIPlus_ImageGetHeight($hImage) Local $hIA = _GDIPlus_ImageAttributesCreate() Local $tColorMatrix = _GDIPlus_ColorMatrixCreateGrayScale() _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $tColorMatrix) Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight) _GDIPlus_GraphicsDispose($hGraphics) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA) _GDIPlus_ImageSaveToFile($hBitmap, $sOutputFile) _GDIPlus_ImageAttributesDispose($hIA) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_ImageDispose($hImage) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_Shutdown() EndFunc ;==>Example
    1 point
  8. Werty

    ImageTOGreyscale

    Check out this old thread...
    1 point
  9. ioa747

    ImageTOGreyscale

    for start, replace @ScriptFullPath with @ScriptDir
    1 point
×
×
  • Create New...