GDIPlus 7-Segment-Anzeige brauche Hilfe!

  • Hallo,
    ich habe ein Problem mit meinem GDIPlus 7-Segment-Anzeigen-Script:
    Ich habe mehrere Funktionen in dem Script, mit denen ich einen 7-Segment-Anzeige erstellen möchte. Ich habe 2 Anzeigen in dem Script, welche die Sekunden der aktuellen Uhrzeit anzeigen sollen. Das klappt auch schon ganz gut, nur wird bei der 2. Anzeige das unterste Segment ger nicht angezeigt ;( und bei der 1. nur manchmal ;( , ich kann mir das nicht erklären 8| ! Vielleicht könnt ihr euch das Script mal ansehen.

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    HotKeySet("{ESC}", "_Ende")

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

    Global $hGUI, $hWnd, $hGraphic, $aPoints1[7][2], $aPoints4[7][2]

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

    $hGUI = GUICreate("GDI+ 7Segment-Anzeige", 700, 190)
    $hWnd = WinGetHandle("GDI+ 7Segment-Anzeige")
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hPen1 = _GDIPlus_PenCreate(0xFFCFCFCF)
    $hPen2 = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hPen3 = _GDIPlus_BrushCreateSolid(0xFFCFCFCF)
    ;Segmente erstellen
    $a = _Show(20, 20, 00)
    Sleep(100)
    $b = _Show(115, 20, 00)
    ;Ende Segmente
    Sleep(100)
    While 1
    $s1 = StringLeft(@SEC, 1)
    $s2 = StringRight(@SEC, 1)
    Switch $s1
    Case 0
    _Show(20, 20, 00)
    _Show(20, 20, 0)
    Case 1
    _Show(20, 20, 00)
    _Show(20, 20, 1)
    Case 2
    _Show(20, 20, 00)
    _Show(20, 20, 2)
    Case 3
    _Show(20, 20, 00)
    _Show(20, 20, 3)
    Case 4
    _Show(20, 20, 00)
    _Show(20, 20, 4)
    Case 5
    _Show(20, 20, 00)
    _Show(20, 20, 5)
    Case 6
    _Show(20, 20, 00)
    _Show(20, 20, 6)
    Case 7
    _Show(20, 20, 00)
    _Show(20, 20, 7)
    Case 8
    _Show(20, 20, 00)
    _Show(20, 20, 8)
    Case 9
    _Show(20, 20, 00)
    _Show(20, 20, 9)
    EndSwitch
    Switch $s2
    Case 0
    _Show(115, 20, 00)
    _Show(115, 20, 0)
    Case 1
    _Show(115, 20, 00)
    _Show(115, 20, 1)
    Case 2
    _Show(115, 20, 00)
    _Show(115, 20, 2)
    Case 3
    _Show(115, 20, 00)
    _Show(115, 20, 3)
    Case 4
    _Show(115, 20, 00)
    _Show(115, 20, 4)
    Case 5
    _Show(115, 20, 00)
    _Show(115, 20, 5)
    Case 6
    _Show(115, 20, 00)
    _Show(115, 20, 6)
    Case 7
    _Show(115, 20, 00)
    _Show(115, 20, 7)
    Case 8
    _Show(115, 20, 00)
    _Show(115, 20, 8)
    Case 9
    _Show(115, 20, 00)
    _Show(115, 20, 9)
    EndSwitch
    Sleep(1000)
    WEnd

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

    Func _horizontal($x, $y, $c = 0xFFCFCFCF, $r = 0xFFCFCFCF)
    $Posx1 = $x
    $Posy1 = $y
    $aPoints1[0][0] = 6

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

    $aPoints1[1][0] = $Posx1;10
    $aPoints1[1][1] = $Posy1;200

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

    $aPoints1[2][0] = $Posx1 + 10;20
    $aPoints1[2][1] = $Posy1 - 5;195

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

    $aPoints1[6][0] = $Posx1 + 10;20
    $aPoints1[6][1] = $Posy1 + 5;205

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

    $aPoints1[3][0] = $Posx1 + 50;60
    $aPoints1[3][1] = $Posy1 - 5;195

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

    $aPoints1[5][0] = $Posx1 + 50;60
    $aPoints1[5][1] = $Posy1 + 5;205

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

    $aPoints1[4][0] = $Posx1 + 60;70
    $aPoints1[4][1] = $Posy1;200

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

    $hPen1 = _GDIPlus_PenCreate($r)
    $hPen3 = _GDIPlus_BrushCreateSolid($c)
    _GDIPlus_GraphicsDrawPolygon($hGraphic, $aPoints1, $hPen1)
    _GDIPlus_GraphicsFillPolygon($hGraphic, $aPoints1, $hPen3)
    EndFunc ;==>_horizontal

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

    Func _vertikal($x, $y, $c = 0xFFCFCFCF, $r = 0xFFCFCFCF)
    $Posx4 = $x
    $Posy4 = $y
    $aPoints4[0][0] = 6

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

    $aPoints4[1][0] = $Posx4
    $aPoints4[1][1] = $Posy4

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

    $aPoints4[2][0] = $Posx4 + 5;25
    $aPoints4[2][1] = $Posy4 + 10;30

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

    $aPoints4[3][0] = $Posx4 + 5;25
    $aPoints4[3][1] = $Posy4 + 50;80

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

    $aPoints4[4][0] = $Posx4 ;20
    $aPoints4[4][1] = $Posy4 + 60;90

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

    $aPoints4[5][0] = $Posx4 - 5;15
    $aPoints4[5][1] = $Posy4 + 50;80

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

    $aPoints4[6][0] = $Posx4 - 5;15
    $aPoints4[6][1] = $Posy4 + 10;30

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

    $hPen1 = _GDIPlus_PenCreate($r)
    $hPen3 = _GDIPlus_BrushCreateSolid($c)
    _GDIPlus_GraphicsDrawPolygon($hGraphic, $aPoints4, $hPen1)
    _GDIPlus_GraphicsFillPolygon($hGraphic, $aPoints4, $hPen3)
    EndFunc ;==>_vertikal

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

    Func _Ende()
    _GDIPlus_PenDispose($hPen1)
    _GDIPlus_PenDispose($hPen2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Ende

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

    Func _Show($x1, $y1, $Zahl = 00)
    _horizontal($x1, $y1);$x = 20, $y = 20
    _horizontal($x1, $y1 + 63)
    _horizontal($y1, $y1 + 127); Das bei der zweiten Anzeige nicht angezeigt
    _vertikal($x1 - 3, $y1)
    _vertikal($x1 - 3, $y1 + 66)
    _vertikal($x1 + 62, $y1)
    _vertikal($x1 + 62, $y1 + 63)
    Switch $Zahl
    Case 1
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 2
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt
    _vertikal($x1 - 3, $y1+ 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    Case 3
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 4
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 5
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 6
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 - 3, $y1 + 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 7
    _horizontal($x1, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 8
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 - 3, $y1 + 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 9
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 0
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000)
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 - 3, $y1 + 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 00
    _horizontal($x1, $y1)
    _horizontal($x1, $y1 + 63)
    _horizontal($y1, $y1 + 127); Das wird nicht angezeigt
    _vertikal($x1 - 3, $y1)
    _vertikal($x1 - 3, $y1 + 66)
    _vertikal($x1 + 62, $y1)
    _vertikal($x1 + 62, $y1 + 63)
    EndSwitch
    EndFunc ;==>_Show

    [/autoit]
  • Hi den ersten Fehler habe ich gefunden.

    Spoiler anzeigen
    [autoit]

    Func _Show($x1, $y1, $Zahl = 00)
    _horizontal($x1, $y1);$x = 20, $y = 20
    _horizontal($x1, $y1 + 63)
    ;_horizontal($y1, $y1 + 127); Das bei der zweiten Anzeige nicht angezeigt
    _horizontal($x1, $y1 + 127); Was fällt dir an der oberen Zeile auf ?
    _vertikal($x1 - 3, $y1)
    _vertikal($x1 - 3, $y1 + 66)
    _vertikal($x1 + 62, $y1)
    _vertikal($x1 + 62, $y1 + 63)
    Switch $Zahl
    Case 1
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 2
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($x1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 - 3, $y1+ 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    Case 3
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($x1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 4
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 5
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($x1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 6
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($x1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 - 3, $y1 + 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 7
    _horizontal($x1, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 8
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($x1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 - 3, $y1 + 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 9
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($x1, $y1 + 63, 0xFFFF0000)
    _horizontal($x1, $y1 + 127, 0xFFFF0000); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 0
    _horizontal($x1, $y1, 0xFFFF0000)
    _horizontal($y1, $y1 + 127, 0xFFFF0000)
    _vertikal($x1 - 3, $y1, 0xFFFF0000)
    _vertikal($x1 - 3, $y1 + 66, 0xFFFF0000)
    _vertikal($x1 + 62, $y1, 0xFFFF0000)
    _vertikal($x1 + 62, $y1 + 63, 0xFFFF0000)
    Case 00
    _horizontal($x1, $y1)
    _horizontal($x1, $y1 + 63)
    _horizontal($x1, $y1 + 127); Das wird nicht angezeigt <--- y durch x ersetzt
    _vertikal($x1 - 3, $y1)
    _vertikal($x1 - 3, $y1 + 66)
    _vertikal($x1 + 62, $y1)
    _vertikal($x1 + 62, $y1 + 63)
    EndSwitch
    EndFunc ;==>_Show

    [/autoit]


    So wird das Grau an der 2 Anzeige angezeigt.

    Aber so ganz rund läuft es noch net.

    MfG
    Der_Doc

    Einmal editiert, zuletzt von Der_Doc (26. Dezember 2009 um 22:47)