guictrlcreatepic

  • Hi,

    ich habe ein problem das mich riesig stört.
    Ich will ein programm gerade designen
    und links 4 verschiedene Rubriken haben

    bei drüber gehen und klicken über diese rubriken, passt
    eigentlich alles auser das die icons manchmal "blinken"
    (vorallem bei schnelleren drüber gehen mit der maus von
    einer zu anderen Rubrik),
    das stört mich total!

    kann man dieses "blinken"(eher flimmern) verhindern?

    im anhang das script.

  • Jein. so wie du es jetzt machst geht es nicht, aber du kannst es verhindern, indem zu das Bild nur neu zeichnest, wenn es notwendig ist, oder, was die schwere Methode ist, du machst das mit GDI+ ( Grafik Engine ) und dann mit nem Buffer, dann flimmerts auch nicht.

    mfg
    Hauke

  • wie meinst du nur neu zeichnen wenn notwendig?
    ich lasses nur zeichnen wenns wechselt.

    mit gdi+ komm inet zurecht
    und des problem is sobald das fenster auserhalb des
    Desktops geschoben wird verschhwindet die Zeichnung
    kann man des irgendwie verhindern?

  • Ich hätte das ganze mit einem ListView realisiert, aber deine Variante ist schöner.

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <Array.au3>
    #include <GUIImageList.au3>
    #include <GUIListView.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hListView
    Global $iItems = Random(2, 10, 1), $iItemSelection = Random(0, $iItems - 1, 1), $iItemSelection_Old = $iItemSelection
    Global $aListViewItem[$iItems], $aChildGUI[$iItems]

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hGUI = GUICreate("Vertical ListView Tab", 600, 500)
    Local $iListView = GUICtrlCreateListView("", 8, 8, 135, 484, -1, $LVS_EX_SUBITEMIMAGES)
    $hListView = GUICtrlGetHandle(-1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hImageList = _GUIImageList_Create(32, 32, 5, 3)
    For $A = 1 To $iItems
    _GUIImageList_AddIcon($hImageList, @SystemDir & "\shell32.dll", Random(1, 200, 1), 1)
    Next
    _GUICtrlListView_SetImageList($hListView, $hImageList, 0)

    [/autoit] [autoit][/autoit] [autoit]

    For $A = 0 To $iItems - 1
    $aListViewItem[$A] = GUICtrlCreateListViewItem("Tab description " & $A, $iListView)
    _GUICtrlListView_SetItemImage($hListView, $A, $A)

    [/autoit] [autoit][/autoit] [autoit]

    $aChildGUI[$A] = GUICreate("Child" & $A, 440, 484, 150, 8, $WS_CHILD, 0x10000, $hGUI)
    GUISetBkColor(Random(0x111111, 0x999999, 1))
    GUICtrlCreateButton("Button In Register " & $A, 20 + $A * 10, 20 + $A * 20, 200, 30)
    GUISetState(@SW_HIDE)
    Next
    _GUICtrlListView_SetView($hListView, 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $aChildGUI[$iItemSelection])
    _GUICtrlListView_SetItemSelected($hListView, $iItemSelection, 1)
    _GUICtrlListView_EnsureVisible($hListView, $iItemSelection)

    [/autoit] [autoit][/autoit] [autoit]

    GUISwitch($hGUI)
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    WEnd
    EndFunc ;==>_Main

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $idFrom = DllStructGetData($tNMHDR, "idFrom")
    Local $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hListView Then
    Switch $iCode
    Case -101
    $iItemSelection = _ArraySearch($aListViewItem, GUICtrlRead($idFrom))
    If $iItemSelection >= 0 And $iItemSelection_Old <> $iItemSelection Then
    GUISetState(@SW_SHOW, $aChildGUI[$iItemSelection])
    GUISetState(@SW_HIDE, $aChildGUI[$iItemSelection_Old])
    $iItemSelection_Old = $iItemSelection
    EndIf
    EndSwitch
    EndIf
    Return "GUI_RUNDEFMSG"
    EndFunc ;==>WM_NOTIFY

    [/autoit]