ImageGUI UDF

  • Hallo Leute ich habe mir gedacht, ich schreibe einfach mal eine ImageGUI UDF also eine UDF die es erleichtert, eine GUI zu basteln, die auf Grafiken Basiert.

    Ich habe mir den Code zusammengeschrieben, doch will es nicht so ganz funktionieren. Hier mal der Code:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #Include <WinAPI.au3>

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

    _GDIPlus_Startup()

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

    Global $hGUI, $iWidth, $iHeight, $hGrafics1, $iwExit, $ihExit, $iwMax, $ihMax, $iwMin, $ihMin, $MainImage, $ExitImage, $MaxImage, $MinImage, $hExit, $hMax, $hMin
    Global Const $SC_DRAGMOVE = 0xF012
    Func _ImageGUI_Create($GUIImage, $ExitImage, $MaxImage, $MinImage)

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

    ; Lade Images für GUI
    $MainImage = _GDIPlus_ImageLoadFromFile($GUIImage)
    $hExit = _GDIPlus_BitmapCreateFromFile($ExitImage)
    $hMax = _GDIPlus_BitmapCreateFromFile($MaxImage)
    $hMin = _GDIPlus_BitmapCreateFromFile($MinImage)
    ;==================================================

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

    ; GUIImage Größe ermitteln
    $iWidth = _GDIPlus_ImageGetWidth($MainImage)
    $iHeight = _GDIPlus_ImageGetHeight($MainImage)
    ;==================================================

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

    ; erstelle GUI
    $hGUI = GUICreate("", $iWidth, $iHeight, 192, 124, $WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor(0x01, $hGUI)
    GUISetState(@SW_SHOW)
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0x01, 0xFF, 3)
    ;==================================================

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

    ;Exit-, Max- und MinImage Größe ermitteln
    $iwExit = _GDIPlus_ImageGetWidth($hExit)
    $ihExit = _GDIPlus_ImageGetHeight($hExit)
    $iwMax = _GDIPlus_ImageGetWidth($hMax)
    $ihMax = _GDIPlus_ImageGetHeight($hMax)
    $iwMin = _GDIPlus_ImageGetWidth($hMin)
    $ihMin = _GDIPlus_ImageGetHeight($hMin)
    ;==================================================

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

    ; zeige Grafiken an
    _GDIPlus_GraphicsDrawImage($hGrafics1, $MainImage, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $hExit, $iWidth -5, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $hMax, $iWidth - $iwExit -5, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $hMin, $iWidth - $iwExit - $iwMax -5, 0)
    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)

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

    EndSwitch
    WEnd

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

    EndFunc

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

    ; Grafiken anzeigen
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    Global $hGrafics1 = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $MainImage, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $hExit, $iWidth -5, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $hMax, $iWidth - $iwExit -5, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics1, $hMin, $iWidth - $iwExit - $iwMax -5, 0)
    ;~ _WinAPI_RedrawWindow($hGUI, 0, 0, 1)
    Return $GUI_RUNDEFMSG

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

    EndFunc

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

    _GDIPlus_Shutdown()

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

    Hoffe ihr könnt helfen

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

    3 Mal editiert, zuletzt von Facemix (28. November 2013 um 23:44) aus folgendem Grund: Neuer Fehler

  • Erinnerst du dich noch an deinen letzten Thread? Du hast ihn mit den Worten "es klappt leider nicht" eröffnet.
    Ich zitiere mal meinen Beitrag aus diesem Thread:

    Zitat

    Bitte formuliere in Zukunft deine Problembeschreibungen etwas detailreicher. "klappt leider nicht" hilft uns nicht wirklich weiter.


    Nach diesem Hinweis war deine nächste Antwort "... leider funktioniert es noch immer nicht.", also auch wieder recht knapp.
    Jetzt machst du den nächsten Thread auf und deine Problembeschreibung besteht erneut aus: "... doch will es nicht so ganz funktionieren.".
    Du wirfst uns ein Problem vor die Füße, sagst es funktioniere nicht und wir sollen mal machen. Das ist zwar dein gutes Recht, aber wenn du das öfter so machst habe ich keine Lust mehr dir zu helfen.

    Und dein Script halte ich für einen schlechten Scherz. Du wurdest schon einmal darauf hingewiesen dir die Grundlagen nochmal anzuschauen.
    Du hast in deinem Script zwei große Funktionen deklariert in denen sich wohl ein Großteil des Geschehens abspielen soll. Schlecht nur, dass die nie aufgerufen werden. Das ist übrigens der einzige Grund warum AutoIt dir nicht zig Fehlermeldungen anzeigt.
    Du hast wieder einmal den Ablauf der einzelnen Bestandteile deines Scripts völlig durcheinander gebracht. Das passiert wohl beim Copy & Paste gelegentlich...

  • ja die Grundlagen sind mir bekannt. Wenn ich mein Testscript ausführe, dann öffnet sich aber die GUI nicht ich finde meinen Fehler leider nicht

    ich will hier jetzt nicht runtergemacht werden sondern nur Hilfe das es läuft!!

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Zitat

    ja die Grundlagen sind mir bekannt.

    Nein sind sie nicht. Das ist kein "Runtergemache" sondern eine simple Schlussfolgerung aus deinem hier dargelegten Werk.

    Zitat

    Wenn ich mein Testscript ausführe, dann öffnet sich aber die GUI nicht ich finde meinen Fehler leider nicht

    Es ist eben nicht ein Fehler, sondern es sind einige Fehler. In meinem Beitrag steht übrigens schon drin warum sich bei deinem Script überhaupt nichts tut.

    Zitat

    dann öffnet sich aber die GUI nicht

    Warum schreibst du sowas nicht am Anfang in den ersten Beitrag? Das ist genau die Art von Fehlerbeschreibung die man braucht um dir möglichst schnell zu helfen. Wenn du gute und schnelle Hilfe willst, dann musst du eben lernen deine Probleme besser zu beschreiben, sich zu beschweren, dass du das nicht gesagt kriegen willst und stattdessen lieber die fertige Lösung zu deinem nicht genannten Problem hättest, hilft hier niemandem.

  • Ok dann kennt ihr nun die Fehlerbeschreibung, und hoffe ihr könnt mir helfen!

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Du könntest auch gleich mal Stellung zu den Sachen nehmen die ich bereits genannt habe.
    Der Hauptgrund, warum dein Script überhaupt nichts macht ist folgender (zum dritten Mal weise ich jetzt darauf hin): Alles was irgendetwas sichtbares bewirken würde ist in einer Funktion die nie aufgerufen wird.

  • Welche funktion ist das dann? ich schaue mir ständig das Script durch doch ich kann nicht entdecken welche Funktion du meinst, die nie aufgerufen wird

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • nein das ist definitiv nicht das Problem, denn ich hatte ein kleines Testscript erstellt in dem ich diese au3 included habe, und von da aus wird diese funktion ausgeführt! Trotzdem nichts zu sehen, fehler werden auch keine ausgegeben

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Zitat

    denn ich hatte ein kleines Testscript erstellt in dem ich diese au3 included habe

    Ach, und das erzählst du mir jetzt? Wie äußerst hilfreich...

    Zitat

    Trotzdem nichts zu sehen, fehler werden auch keine ausgegeben

    Das war ein Fehler meinerseits, ich habe übersehen, dass du alle Variablen schon vor der Funktion global deklariert hast. Dadurch werfen die Variablen bei ihrer Verwendung in der Funktion keinen Fehler sondern haben liedglich keinen Inhalt. Um die Fehler zu sehen müsstest du @error auslesen bzw. die Rückgabewerte der Funktionen ausgeben lassen die eben genannte Variablen verwenden.

    Zitat

    nein das ist definitiv nicht das Problem

    Ach echt? Tut mir leid, mein Fehler. Ich weiß leider auch nicht mehr weiter wenn es daran "definitiv nicht" liegen kann.
    Da muss wohl jemand mit mehr Kompetenz ran...

  • Was für die Fehlersuche wahnsinnig hilfreich ist und immer! vorhanden sein sollte ist der code der ausgeführt wird... nützt nix wenn man hier ne UDF postet und sagt mein prog. geht net ohne zu zeigen was man damit überhaupt macht... und im normal fall wirft Scite immer etwas aus wenn was schief geht.

    was mir anfangs geholfen hat war ein einfaches ConsoleWrite() einzubauen das mir die werte meiner Variablen ausgibt, damit kann man auch schon einiges finden.

    besser noch ist @error nach JEDER! Aktion die schief gehen kann zu überprüfen.

  • Also ich habe das mit dem ConsoleWrite gemacht, habe die Variable $MainImage ausgeben lassen, dort wird mir nur ein Farbcode ausgegeben dieser hier "0x000000" woraus ich persönlich schliese, dass die MainImage nicht richtig eingelesen wird aus welchem Grund weis ich nicht. ich hoffe da könnt ihr mir weiterhelfen. hier der code mit dem es ausgeführt wird:

    [autoit]

    #include 'GDI+ImageGUI UDF.au3'

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

    $Main = "wald.jpeg"
    $ex = "exit.png"
    $max = "max.png"
    $min = "min.png"

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

    _ImageGUI_Create($Main, $ex, $max, $min)

    [/autoit]

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Das ist kein Farbcode sondern lediglich die Zahl 0 in Hexadezimalform und der Datengröße eines Handles (das was du eigentlich zurückbekommen solltest).
    Und erneut kann man nur raten was dort schiefgelaufen ist. Ich vermute, dass die Dateien nicht im Verzeichnis des Scripts liegen (und ja ich meine dieses Script, nicht deine "UDF").

  • kleiner tipp noch ich würde dir auch empfehlen dir anzugewöhnen möglicht den Absoluten Pfad zu nehmen autoit hat um diesen Pfad Variabel zu machen wunderbaren Macros

    [autoit]

    @ScriptDir
    @DesktopDir
    ;... etc
    ;so das aus
    ;$Main = "wald.jpeg"
    $Main = @ScriptDir & "\wald.jpeg"
    ;Wird

    [/autoit]

    leider ist es auch schon spät und ich muss pennen
    kann dir also erst morgen weiterhelfen... möglicherweise auch erst abends hab an der arbeit kein autoit / scite
    hoffe das sich noch jemand bereit erklärt dir zu helfen.

    und nicht vergessen gib alle infos über dein scriptproblem raus nur so ist eine einfache hilfe möglich.

  • Also mir ist das hier zuviel Rumraterei. Jedenfalls gibt_GDIPLUS_ImageLoadFromFile ein handle zurück. Das, was du da erhältst ist also kein Farbcode. Deutet erstmal auf ein Problem beim Laden der Grafik hin. Aber ich mag jetzt auch nicht nochmal extra zum Lappi rennen.... dafür hätte ma den Thread dann schon etwas vernünftiger aufbauen müssen.


    Edit: am Tab dauerts immer länger ^^

  • Das ist mir Irgendwie peinlich, das komplette Script Funktioniert genau so wie ich es geschrieben hatte wunderbar. Der Fehler lag nicht am nicht angegebenen Absoluten Pfad, sondern daran, dass die Dateiendung der MainImage falsch angegeben wurde ich hatte ".jpeg" richtig war aber ".jpg" was ich für schwachsinnig halte, dass es deswegen nicht funktionierte denn JPEG und JPG sind ein und dieselbe Grafikart. Naja trotzdem danke für die Hilfe.

    Ich werde es mir für die Zukunft merken, euch gleich von Anfang an eine ganz genaue Fehlerbeschreibung zu liefern. Es tut mir leid dass ich es nicht gleich getan habe, doch auch bei mir ist es spät und echt schwer wach zu bleiben.

    name22 nichts für ungut, für uns alle ist es spät und haben auch harte Arbeit hinter uns sogar auch wieder vor uns. Auch bei dir möchte ich mich dafür entschuldigen, dass ich nicht von anfang ne genaue Fehlerbeschreibung geliefert habe.

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Das macht so schon Sinn... Schließlich erlaubt Windows es dir die Dateien "Bild.jpeg" und "Bild.jpg" im selben Verzeichnis zu haben. Wäre ja auch schlimm wenn nicht... Daher musst du die Datei auch eindeutig identifizieren. Schreibfehler sind nicht die Schuld des Systems.

  • Ich habe die Positionen der Exit, Max und Min grafiken schnell optimiert, denn die Positionen waren falsch gesetzt jetzt aber stimmt es, des weiteren habe ich erst einmal die Max Grafik entnommen fürs erste

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Zitat

    Der Fehler lag nicht am nicht angegebenen Absoluten Pfad, sondern daran,
    dass die Dateiendung der MainImage falsch angegeben wurde ich hatte
    ".jpeg" richtig war aber ".jpg" was ich für schwachsinnig halte, dass es
    deswegen nicht funktionierte denn JPEG und JPG sind ein und dieselbe
    Grafikart.

    Dein Satz besagt doch, dass du was Grundlegendes nicht verstanden hast. Wenn du deine Frau zum Penny schickst, anstelle zum REWE, ist da doch ein kleiner (z.b örtlicher) Unterschied obwohl beide zum selben Konzern gehören :)

  • Guter Vergleich :)

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin