Rfsvieira

Gui - tabs duplicate image in all

3 posts in this topic

Hello, i have read the wiki for tabs, and search in some sites for code ideas, and get what i have now

1st i have the broblem that wen i choice one iten the image appears in all tabs

i resolved that with the -----GUISwitch($GUI, $TabID)----

Now i have a problema that wen i choice the iten the image doesn t appear only if i change tab i go back to the tab

Any idea?

#include <GuiConstantsEx.au3>
#include <GuiTab.au3>


Global $dir =("FULL\")

$GUI = GUICreate("Test Script", 500, 500)

$hTab = GUICtrlCreateTab(5, 10, 500, 450)

$Tab1 = GUICtrlCreateTabItem("Tab1")

$Tab2 = GUICtrlCreateTabItem("Tab2")

$Pic1 = GUICtrlCreatePic("", 15, 202, 25, 25); pic coordenades and size

$Pic2 = GUICtrlCreatePic("", 15, 234, 25, 25)
$Pic3 = GUICtrlCreatePic("", 15, 264, 25, 25)

$Combo3 = GUICtrlCreateCombo("Corpo", 47, 268, 65, 25); combobox place

GUICtrlSetFont(-1, 8, 400, 0, "Arial")
jcorpo($combo3)                                         ; getdata funcion

$Combo2 = GUICtrlCreateCombo("Corpo", 47, 238, 65, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
jcorpo($combo2)
$Combo1 = GUICtrlCreateCombo("Corpo", 47, 206, 65, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
jcorpo($combo1)

$Tab3 = GUICtrlCreateTabItem("Tab3")

;GUICtrlSetState($Tab2, $GUI_SHOW); tessting code



GUICtrlCreateTabItem("")

$Switch_Button = GUICtrlCreateButton("Switch Next", 20, 470, 80, 20)

GUISetState(@SW_SHOW, $GUI)

While 1
    Switch GUIGetMsg()

        Case $combo1
            GUISwitch($GUI, $Tab2)
            img1($combo1, $Pic1, 15, 202)
            GUISwitch($GUI)
        case $combo2
            img1($combo2, $pic2, 15, 234)
        Case $combo3
            img1($combo3, $Pic3, 15, 264)

        Case $GUI_EVENT_CLOSE
            Exit
        Case $Switch_Button

            $iCurrent_TabIndex = _GUICtrlTab_GetCurSel($hTab)
            $iNext_TabIndex = $iCurrent_TabIndex



            Switch $iCurrent_TabIndex

                Case 0, 1
                    $iNext_TabIndex += 1
                Case 2
                    $iNext_TabIndex = 0
            EndSwitch



            _GUICtrlTab_SetCurSel($hTab, $iNext_TabIndex)
    EndSwitch

WEnd





Func img1($var, $imp, $x1, $y1)
;
$Read = GUICtrlRead($var)
If $Read = "A" Then

    $imp = GUICtrlCreatePic($dir & "A.bmp", $x1, $y1, 25, 25)
EndIf

If $Read = "B" Then

    $imp = GUICtrlCreatePic($dir & "B.bmp", $x1, $y1, 25, 25)
EndIf

If $Read = "C" Then

    $imp = GUICtrlCreatePic($dir & "C.bmp", $x1, $y1, 25, 25)
EndIf

If $Read = "" Then

    $imp = GUICtrlCreatePic($dir & "", $x1, $y1, 25, 25)

;Else

;   $imp = GUICtrlCreatePic($dir & "null.bmp", $x1, $y1, 25, 25)
EndIf

EndFunc

Func jcorpo($varcomb)
GUICtrlSetData($varcomb, "A|B|C")
EndFunc



func _exit()
    Exit
EndFunc

 

Share this post


Link to post
Share on other sites



Rfsvieira,

No need for any GUISwitch lines if you do it the right way - this works fine when I test it with my images:

#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
#include <GuiComboBox.au3>

Global $sDir = "FULL\"

$hGUI = GUICreate("Test Script", 500, 500)

$cTab = GUICtrlCreateTab(5, 10, 500, 450)

$cTab_0 = GUICtrlCreateTabItem("Tab 0") ; Tabs start at 0 so I always do the same

$cTab_1 = GUICtrlCreateTabItem("Tab 1")

$cPic_1 = GUICtrlCreatePic("", 15, 202, 25, 25); pic coordenades and size
$cPic_2 = GUICtrlCreatePic("", 15, 234, 25, 25)
$cPic_3 = GUICtrlCreatePic("", 15, 264, 25, 25)

$cCombo_3 = GUICtrlCreateCombo("", 47, 268, 65, 25)
_GUICtrlComboBox_SetCueBanner($cCombo_3, "Corpo") ; Use this to get initial text that does not appear in the dropdown list
GUICtrlSetFont($cCombo_3, 8, 400, 0, "Arial")
_jcorpo($cCombo_3)
$cCombo_2 = GUICtrlCreateCombo("", 47, 238, 65, 25)
_GUICtrlComboBox_SetCueBanner($cCombo_2, "Corpo")
GUICtrlSetFont($cCombo_2, 8, 400, 0, "Arial")
_jcorpo($cCombo_2)
$cCombo_1 = GUICtrlCreateCombo("", 47, 206, 65, 25)
_GUICtrlComboBox_SetCueBanner($cCombo_1, "Corpo")
GUICtrlSetFont($cCombo_1, 8, 400, 0, "Arial")
_jcorpo($cCombo_1)

$cTab_2 = GUICtrlCreateTabItem("Tab 2")

GUICtrlCreateTabItem("")

$cSwitch = GUICtrlCreateButton("Switch Next", 20, 470, 80, 20)

GUISetState(@SW_SHOW, $hGUI)

While 1
    Switch GUIGetMsg()

        Case $GUI_EVENT_CLOSE
            Exit
        Case $cCombo_1
            _Image($cCombo_1, $cPic_1)
        Case $cCombo_2
            _Image($cCombo_2, $cPic_2)
        Case $cCombo_3
            _Image($cCombo_3, $cPic_3)
        Case $cSwitch

            ; Much more elegant way to move to the next tab
            _GUICtrlTab_SetCurSel($cTab, Mod(_GUICtrlTab_GetCurSel($cTab) + 1, 3))
    EndSwitch



WEnd



Func _Image($cCombo, $cPic)

    Switch GUICtrlRead($cCombo)
        Case "A"
            ; Do not recreate the image - just set a new image in the picture control 
            GUICtrlSetImage($cPic, $sDir & "A.bmp")
        Case "B"
            GUICtrlSetImage($cPic, $sDir & "B.bmp")
        Case "C"
            GUICtrlSetImage($cPic, $sDir & "C.bmp")
    EndSwitch



EndFunc   ;==>_Image

Func _jcorpo($cCombo)
    GUICtrlSetData($cCombo, "A|B|C")
EndFunc   ;==>_jcorpo



Func _exit()
    Exit
EndFunc   ;==>_exit

Please ask if you have any questions.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______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

 

Share this post


Link to post
Share on other sites

Perfect very very thanks

i have another problema with designt and moviment gui and child gui

i wll post

very thanks fo your time

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • anusha
      By anusha
      Hi I have jus started using auto-it . Please correct me if I'm wrong.
      I need to read data from an input in text box and search in excel file and return value in next column of matched cell on GUI.
      I have written below code but i cannot use variable which has data stored. it works only when search string is hard coded.
      Please help out.
       
      Example()
      Func Example()
      Local $GuiMain = GUICreate("EXCEL TEST", 399, 180) ;creates main GUI
      ;~ Local $idOK = GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
      Local $iWidthCell = 70
      Local $idLabel = GUICtrlCreateLabel("PART NUMBER", 10, 30, $iWidthCell,50)
      Local $RUN_1 = GUICtrlCreateButton("OK", 70, 70, 85, 25)
      Local $Input_1 = GUICtrlCreateInput("PART NUMBER", 100, 20, 120, 20)
      Local $sMenutext = GUICtrlRead($Input_1, 1)
      GUISetState(@SW_SHOW, $GuiMain)

          While 1
          $MSG = GUIGetMsg()
          Select
              Case $MSG = $GUI_EVENT_CLOSE
                  Exit
              Case $MSG = $RUN_1
                  Local $oAppl = _Excel_Open()

      Local $sFilePath1 = "D:\Anu_WorkFolder\Components.xlsx"
      Local $oWorkbook = _Excel_BookOpen($oAppl, $sFilePath1, Default, Default, True)
      Local $aResult = _Excel_RangeFind($oWorkbook, $sMenutext , Default, Default, $xlWhole)
    • Miliardsto
      By Miliardsto
      Hello.
      Drag option works only on parent window but as we can see on the parent gui is showed up child gui (on the right side with the color).
      Desired action is when we want to drag whole program we can also drag child gui and child gui will drag with parent gui.
      How to do this?
       
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Array.au3> GUIRegisterMsg($WM_NCHITTEST, "_NCHITTEST") $hGUI = GUICreate("Test", 500, 500, -1, -1) $cButton_0 = GUICtrlCreateButton("Child 0", 10, 10, 80, 30) $cButton_1 = GUICtrlCreateButton("Child 1", 10, 50, 80, 30) $cButton_2 = GUICtrlCreateButton("Child 2", 10, 90, 80, 30) GUISetState(@SW_SHOW, $hGUI) ; guis Global $hChild_[3] Global $countGUI = UBound($hChild_) - 1 ;MsgBox("","",$countGUI) ; licznik dla GUI Global $gui = 0 $hChild_[0] = GUICreate("Child 0", 350, 300, 150, 0, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) GUISetBkColor(0xFF0000) GUISetState(@SW_SHOW, $hChild_[0]) $hChild_[1] = GUICreate("Child 1", 350, 300, 150, 0, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) GUISetBkColor(0x00FF00) GUISetState(@SW_HIDE, $hChild_[1]) $hChild_[2] = GUICreate("Child 2", 350, 300, 150, 0, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) GUISetBkColor(0x0000FF) GUISetState(@SW_HIDE, $hChild_[2]) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $cButton_0 _All_Hide() GUISetState(@SW_SHOW, $hChild_[0]) $gui = 0 Case $cButton_1 _All_Hide() GUISetState(@SW_SHOW, $hChild_[1]) $gui = 1 Case $cButton_2 _All_Hide() GUISetState(@SW_SHOW, $hChild_[2]) $gui = 2 EndSwitch WEnd Func _All_Hide() GUISetState(@SW_HIDE, $hChild_[0]) GUISetState(@SW_HIDE, $hChild_[1]) GUISetState(@SW_HIDE, $hChild_[2]) EndFunc Func _NCHITTEST($hWnd, $uMsg, $wParam, $lParam) If $hWnd = $hGUI Then Local $aPos = WinGetPos($hWnd) If Abs(BitAND(BitShift($lParam, 16),0xFFFF)- $aPos[1]) < 500 Then Return $HTCAPTION EndIf Return $GUI_RUNDEFMSG EndFunc  
    • IAMK
      By IAMK
      Hello,
       
      I have a script which uses a GUI with two buttons. It gets shown and hidden., and pressing the buttons (including their hotkeys) highlights the button, making you able to press enter the next time.
      However, I don't want that.
       
      I've tried using WinActivate() to make enter do things on another program, but the enter is still tied to the AutoIT GUI (which still has the button highlighted).
       
      Here's the important part of my code:
      $MY_GUI = GUICreate("Check.exe", 400, 300, ((@DesktopWidth / 2) - 200), -500) WinSetOnTop($MY_GUI, "", 1) ;Keeps the window on the top. $Button1 = GUICtrlCreateButton("Pass (Ctrl+P)", 40, 250, 120, 40, $WS_GROUP) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Button2 = GUICtrlCreateButton("Fail (Ctrl+F)", 240, 250, 120, 40, $WS_GROUP) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $GUIText = GUICtrlCreateLabel("", 20, 10, 360, 230) GUICtrlSetFont(-1, 13, 400, 0, "MS Sans Serif") GUICtrlSetData($GUIText, Execute($stepMessage[$step])) $showGUI = "True" GUISetState(@SW_SHOW) While($showGUI = "True") $buttonPressed = GUIGetMsg() Switch $buttonPressed Case $Button1 ;Pass $pass = "True" $buttonPressed = 0 $showGUI = "False" GUISetState(@SW_HIDE) Case $Button2 ;Fail $buttonPressed = 0 $showGUI = "False" GUISetState(@SW_HIDE) While($message = "") $message = InputBox("Check.exe", "Please enter the reason the step failed." & @CRLF, "", "", 300, 200, ((@DesktopWidth / 2) - 150), -400) WEnd Return $message EndSwitch WEnd Local $pass = "False" ;Whether "Pass" or "Fail" was pressed. Local $failLog = xxxfunc($pass) ;Returns a message to log if the step failed. ##THIS CALLS THE CODE SNIPPET ABOVE## FileWrite($file, _Now() & ": Step " & $step & getStatus($pass) & "and took " & Ceiling(TimerDiff($timer) / 1000) & " seconds." & @CRLF) If($failLog <> "") Then FileWrite($file, "Logged comment: " & $failLog & @CRLF) EndIf WinActivate("[TITLE:ProgramName]") ;Hotkeys: HotKeySet("^{p}", "pressPass") HotKeySet("^{f}", "pressFail") Func pressPass() $buttonPressed = $Button1 EndFunc Func pressFail() $buttonPressed = $Button2 EndFunc  
      The GUI's button/hotkey pressing works correctly.
      The same WinActivate code works in another script of mine.
      Together, WinActivate is not take "Active" away from the GUI's last-pressed button. How do I fix this?
       
      Thank you in advance.
    • nassausky
      By nassausky
      Hi all,
       
      Anyone have any idea how to close all open tabs except a specific one I manually open.  Assuming I don't know what is open in all the tabs except just the one I want to keep open.
       
      I didn't want to use sendkeys and I was trying to use the following code to list the title (or url) of the 3 open tabs and  after I got that part working I would just close the other 2. This sample only displays the title of the first open tab
      #include <IE.au3> Const $ie_new_in_tab = 0x0800 $oIE = _IECreate("https://www.autoitscript.com") __IENavigate($oIE, "https://www.autoitscript.com/forum/", 1, $ie_new_in_tab) ;(obj,url,wait,param) __IENavigate($oIE, "https://www.google.com/", 1, $ie_new_in_tab) ;(obj,url,wait,param) Local $aIE[1] $aIE[0] = 0 Local $i = 1, $oIE While 1     $oIE = _IEAttach("", "instance", $i)     If @error = $_IEStatus_NoMatch Then ExitLoop     ConsoleWrite(_IEPropertyGet($oIE, "title") & @CRLF)     ReDim $aIE[$i + 1]     $aIE[$i] = $oIE ;each item holds object     $aIE[0] = $i ;first item holds count     $i += 1 WEnd MsgBox($MB_SYSTEMMODAL, "Browsers Found", "Number of browser instances in the array: " & $aIE[0]) ; This doesn't return the list of tabs in the console just the first tab  
      Thanks for any and all help
    • fatpig
      By fatpig
      Dear AutoIT Community.
      I am currently working on a program that will display lots of images in a scroll down GUI.
      I create the GUI based on the number of images, which works fine.
      But all images I place using GuiCtrlCreatePic above a threshold of around 32000 pixels (cant say exactly) are placed at negative locations and finally will reach 0 again
      and will then populate on top of the images placed there before.
      For $i = 1 To $Images[0] ; Get picture dimensions $hImage = _GDIPlus_ImageLoadFromFile($ImgRep & $Images[$i]) $iX = _GDIPlus_ImageGetWidth($hImage) $iY = _GDIPlus_ImageGetHeight($hImage) _GDIPlus_ImageDispose($hImage) ; Resize & place images in GUI $Pic[$i] = GUICtrlCreatePic($ImgRep & $Images[$i], $Spacer, Round($yPos, 0), $MaxImgWidth, $MaxImgWidth * ($iY / $iX)) $yPos = $yPos + $MaxImgWidth * ($iY / $iX) + $Spacer $log = $log & "|" & $yPos $currentlut = $Images[1] Next I have found a limit at 32767 pixels for some GUI elements when googling around.
      Can someone tell me how to circumvent that?
      thanks!
      cheers
      Felix