Text aus Edit lesen & Bild ändern GIF (Transparent ?)

  • Hallo Liebes Forum :)

    Ich habe nun vor ein DesktopWetter zu erstellen.
    Das Design wollte ich später nochmal bearbeiten, erstmal soll es klappen , dass das Bild geändert wird, wenn sich der Text ändert.

    Es kann dieser Text vorkommen.

    Code
    Meistens bewölkt
    Teils bewölkt
    Bewölkt
    Klar
    Leichter Regen
    Regen

    Und Jeder Text soll ein anderes Bild sein.

    Hier mein script :)
    Ich weiß jetzt wo ich einstellen kann , dass sich die Bilder ändern.
    Nur wenn ich das Bild ohne _GDI einbinde dann hat es immer ein doofen Rand , der mir nicht gefällt und bei einem Transparenten Gui einfach nicht passt.

    Zeile 44 - 47 wenn man das aktiviert sieht man , dass es klappt.
    Aber ab Zeile 91 wenn es Bewölkt ist , klappt es nicht.

    Freue mich wieder auf jede Antwort :)

    Edit1: bild hinzugefügt ^^

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <INet.au3>
    #include <string.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #Include <WinAPI.au3>

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

    $Trans = 250
    $Color = 0x545454
    $vGUIColor = 0x161616

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

    $INI = @ScriptDir & "\Data\Einstellungen.ini"
    $setting1 = IniRead($INI, "Setting 1", "run", "")
    $setting2 = IniRead($INI, "Setting 2", "run", "")

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

    If Not FileExists(@ScriptDir & "\Data\") Then
    DirCreate(@ScriptDir & "\Data\")
    EndIf
    If Not FileExists(@ScriptDir & "\Data\Bilder\") Then
    DirCreate(@ScriptDir & "\Data\Bilder")
    EndIf
    If Not FileExists($INI) Then
    IniWrite($INI, "Copyright", "Titel", "(C) Alexander F. 2010 - 2011")
    EndIf

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

    Global $hGui, $hImage, $hGraphic, $hImage1

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

    Local $Sonst[5] = ["Stadt: N/A", "WetterStatus: N/A", "Temperatur: N/A", "Wind: N/A", "Luftfeuchtigkeit: N/A"]
    Global $Pcode[1][2] = [[45478, "45478 Mülheim an der Ruhr"]]

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

    ; ====== GUI =======
    $hGui = GUICreate("Desktop Wetter", 200, 300, 1, 1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOOLWINDOW))
    $Menu = GUICtrlCreateContextMenu()
    $mSettings = GUICtrlCreateMenuItem("Einstellungen...", $Menu)
    $mExit = GUICtrlCreateMenuItem("Beenden...", $Menu)
    GUICtrlCreateMenuItem("", $Menu)
    $About = GUICtrlCreateMenuItem("Über Uns...", $Menu)
    GUISetBkColor($Color, $hGui)

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

    ;~ _GDIPlus_StartUp()
    ;~ $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\bewölkt mit sonne.png")
    ;~ $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    ;~ GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    ;~ Global $Gruppe[1] = [GUICtrlCreateGroup("", 4, 8, 185, 129)]
    Global $Anzeige[1] = [GUICtrlCreateEdit("", 8, 24, 150, 75, BitOR($ES_AUTOHSCROLL, $ES_NOHIDESEL,$ES_READONLY,$ES_WANTRETURN), 0)]
    GUICtrlSetFont(-1, 10)
    GUICtrlSetColor(-1, 0xFFFFFF)
    guictrlsetbkColor(-1,$Color)

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

    WinSetTrans($hGui, "", $Trans)
    GUISetState(@SW_SHOW)
    Update()
    AdlibRegister("Update", 60000) ; Jede Minute

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $mExit
    Exit
    Case $mSettings
    _Einstellungen()
    EndSwitch
    WEnd

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

    Func Update()
    For $i = 0 To 0
    SetData($i)
    Next
    WinSetTitle("Desktop Wetter", "", "Desktop Wetter | " & @HOUR & ":" & @MIN)
    EndFunc

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

    Func SetData($index)
    $aTmp = _getXML_Weather_data($Pcode[$index][0])
    If IsArray($aTmp) Then
    ;~ GUICtrlSetData($Gruppe[$index], $Pcode[$index][1])
    Switch $aTmp[1]
    Case "Klar"
    ;~ MsgBox(0,"Info","Klar")
    ;Hier bild für Klar setzen
    Case "Bewölkt"

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

    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\bewölkt mit sonne.png")
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    EndSwitch
    GUICtrlSetData($Anzeige[$index], $aTmp[1] & @CRLF & $aTmp[2] & @CRLF & $aTmp[3] & @CRLF & $aTmp[4] & @CRLF)
    Else
    ;~ GUICtrlSetData($Gruppe[$index], $Sonst[0])
    GUICtrlSetData($Anzeige[$index], $Sonst[1] & @CRLF & $Sonst[2] & @CRLF & $Sonst[3] & @CRLF & $Sonst[4] & @CRLF)
    EndIf
    EndFunc

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

    Func _getXML_Weather_data($pcode)
    $Api = "http://www.google.com/ig/api?weather=" & $pcode & '&hl=de'
    $XML_Source = _INetGetSource($Api)
    $City = _StringBetween($XML_Source, '<city data="', '"/>')
    $Wstatus = _StringBetween($XML_Source, '<condition data="', '"/>')
    $Temp = _StringBetween($XML_Source, '<temp_c data="', '"/>')
    $Wind = _StringBetween($XML_Source, '<wind_condition data="', '"/>')
    $Humidity = _StringBetween($XML_Source, '<humidity data="', '"/>')
    Local $MyWeather[5] = [$City[0], $Wstatus[0], $Temp[0] & " °C", $Wind[0], $Humidity[0]]
    Return $MyWeather
    EndFunc ;==>_getXML_Weather_data

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

    ; =========================== BILDER ====================================

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

    ; Clean up resources
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_ShutDown()

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

    ; Draw PNG image
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 16, 160)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
    EndFunc
    ; =========================== EINSTELLUNGEN ==============================

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

    Func _Einstellungen()
    ;~ $Title = "Dekstop Wetter" & " " & ""
    Opt("GUIOnEventMode", 0)
    ;~ GUISetState(@SW_DISABLE, $hGui)
    GUISetState(@SW_HIDE, $hGui)
    _SM_SetVisualStyle(1)
    $settinggui = GUICreate("Settings", 518, 190, -1, -1, -1, BitOR(0x00000080, 0x00000010), $hGui)
    _SM_SetVisualStyle(0)
    GUISetBkColor($vGUIColor, $settinggui)
    $cancel = GUICtrlCreateButton("Exit", 263, 160, 247, 20, 0)
    $save = GUICtrlCreateButton("Save", 10, 160, 247, 20, 0)
    $settings = GUICtrlCreateGroup("Einstellungen", 8, 8, 497, 145)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $label123= GUICtrlCreateLabel("Einstellungen von diesem Programm ?", 16, 32, 222, 17)
    GUICtrlSetColor(-1, 0xFFFFFF)
    $modus1 = GUICtrlCreateRadio("Setting 1 ?", 16, 56, 97, 17)
    GUICtrlSetColor(-1, 0xFFFFFF)
    $modus2 = GUICtrlCreateRadio("Setting 2 ?", 16, 80, 97, 17)
    GUICtrlSetColor(-1, 0xFFFFFF)
    $Icon1 = GUICtrlCreateIcon("", -1, 248, 104, 32, 32, BitOR($SS_NOTIFY,$WS_GROUP))
    $settingslaben2 = GUICtrlCreateLabel("Es werden noch viele weiter Funktionen folgen", 256, 64, 225, 17)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    If $setting1 = "yes" Then
    GUICtrlSetState($modus1, 1)
    ;~ GUICtrlSetState($modus1, $GUI_DISABLE)
    EndIf

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

    If $setting2 = "yes" Then
    GUICtrlSetState($modus2, 1)
    ;~ GUICtrlSetState($modus2, $GUI_DISABLE)
    EndIf

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

    GUISetState(@SW_SHOW, $settinggui)

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

    While 1
    Switch GUIGetMsg($settinggui)
    Case -3
    ExitLoop
    Case $cancel
    ExitLoop
    Case $modus1
    BitAND(GUICtrlRead($modus1), $GUI_CHECKED) ;= $GUI_CHECKED
    Case $modus2
    BitAND(GUICtrlRead($modus2), $GUI_CHECKED) ;= $GUI_CHECKED

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

    Case $save

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

    If GUICtrlRead($modus1) = 1 Then
    IniWrite($INI, "Setting 1", "run", "yes")
    $setting1 = "yes"
    Else
    IniWrite($INI, "Setting 1", "run", "no")
    $setting1 = "no"
    EndIf

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

    If GUICtrlRead($modus2) = 1 Then
    IniWrite($INI, "Setting 2", "run", "yes")
    $setting2 = "yes"
    Else
    IniWrite($INI, "Setting 2", "run", "no")
    $setting2 = "no"
    EndIf

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

    ExitLoop
    ;Exit

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

    EndSwitch
    Sleep(10)
    WEnd

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

    GUIDelete($settinggui)
    Sleep(100)

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

    GUISetState(@SW_ENABLE, $hGui)
    GUISetState(@SW_SHOW, $hGui)

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

    _SM_SetVisualStyle(1)
    EndFunc ;==>_Einstellungen

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

    Func _SM_SetVisualStyle($b_Enable);turn on or of visual styles, able to color groups, checkboxes
    Return DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", $b_Enable * 7) ; 7 = Enable, 0 = Disable
    EndFunc ;==>_SM_SetVisualStyle

    [/autoit]

    4 Mal editiert, zuletzt von tuttifrutti (7. Juni 2010 um 21:19) aus folgendem Grund: Neue Frage

    • Offizieller Beitrag

    Naja, so schwer ist das ja nicht, da könnte man auch selber drauf kommen.
    Aber trotzdem:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <INet.au3>
    #include <string.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    $Trans = 220
    $Color = 0x545454

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

    Local $Sonst[5] = ["Stadt: N/A", "WetterStatus: N/A", "Temperatur: N/A", "Wind: N/A", "Luftfeuchtigkeit: N/A"]

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

    Global $Pcode[1][2] = [[45478, "45478 Mülheim an der Ruhr"]]

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

    $hGui = GUICreate("Desktop Wetter", 200, 300, 1, 1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOOLWINDOW))
    $Menu = GUICtrlCreateContextMenu()
    $mSettings = GUICtrlCreateMenuItem("Einstellungen...", $Menu)
    $mExit = GUICtrlCreateMenuItem("Beenden...", $Menu)
    GUICtrlCreateMenuItem("", $Menu)
    $About = GUICtrlCreateMenuItem("Über Uns...", $Menu)
    GUISetBkColor($Color, $hGui)
    $Pic1 = GUICtrlCreatePic("", 16, 160, 161, 145, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))

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

    ;~ Global $Gruppe[1] = [GUICtrlCreateGroup("", 4, 8, 185, 129)]
    ;~ GUICtrlSetColor(-1, 0xFFFFFF)
    ;~ GUICtrlSetFont(-1, 10)

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

    Global $Anzeige[1] = [GUICtrlCreateEdit("", 8, 24, 177, 109, BitOR($ES_AUTOHSCROLL, $ES_NOHIDESEL,$ES_READONLY,$ES_WANTRETURN), 0)]
    GUICtrlSetFont(-1, 10)
    GUICtrlSetColor(-1, 0xFFFFFF)
    guictrlsetbkColor(-1,$Color)

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

    WinSetTrans($hGui, "", $Trans)
    WinSetTrans($Pic1, "", 150)

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

    GUISetState(@SW_SHOW)
    GUISetState(@SW_SHOW)

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

    Update()
    AdlibRegister("Update", 60000) ; Jede Minute

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $mExit
    Exit
    EndSwitch
    WEnd

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

    Func Update()
    For $i = 0 To 0
    SetData($i)
    Next
    WinSetTitle("Desktop Wetter", "", "Desktop Wetter | " & @HOUR & ":" & @MIN)
    EndFunc

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

    Func SetData($index)
    $aTmp = _getXML_Weather_data($Pcode[$index][0])
    If IsArray($aTmp) Then
    ;~ GUICtrlSetData($Gruppe[$index], $Pcode[$index][1])
    Switch $aTmp[1]
    Case "Klar"
    MsgBox(0,"Info","Klar")
    ;Hier bild für Klar setzen
    Case "Bewölkt"
    ;Hier bild für Bewölkt setzen
    EndSwitch
    GUICtrlSetData($Anzeige[$index], $aTmp[1] & @CRLF & $aTmp[2] & @CRLF & $aTmp[3] & @CRLF & $aTmp[4] & @CRLF)
    Else
    ;~ GUICtrlSetData($Gruppe[$index], $Sonst[0])
    GUICtrlSetData($Anzeige[$index], $Sonst[1] & @CRLF & $Sonst[2] & @CRLF & $Sonst[3] & @CRLF & $Sonst[4] & @CRLF)
    EndIf
    EndFunc

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

    Func _getXML_Weather_data($pcode)
    $Api = "http://www.google.com/ig/api?weather=" & $pcode & '&hl=de'
    $XML_Source = _INetGetSource($Api)
    $City = _StringBetween($XML_Source, '<city data="', '"/>')
    $Wstatus = _StringBetween($XML_Source, '<condition data="', '"/>')
    $Temp = _StringBetween($XML_Source, '<temp_c data="', '"/>')
    $Wind = _StringBetween($XML_Source, '<wind_condition data="', '"/>')
    $Humidity = _StringBetween($XML_Source, '<humidity data="', '"/>')
    Local $MyWeather[5] = [$City[0], $Wstatus[0], $Temp[0] & " °C", $Wind[0], $Humidity[0]]
    Return $MyWeather
    EndFunc ;==>_getXML_Weather_data

    [/autoit]

    Ich hoffe das Prinzig ist dir damit klar. Sie weiteren Case's kannst du selber einbauen.
    Du mußt auch nicht die Edit´s auslesen... geht ja auch aus dem Quellcode der Seite.

    • Offizieller Beitrag

    Schnellste Lösung, konvertiere die Grafiken zu Bmp,GIF oder JPG. Da sparst du dir das ganze umschreiben.

    • Offizieller Beitrag

    Benutze ein GIF, da kann der Hintergrund auch transparent sein. Ich mache das selber so, ist mir viel zu viel Programmieraufwand bei PNG.

  • Benutze ein GIF, da kann der Hintergrund auch transparent sein. Ich mache das selber so, ist mir viel zu viel Programmieraufwand bei PNG.


    Wenn ich das in Photoshop aus GIF speicher , hat es immer noch ein weißen hintergrund.

    Ich habe auch schon ausprobiert ,die Kanäle auszuwählen, die Hinteren auszublenden , dass nur die Hauptsachen erkennebar sind abzuspeichern , klappt aber auch nicht !

    und Png ist zu aufwändig.

    • Offizieller Beitrag

    Also bei mir klappt das auf anhieb.
    autoit.de/wcf/attachment/10125/

    Ich habe einfach deine PNG-Datei in GIMP als GIF gespeichet und gut war.

  • Dann binde das mal in meinem Script ein , und du wirst sehen , dass es nicht klappt ^^

    [autoit]

    $wetter1 = GUICtrlCreatePic(@ScriptDir & "\bewölkt mit sonne11.gif",16,160,0,0)

    [/autoit]
  • Versuchmal sowas wie bewölkt_mit_sonne.gif zu machen bin mir aber nicht sicher ob es daran liegt.


    Klappt auch nicht ^^
    Das bild wird ja angezeigt.

    Aber mit einem Weißen Rand !

    Wenn ich das mit _GDI mache , wird es zwar ohne rand angezeigt , weiß aber nicht wie ich es machen soll wenn sich der Text ändert ^^

  • So, das sollte funktionieren:

    Spoiler anzeigen
    [autoit]


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

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

    $hwnd = GUICreate("Test")
    $pic = GUICtrlCreatePic("",0,0)
    GUISetState()

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

    ;GDI+ starten:
    _GDIPlus_Startup()

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

    ;Laden:
    $Image = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\bewölkt mit sonne11.gif")
    $hImage = _GDIPlus_BitmapCreateHBITMAPFromBitmap($Image)

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

    ;Zeigen
    _SetBitmapToCtrl($pic,$hImage)

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

    ;Löschen
    _WinAPI_DeleteObject($hImage)
    _GDIPlus_ImageDispose($Image)

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

    ;GDI+ beenden:
    _GDIPlus_Shutdown()

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

    Do
    Sleep(10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _SetBitmapToCtrl($CtrlId, $hBitmap)
    $hWnd = GUICtrlGetHandle($CtrlId)
    If $hWnd = 0 Then Return SetError(2, 0, 0)
    $Style = _WinAPI_GetWindowLong($hWnd, -16)
    If @error Then Return SetError(3, 0, 0)
    _WinAPI_SetWindowLong($hWnd, -16, BitOR($Style, 0x0E))
    If @error Then Return SetError(4, 0, 0)

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

    ; set image to the control
    $hPrev = _SendMessage($hWnd, 0x0172, 0, $hBitmap)
    If @error Then Return SetError(5, 0, 0)
    If $hPrev Then _WinAPI_DeleteObject($hPrev)
    Return 1
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Faweyr (8. Juni 2010 um 19:21)