AutoIt Logo in Vordergrund bringen

  • Kann mir bitte jemand erklären wie ich das Auto-It Logo in den Vordergrund bringen kann. Ich habe zuerst ein Label erstellt (gleiche Hintergrundfarbe wie das Logo). Danach habe ich mit dem Befehl GUICtrlCreatePic das Logo eingefügt. Aber leider wird es nicht in den Vordergrund gebracht und ist somit unsichtbar.


    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 443, 193, 125)
    $lbl_top = GUICtrlCreateLabel("",-1,-1,625,100)
    GUICtrlSetBkColor(-1,0x000084)
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\autoit_240x100.jpg", -1, -1, 240, 100, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von johny1099 (2. Dezember 2009 um 18:24)

  • Liegt an deinen Style Werten, genauer gesagt am $WS_CLIPSIBLINGS!

    -> $Pic1 = GUICtrlCreatePic(@ScriptDir & "\autoit_240x100.jpg", -1, -1, 240, 100)

    Sollte jetzt das Bild anzeigen!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo UEZ
    vielen Dank für die Lösung meines Problems. Jetzt funktinoiert es korrekt. Das LOGO wird nun angezeigt. Ich habe mal in der Hilfe nachgelesen was dieser Style ($WS_CLIPSIBLINGS) bewirkt. Aber verstanden habe ich es leider nicht ganz wie das gemeint ist. Ich vermute mal es hat was mit "überlappung" der Controls zu tun.

    Kann mit bitte noch jemand kurz erklären was dieser Style Wert genau macht?

    Einmal editiert, zuletzt von johny1099 (2. Dezember 2009 um 09:56)


  • Kann mit bitte noch jemand kurz erklären was dieser Style Wert genau macht?


    Schneidet "child"-Fensterflächen bei sich gegenseitig überlappenden "child"-Fenstern aus; das heißt, wenn ein bestimmtes "child"-Fenster eine WM_PAINT-Nachricht erhält, schneidet der Stil WS_CLIPSIBLINGS zunächst alle Flächen aus dieser Fensterfläche aus, die durch andere "child"-Fenster verdeckt werden, bevor der Inhalt der Fläche neu gezeichnet wird. Ist WS_CLIPSIBLINGS nicht angegeben und "child"-Fenster überlagern sich, kann es sein, dass beim Zeichnen innerhalb der einen "child"-Fensterfläche auch in die Fläche des benachbarten Fensters hineingezeichnet wird.

  • Hallo SEubo
    vielen Dank für die ausführliche Erklärung. Also wenn ich es richtig verstanden habe und den Style Wert ==> WS_CLIPSIBLINGS verwende, so wird das LOGO nicht in den Vordergrund gebracht und kann daher nicht angezeigt werden. Was ist mit child Fenster gemeint?

    Kannst Du mir bitte ein Beispiel nennen wann es sinnvoll ist WS_CLIPSIBLINGS zu verwenden?

  • Danke nicht mir, danke der AutoIt Hilfe ^^

    Ein Child-Fenster ist (korrigiert mich wenn ich Müll erzähle) sowas wie ein Fenster-im-Fenster. So gesehen ein Unterfenster eines Fensters. Hat ein Fenster nun meherere dieser Unterfenster, und diese überlappen sich auch noch, so kann es passieren, dass beim neu zeichnen eines Child-Fensters noch zusätzlich in das überlappende Fenster gemalt wird.

    Es ist, soweit ich das verstanden habe, also ein GUI style, den man bei GUICreate() verwendet. ich weiß nichtmal wie du darauf gekommen bist, den für ein Bild zu benutzen (Vielleicht hat es ja auch gute Gründe ich hab keine Ahnung).

    Ein beispiel hab ich grad nicht parat aber eine Google Suche nach "$WS_CLIPSIBLINGS AutoIt" wird dich mit sicherheit zum erfolg führen

  • Ich weiß jetzt auch wofür der Style gut ist:

    Stell dir vor, du erstellst für deine GUI ein Hintergrundbild. Da das Bild ja auch eine Control ist, überlappt sie mit anderen Controls (Lables, Editfeldern usw.) Deswegen muss das Bild mit $GUI_DISABLE deaktiviert werden. Für ListViews und Tab-Controls reicht das aber nicht aus, da diese ein bisschen anders funktionieren. In diesem Fall muss das Bild mit $WS_CLIPSIBLINGS erstellt werden, und die Listview / der Tab muss mit GuiCtrlSetState(-1,$GUI_ONTOP) in den Vordergrund geholt werden. So stehts zumindest alles in der Hilfe zu GUICtrlCreatePic