Jump to content

delete gui handle from 1 function in another


kor
 Share

Recommended Posts

Func _CreateBulkInput($oGUI, $sHeaderText, $iLeft = 0, $iTop = 0, $iWidth = 0, $iHeight = 0)
 Global $bBulk = True
 Local $oControl = _GUICtrlRichEdit_Create($oGUI, "", $iLeft, $iTop, $iWidth, $iHeight, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
 _GUICtrlRichEdit_AppendText($oControl, $sHeaderText & @CR) ; append header text
 _GUICtrlRichEdit_SetModified($oControl, False) ; set modified flag to false
 Return $oControl
EndFunc   ;==>_CreateBulkInput

Func _DestroyBulkInput()
 Global $bBulk = False
 _GUICtrlRichEdit_Destroy($oControl)
 ;Return $oControl
EndFunc   ;==>_DestroyBulkEdit

I'm wondering how I can get the 2 functions to work correctly.

I am already using th $bBulk var to allow me to easily check if the richedit box exists or not. (btw, if someone knows an easy way to check if a richedit exists or not let me know)

My problem is that I don't know how to allow the DestroyBulkInput function to see the $oControl from the previous function. I've tried making it Global but that doesn't work either.

I've heard that if you "Return" a variable from a function and it is global you can somehow allow other functions access to that variable but I'm not sure how exactly that works.

Link to comment
Share on other sites

Do not declare Global variables inside functions. Consult the help file about 'variable declaration.'

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 comment
Share on other sites

updated code seems to work.

Func _CreateBulkInput($oGUI, $sHeaderText, $iLeft = 0, $iTop = 0, $iWidth = 0, $iHeight = 0)
$cBulk = _GUICtrlRichEdit_Create($oGUI, "", $iLeft, $iTop, $iWidth, $iHeight, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
_GUICtrlRichEdit_AppendText($cBulk, $sHeaderText & @CR) ; append header text
_GUICtrlRichEdit_SetModified($cBulk, False) ; set modified flag to false
EndFunc   ;==>_CreateBulkInput

Func _DestroyBulkInput($cBulk)
_GUICtrlRichEdit_Destroy($cBulk)
EndFunc   ;==>_DestroyBulkEdit

now.. does anyone know how to check if a rich edit exists or not?

Link to comment
Share on other sites

You should be able to determine if you've created it, and that it still exists, by checking the value of the variable that holds the control's handle.

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 comment
Share on other sites

You should be able to determine if you've created it, and that it still exists, by checking the value of the variable that holds the control's handle.

I can, the problem is that once the rich edit is created the handle stays until you close the script. Even after I have issued _GuictrlRichEdit_Destroy()

Sample output

Example:

Using the above create and destroy functions.. they are called with this code:

ConsoleWrite("bulk1 = " & $cBulk & @CR)
If $cBulk > 1 Then
ConsoleWrite("window is there  ")
_DestroyBulkInput($cBulk)
EndIf
ConsoleWrite("bulk2 = " & $cBulk & @CR)
If (GUICtrlRead($aControls[4]) = 1 Or GUICtrlRead($aControls[5]) = 1 Or GUICtrlRead($aControls[6]) = 1) And $cBulk < 1 Then
_CreateBulkInput($oGUI, $sHeaderText, $iWidth - 450, 50, $iWidth - 100, $iHeight - 140)
EndIf
ConsoleWrite("bulk3 = " & $cBulk & @CR)

Here is my sample scite output

bulk1 = 0

bulk2 = 0

bulk3 = 0x001B0B64

bulk1 = 0x001B0B64

window is there bulk2 = 0x001B0B64

bulk3 = 0x001B0B64

bulk1 = 0x001B0B64

window is there bulk2 = 0x001B0B64

bulk3 = 0x001B0B64

This is after creating and destroying the richedit.

I guess I need some way to clear the $cBulk variable once the RichEdit has been destroyed so then when I check if the handle has a value it would be null?

Link to comment
Share on other sites

$cBulk = ""

EDIT: It might work better if you used the Handle of the control (GUICtrlGetHandle($cBulk)) instead of its control ID, not sure I haven't tried it, but the UDF functions generally work better with controls created using them than with native controls.

Edited by BrewManNH

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 comment
Share on other sites

$cBulk = ""

EDIT: It might work better if you used the Handle of the control (GUICtrlGetHandle($cBulk)) instead of its control ID, not sure I haven't tried it, but the UDF functions generally work better with controls created using them than with native controls.

tried both of those solutions.

Setting the $var to null or some value other than the handle doesn't work.

And using guictrlgethandle just returns 0 every time.

Link to comment
Share on other sites

Can you post a reproducer script showing the issue, not just pieces of a script but one that I can run and test, to see what's happening for myself? I want to see if you're doing it right, and if there's an issue with with the procedure.

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 comment
Share on other sites

I can't run that script because I don't have any of the icon files, it just closes itself because the "buttons" using the icon isn't created.

Nevermind, I substituted the icons for a default icon file and got it to run.

I see your problem, when you call the function to destroy the control, you're using the same variable name as the global variable in the function parameter. This causes that version of $cBulk to be a local variable, so all you're doing is destroying and changing the value of, the local variable. This has no effect on the global variable of the same name. You need to change the variable name in the _DestroyBulkInput function, or as shown below use ByRef to refer back to the global variable. Maybe something like below will work.

Func _DestroyBulkInput(ByRef $cBulkIn)
     ConsoleWrite("before rich destroy = " & $cBulk & @CR)
     _GUICtrlRichEdit_Destroy($cBulkIn)
     $cBulkIn = ""
     ConsoleWrite("after rich destroy = " & $cBulk & @CR)
EndFunc   ;==>_DestroyBulkInput
Edited by BrewManNH

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 comment
Share on other sites

using this workaround code. it will accomplish what I need

If $iPushed >= 0 Then $iPushed += 1

ConsoleWrite("ipushed = " & $iPushed & "  ")
If Mod($iPushed, 2) Then ; if even
; create
_HideTopControls($aControls)
_CreateBulkInput($oGUI, $sHeaderText, $iWidth - 450, 50, $iWidth - 100, $iHeight - 140)
Else
; destory
_DestroyBulkInput($cBulk)
_ShowTopControls($aControls)
EndIf
Link to comment
Share on other sites

$cBulk = ""

EDIT: It might work better if you used the Handle of the control (GUICtrlGetHandle($cBulk)) instead of its control ID, not sure I haven't tried it, but the UDF functions generally work better with controls created using them than with native controls.

The native functions which have a UDF counterpart will convert the control id (if passed) to the handle (using GUICtrlGetHandle,) but in terms of RichEdit controls there is no native counterpart (apart from GUICtrlCreateEdit, but he's not using that) so this wouldn't work. I've spent a while looking around the UDFs since doing the help file!

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 comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...