Sign in to follow this  
Followers 0

[SOLVED] Buttons placed behind Tab item


9 posts in this topic

Posted (edited)

The script below demonstrates my problem. If I run this script all icon buttons save the one created before the tab control are placed behind the tab and only the icon shows. I've tried everything I could think of, setting different styles, states etc. to the GUI, tab, button, icon... Well you get the picture. Nothing has worked thusfar and I'm at a complete loss here. Any help would be much appreciated.

This will create a GUI with two tabs and four buttons of which three are behind the tab control.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Local $iExit, $iGUIMsg

GUICreate('Problem...', 180, 150, -1, -1, $GUI_SS_DEFAULT_GUI, $WS_EX_TOPMOST)
; This button will show correctly.
$iExit = _IconOnButton('Close', 10, 120, 160, 20, 200)
; Create tab.
GUICtrlCreateTab(5, 5, 120, 140)
; First item and button with missing text and borders.
GUICtrlCreateTabItem('One')
_IconOnButton('First', 10, 30, 160, 20, 3)
; Second item and button with missing text and borders.
GUICtrlCreateTabItem('Two')
_IconOnButton('Second', 10, 60, 160, 20, 24)
; Close tab control.
GUICtrlCreateTabItem('')
; Another button with missing text and borders.
_IconOnButton('Third', 10, 90, 160, 20, 1001)

GUISetState(@SW_SHOW)
While 1
    $iGUIMsg = GUIGetMsg()
    Switch $iGUIMsg
        Case $iExit, $GUI_EVENT_CLOSE ; Exit
            Exit
    EndSwitch
WEnd

; By Valuater
Func _IconOnButton($BItext, $BIleft, $BItop, $BIwidth, $BIheight, $BIconNum, $BIDLL = 'shell32.dll')
    GUICtrlCreateIcon($BIDLL, $BIconNum, $BIleft + 5, $BItop + (($BIheight - 16) / 2), 16, 16)
    GUICtrlSetState( -1, $GUI_DISABLE)
    Local $XS_btnx = GUICtrlCreateButton($BItext, $BIleft, $BItop, $BIwidth, $BIheight, $WS_CLIPSIBLINGS)
    Return $XS_btnx
EndFunc
Edited by dany

Share this post


Link to post
Share on other sites



Posted

It's because of your $WS_CLIPSIBLINGS style for buttons.

Share this post


Link to post
Share on other sites

Posted

Thanks for the reply. But I wish it was that easy...

Take out $WS_CLIPSIBLINGS and the buttons don't have icons. Not what I want. Reverse the order of the creation in _IconOnButton (button first, then the icon) and the icons do show but disappear as soon as the button's clicked.

Share this post


Link to post
Share on other sites

Posted

Why don't you use $BS_ICON style for buttons and set the icon directly to button?

Share this post


Link to post
Share on other sites

Posted

Afaik that doesn't allow for buttons with text, only icon buttons. Those do work btw...

Share this post


Link to post
Share on other sites

Posted

dany,

This works for me: :)

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiImageList.au3>
#include <GuiButton.au3>

GUICreate('Problem...', 180, 150, -1, -1, $GUI_SS_DEFAULT_GUI, $WS_EX_TOPMOST)
$iExit = _IconOnButton('Close', 10, 120, 160, 20, 200)
; Create tab.
GUICtrlCreateTab(5, 5, 120, 110)
GUICtrlCreateTabItem('One')
_IconOnButton('First', 10, 30, 100, 20, 3)
GUICtrlCreateTabItem('Two')
_IconOnButton('Second', 10, 60, 100, 20, 24)
; Close tab control.
GUICtrlCreateTabItem('')
_IconOnButton('Third', 10, 90, 160, 20, 1001)

GUISetState(@SW_SHOW)
While 1
    $iGUIMsg = GUIGetMsg()
    Switch $iGUIMsg
        Case $iExit, $GUI_EVENT_CLOSE ; Exit
            Exit
    EndSwitch
WEnd

Func _IconOnButton($BItext, $BIleft, $BItop, $BIwidth, $BIheight, $BIconNum, $BIDLL = 'shell32.dll')

    $cButton = GUICtrlCreateButton($BItext, $BIleft, $BItop, $BIwidth, $BIheight)
    $hImageList = _GUIImageList_Create(32, 32, 5, 3)
    _GUIImageList_AddIcon($hImageList, $BIDLL, $BIconNum, True)
    _GUICtrlButton_SetImageList($cButton, $hImageList)
    Return $cButton

EndFunc

The icon indices seem a little off - but I leave finding the correct ones to you. ;)

M23

Share this post


Link to post
Share on other sites

Posted

Something like this?

#include 
#include 
#include 
#include 
#include 

Local $iExit, $iGUIMsg

GUICreate('No Problem...', 180, 150, -1, -1, $GUI_SS_DEFAULT_GUI, $WS_EX_TOPMOST)

Global $iExit = GUICtrlCreateButton('Close', 10, 120, 160, 20)
_GUICtrlButton_SetImageList(-1, _GetImageListHandle("shell32.dll", -200, False))

; Create tab.
GUICtrlCreateTab(5, 5, 120, 140)
GUICtrlCreateTabItem('One')

GUICtrlCreateButton('First', 10, 30, 160, 20)
_GUICtrlButton_SetImageList(-1, _GetImageListHandle("shell32.dll", -3, False))

GUICtrlCreateTabItem('Two')
GUICtrlCreateButton('Second', 10, 60, 160, 20)
_GUICtrlButton_SetImageList(-1, _GetImageListHandle("shell32.dll", -24, False))

GUICtrlCreateTabItem('') ; Close tab control.


GUICtrlCreateButton('Third', 10, 90, 160, 20)
_GUICtrlButton_SetImageList(-1, _GetImageListHandle("shell32.dll", -1001, False))

GUISetState(@SW_SHOW)
While 1
    $iGUIMsg = GUIGetMsg()
    Switch $iGUIMsg
        Case $iExit, $GUI_EVENT_CLOSE ; Exit
            Exit
    EndSwitch
WEnd

; using image list to set 1 image and have text on button
Func _GetImageListHandle($sFile, $nIconID = 0, $fLarge = False)
    Local $iSize = 16
    If $fLarge Then $iSize = 32

    Local $hImage = _GUIImageList_Create($iSize, $iSize, 5, 3)
    If StringUpper(StringMid($sFile, StringLen($sFile) - 2)) = "BMP" Then
        _GUIImageList_AddBitmap($hImage, $sFile)
    Else
        _GUIImageList_AddIcon($hImage, $sFile, $nIconID, $fLarge)
    EndIf
    Return $hImage
EndFunc   ;==>_GetImageListHandle

Share this post


Link to post
Share on other sites

Posted

funkey,

Great minds, eh? :D

M23

Share this post


Link to post
Share on other sites

Posted (edited)

AWESOME

Much appreciated, gentlemen. Funkey, your #includes are missing, but I get the point. I definetely need to read up on the standard lib.

Again, Thanks!

Edited by dany

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
Sign in to follow this  
Followers 0