Pic Controls verzerren sich beim bewegen, wenn sie hintereinander sind

  • Hallo.
    ich wusste nicht, wie ich die Überschrift hätte formulieren sollen, deshalb ist sie etwas verunglückt.

    Ich möchte ein Kartenspiel programmieren, nämlich Durak (vielleicht kennt es ja jemand).
    Ich bin gerade dabei, dass die Karten angezeigt werden und beim rübergehen mit der Maus (Hover) sich leicht nach oben verschieben, damit man die aktuelle Auswahl besser sieht. In dem Beispiel Script geht es erstmal von 7-As. Der Hovereffekt funktioniert, allerdings verzerren sich die Bilder, da sie übereinander gelagert sind. Wenn ich die Bilder mit GDI+ in das Cnontrol eingebunden habe bekam ich den gleichen Effekt.

    Das Script liegt als Anhang vor.

    Beim As klappt das Hovern, bei allen anderen nicht, da sie von anderen Karten überlappt werden. Wenn die 7 zum Beispiel gehovert werden soll, soll die Karte immernoch hinter der 8 sein (also nicht in den Vordergrund treten), aber halt nach oben verschoben.

    Hat jemand eine Idee wie ich den Effekt richtig hinbekomme? Vielleicht jedesmal beim Hovern die Karten neu ins Control einbinden, wobei das keine schöne Lösung wäre.

    Danke schonmal,
    NoName

  • Anfängertip: Also mit

    [autoit]

    #include <WindowsConstants.au3>

    [/autoit]

    und dem Stil

    [autoit]

    $WS_CLIPSIBLINGS

    [/autoit]

    bei

    [autoit]

    GUICreatePic

    [/autoit]

    verzerren sich die Pics nicht. Leider wird dann aber automatisch umgekehrt sortiert und das Hovern klappt dementsprechend auch nicht mehr wie gewünscht. 8|

    Vielleicht gibts ja aber noch eine andere Lösung für das Darstellungsproblem.?

    Grüße,
    t002

  • meinst du so??
    mnusst die sleep halt noch ein bisschen anpassen

    Spoiler anzeigen
    [autoit]

    Dim $vOwnCards[33][3]; [0][0] = number of cards, [x][0] = x-pos on gui, [x][1] = y-pos on gui
    Dim $vCards[32] = ["p7", "p8", "p9", "p10", "pbube", "pdame", "pkoenig", "pas", "kr7", "kr8", "kr9", "kr10", "krbube", "krdame", "krkoenig", "kras", "k7", "k8", "k9", "k10", "kbube", "kdame", "kkoenig", "kas", "h7", "h8", "h9", "h10", "hbube", "hdame", "hkoenig", "has"]
    Dim $vLatestHover[3] ;contains the latest hovered card

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

    $vOwnCards[0][0] = 8

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

    Dim $vGUIWidth = 585, $vGUIHeight = 400
    $hGUI = GUICreate("Durak", $vGUIWidth, $vGUIHeight)
    GUISetBkColor(0xBDD7D9)

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

    Dim $vOwnCardTop = 100
    For $i = 1 To 8
    Assign("hGUICard" & $i, GUICtrlCreatePic("", ($i - 1) * 15 + 10, $vOwnCardTop, 100, 140))
    $vOwnCards[$i][0] = ($i - 1) * 15 + 10
    $vOwnCards[$i][1] = $vOwnCardTop
    Next

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

    GUISetState()

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

    ;Probekarten erstellen
    For $i = 1 To 8
    _D_CreateCard($i)
    Next

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    Sleep(5)

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

    ;Hovereffects on cards
    $vCurserPos = GUIGetCursorInfo($hGUI)
    If $vLatestHover[0] <> $vCurserPos[4] And $vLatestHover[0] <> "" Then
    Sleep(50)
    Guictrlsetpos($vLatestHover[0], $vLatestHover[1], $vLatestHover[2])
    $vLatestHover[0] = ""
    EndIf
    For $i = 1 To $vOwnCards[0][0]
    $vCurCTRL = Eval("hGUICard" & $i)
    If $vCurCTRL = $vCurserPos[4] Then
    GUICtrlSetPos($vCurCTRL, $vOwnCards[$i][0], $vOwnCards[$i][1] - 5)
    $vLatestHover[0] = $vCurCTRL
    $vLatestHover[1] = $vOwnCards[$i][0]
    $vLatestHover[2] = $vOwnCards[$i][1]
    ExitLoop
    EndIf
    Next
    WEnd

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

    ;Mixes all the cards
    Func _D_MixCards()
    For $o = 1 To 10000
    $No1 = Random(0.5, 32.4999) - 1
    $No2 = Random(0.5, 32.4999) - 1
    $Value1 = $vCards[$No1]
    $Value2 = $vCards[$No2]
    $vCards[$No1] = $Value2
    $vCards[$No2] = $Value1
    Next
    EndFunc

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

    ;Set image to control
    Func _D_CreateCard($v_kind)
    GUICtrlSetImage(Eval("hGUICard" & $v_kind), "cards\" & $vCards[$v_kind-1] & ".jpg")
    EndFunc

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • @t002:
    Das ist schon ein Ansatz, mal gucken ob sich da noch was machen lässt.

    @retrokid:
    Ich hatte es auch schon mit GUICtrlSetPos probiert, aber das Flackern nervt einfach extrem. Deshalb habe ich das nicht weiterverfolgt^^

    Wenn noch jemand Ideen hat, dann her damit =)