Hallo,
ich habe mehrere überlappende Controls ähnlich den Spielkarten á la Windows Solitär mit GUICtrlCreatePic erstellt. Wie kann ich nun steuern, welche Karte sich im Vordergrund, an 2. Stelle, an 3. Stelle, etc. befinden soll?
Gruß,
Styrx
Hallo,
ich habe mehrere überlappende Controls ähnlich den Spielkarten á la Windows Solitär mit GUICtrlCreatePic erstellt. Wie kann ich nun steuern, welche Karte sich im Vordergrund, an 2. Stelle, an 3. Stelle, etc. befinden soll?
Gruß,
Styrx
du suchst höchstwahrscheinlich guictrlsetstate
Hallo Styrx,
zu einem durch die Reihenfolge des createns, nachträlich mit
[autoit]guictrlsetstate[$pic[$i],$GUI_ONTOP
[/autoit]mf (Auto)Bert
...dann bin ich so frei und zeige mal den Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Color.au3>
#Include <Array.au3>
Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Local $hGUI, $hPics[100][5]
Local $Search, $File
Local $Color, $i
Local $Pos[4]
$hGUI = GUICreate("", 1024, 600, 0, 0, $WS_POPUP)
GUISetBkColor(0x000000)
GUISetState(@SW_SHOW, $hGUI)
$Pos[0] = -1
$Pos[1] = -1
$Pos[2] = -1
$Pos[3] = -1
$Search = FileFindFirstFile("Card*.jpg")
If $search = -1 Then
MsgBox(0, "Error", "Keine Karten gefunden!")
Exit
EndIf
$i = 0
While 1
$File = FileFindNextFile($Search)
If @error Then ExitLoop
$i += 1
$hPics[$i][0] = GUICtrlCreatePic($File, 0, 0, 246, 343)
If $hPics[$i][0] > 0 Then
$Color = _ColorGetRGB(PixelGetColor(244, 2, $hGUI))
$hPics[$i][1] = _GetColor($Color)
If $hPics[$i][1] < 4 Then
$Pos[$hPics[$i][1]] += 1
$hPics[$i][2] = $Pos[$hPics[$i][1]]
GUICtrlSetPos($hPics[$i][0], $hPics[$i][1]*256+5, $hPics[$i][2]*30+3)
EndIf
EndIf
GUICtrlSetState($hPics[$i][0], $GUI_HIDE)
WEnd
FileClose($search)
[/autoit] [autoit][/autoit] [autoit]; bis hierhin werden die Karten schon mal wunderbar erzeugt und positioniert
[/autoit] [autoit][/autoit] [autoit]For $i = 0 to UBound($hPics) - 1
GUICtrlSetState($hPics[$i][0], $GUI_SHOW)
Next
; nun werden sie auch in ihrer ausgangsposition wunderbar in 4 Spalten angezeigt
[/autoit] [autoit][/autoit] [autoit]_ArrayDisplay($hPics)
[/autoit] [autoit][/autoit] [autoit]For $i = 0 to UBound($hPics) - 1
GUICtrlSetState($hPics[$i][0], $GUI_ONTOP)
sleep(500)
Next
; aber die karten nun einfach mal nacheinander in den vordergrund zu holen funktioniert nicht
; und wie sich ein Z-Index à la HTML nutzen ließe weiß ich auch noch nicht.
_ArrayDisplay($hPics)
[/autoit] [autoit][/autoit] [autoit]GUIDelete()
[/autoit] [autoit][/autoit] [autoit]Func _GetColor(ByRef $Color)
Select
Case $Color[0]>$Color[1]+64 and $Color[2]>$Color[1]+64 and abs($Color[0]-$Color[2])<16
Return 0
Case $Color[1]>$Color[0]+64 and $Color[1]>$Color[2]+64 and abs($Color[0]-$Color[2])<16
Return 0
Case $Color[0]>$Color[1]+64 and $Color[0]>$Color[2]+64 and abs($Color[1]-$Color[2])<16
Return 1
Case $Color[0]<192 and abs($Color[0]-$Color[1])<16 and abs($Color[1]-$Color[2])<16
Return 2
Case $Color[2]>$Color[0]+64 and $Color[2]>$Color[1]+64 and abs($Color[0]-$Color[1])<16
Return 1
Case $Color[0]>$Color[2]+64 and $Color[1]>$Color[2]+64
Return 3
Case Else
Return 4
EndSelect
EndFunc
Hallo Styrx,
du solltest noch deine Kartensammlun anhängen. @BuFix hat im Forum folgendes Skriptbeispiel Spielkarten gepostet, allerdings einen ganz anderen Lösungsansatz mit GDI+,
mfg (Auto)Bert
Hier der gewünschte Anhang:
..., allerdings einen ganz anderen Lösungsansatz mit GDI+
Mit GDI+ hab ich schon eine funktionierende Version, die allerdings enorm träge ist. Der Bildaufbau dauert hier viel zu lang; insbesondere auf meinen Netbook, für den die Sache letztlich konzipiert wurde.
Gruß,
Styrx