GDIPlus 7-Segment-Anzeige

  • Hallo,
    als kleine GDIPlus-Übung habe ich mal ein Programm geschrieben, das per GDIPlus 'ne 7-Segment-Anzeige erstellt, hat viel Arbeit gemacht. Daraus möchte ich dann eine Digitaluhr erstellen. Über Kommentare oder Kritik würde ich mich freuen!
    Hier das Script:

    Spoiler anzeigen
    [autoit]


    ;================================================
    ;Scripted by xp_fan
    ;================================================
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $hGUI, $hWnd, $hGraphic, $aPoints1[7][2], $aPoints2[7][2], $aPoints3[7][2], $aPoints4[7][2], $aPoints5[7][2], $aPoints6[7][2], $aPoints7[7][2], $Radio[10]

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

    $hGUI = GUICreate("GDI+ 7Segment-Anzeige", 230, 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)
    ;Segment erstellen
    _horizontal(20, 20)
    _horizontal(20, 83)
    _horizontal(20, 147)
    _vertikal(17, 20)
    _vertikal(17, 86)
    _vertikal(82, 20)
    _vertikal(82, 83)
    ;Ende Segment
    For $i = 1 To 5
    $Radio[$i] = GUICtrlCreateRadio($i, 130, 20 * $i)
    Next
    $Radio[6] = GUICtrlCreateRadio("6", 160, 20)
    $Radio[7] = GUICtrlCreateRadio("7", 160, 40)
    $Radio[8] = GUICtrlCreateRadio("8", 160, 60)
    $Radio[9] = GUICtrlCreateRadio("9", 160, 80)
    $Radio[0] = GUICtrlCreateRadio("0", 160, 100)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_PenDispose($hPen1)
    _GDIPlus_PenDispose($hPen2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    Case $Radio[0]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(17, 20, 0xFFFF0000)
    _vertikal(17, 86, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[1]
    _Black1()
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[2]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 83, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(17, 86, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    Case $Radio[3]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 83, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[4]
    _Black1()
    _horizontal(20, 83, 0xFFFF0000)
    _vertikal(17, 20, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[5]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 83, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(17, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[6]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 83, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(17, 20, 0xFFFF0000)
    _vertikal(17, 86, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[7]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[8]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 83, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(17, 20, 0xFFFF0000)
    _vertikal(17, 86, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    Case $Radio[9]
    _Black1()
    _horizontal(20, 20, 0xFFFF0000)
    _horizontal(20, 83, 0xFFFF0000)
    _horizontal(20, 147, 0xFFFF0000)
    _vertikal(17, 20, 0xFFFF0000)
    _vertikal(82, 20, 0xFFFF0000)
    _vertikal(82, 83, 0xFFFF0000)
    EndSwitch
    WEnd

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

    Func _Black1()
    _horizontal(20, 20, 0xFFCFCFCF)
    _horizontal(20, 83, 0xFFCFCFCF)
    _horizontal(20, 147, 0xFFCFCFCF)
    _vertikal(17, 20, 0xFFCFCFCF)
    _vertikal(17, 86, 0xFFCFCFCF)
    _vertikal(82, 20, 0xFFCFCFCF)
    _vertikal(82, 83, 0xFFCFCFCF)
    EndFunc ;==>_Black

    [/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.de/wcf/attachment/7099/

  • Hallo,
    du hast dir viel Mühe gegeben! :thumbup:
    Einige Tips habe ich, die du umsetzen solltest/könntest:

    • eigentlich brauchst du nur 2 Segmente, ein waagrechtes und ein senkrechtes. Diese Segmente könntest du dann an ihre jeweilige Position kopieren.
    • Beim Anzeigen der Ziffern würde ich (aufgrund des starken Kontrastes zwischen den "schwarzen" Segmenten und dem Hintergrund) die schwarzen Segmentteile eher in einem dunklen Grau anzeigen
    • um den LCD (Langsames Cristall Display ^^) - Effekt zu verstärken, wäre eine Überblendung (Schwarz/Grau nach Rot) klasse!
  • Vielen, vielen Dank für deine Tipps, hab' ich alle bis auf einen eingebaut (habe ersten Post aktualisiert)!!!