1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

GUI Transparent machen, wie?

Dieses Thema im Forum "Support & Discussion" wurde erstellt von AutoitAnfänger, 10. November 2019.

  1. AutoitAnfänger

    AutoitAnfänger New Member

    Registriert seit:
    10. November 2019
    Beiträge:
    7
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Guten Tag liebe comm Ich bin ein blutiger anfänger und habe mich schon lange für solche dinge interessiert wie AutoIT und wollte mal fragen ob man mir hier vielleicht helfen kann.

    Ich würde gern:
    Code (Text):
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(0, 150, 200, 4)
    "
    etwas transparent machen, aber ich weiß leider nicht wie ich das machen kann.


    Hier der gesamte script:
    Code (Text):
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <WinAPI.au3>
    #include <ColorConstantS.au3>
    $Form1 = GUICreate("Form1", 200, 200, 663, 317, -1, $WS_EX_LAYERED)
    GUISetBkColor(0x0000F4)
    _WinAPI_SetLayeredWindowAttributes($Form1, 0x0000F4)
    GUICtrlCreateGraphic(0, 100, 200, 4)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(0, 50, 200, 4)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(0, 150, 200, 4)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(100, 0, 4, 200)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(50, 0, 4, 200)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(150, 0, 4, 200)
    GUICtrlSetBkColor(-1, 0x000000)
    GUISetState(@SW_SHOW)
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd


     
  2. Best Answer:
    Post #4 by krusty, 12. November 2019 (3 points)
  3. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    106
    Zustimmungen:
    40
    Punkte für Erfolge:
    28
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Hey mein Lieber, entschuldige bitte die späte Antwort.
    Was genau willst du machen? Willst du, dass was auch immer unter der Grafik liegt sichtbat wird?
    Willst du, das Fenster an der Stelle deiner Grafik durchsichtig wird?
    lg Krusty
     
  4. AutoitAnfänger

    AutoitAnfänger New Member

    Registriert seit:
    10. November 2019
    Beiträge:
    7
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo Krusty und danke für die Antwort,:)

    also, ich möchte die Schwarze Gitter nur etwas durchsichtig machen, aber ich weiß leider nicht wie das funktioniert :(

    [​IMG]

    lg AutoitAnfänger
     
  5. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    106
    Zustimmungen:
    40
    Punkte für Erfolge:
    28
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Best Answer
    Okay, möchtest du ein Chrosshair-Overlay machen?
    Ich habe leider schon lange kein Autoit mehr programmiert.
    Dein Code macht das folgende:

    1. du erstellst ein neues Fenster: GUICreate

    2. du Setzt die Hintergrundfarbe auf Blau (geb mal #0000F4 hier ein, dann siehst du wie sich die RGB Werte aufspalten: https://www.rapidtables.com/convert/color/hex-to-rgb.html )

    3. mit _WinAPI_SetLayeredWindowAttributes sagst du, dass für dein Fenster alles was den obigen Blauwert hat transparent gezeichnet wird.

    4. mit GUICtrlCreateGraphic erstellst du eine neue Linie. Du kannst die Linie dünner zeichnen, indem du den letzten Parameter anpasst, welcher die Pixelbreite beschreibt, vlt hilft dir das schon.
    Du solltest die erstellte Linie in einer Variable speichern:
    $line1 = GUICtrlCreateGraphic(...)
    $line2 = GUICtrlCreateGraphic(...)
    ...

    5. mit der Funktion GUICtrlSetBkColor kannst du die Farbe der erstellten Linie ändern:
    GUICtrlSetBkColor($line1,0x000000) wobei 0x000000 für Schwarz steht (glaube ich??).
    Wenn du die Funktion mit -1 als ersten Parameter aufrufst wird die Farbe für das zuletzt angelegte Control geändert (glaube ich??)

    Nun zu deinem Problem:

    In der Funktion GUICtrlSetBkColor kann man leider nur RGB Werte angeben, aber keine RGBA Werte. A steht hierbei für den Alpha-Kanal und regelt die Transparenz der Farbe.
    Zudem sind deine erstellten Linien nicht unbedingt richtige Controls wie Labels/Checkboxen.

    Ich habe hier eine Funktion gefunden, die scheinbar Buttons o.ä. Teilweise transparent machen kann, allerdings über einen komischen Umweg: https://www.autoitscript.com/forum/topic/73121-transparent-controls/
    Code (AutoIt):

    Func _GuiCtrlMakeTrans($iCtrlID,$iTrans=255)
     
        Local $pHwnd, $nHwnd, $aPos, $a
     
        $hWnd = GUICtrlGetHandle($iCtrlID);Get the control handle
        If $hWnd = 0 then Return SetError(1,1,0)
        $pHwnd = DllCall("User32.dll", "hwnd", "GetParent", "hwnd", $hWnd);Get the parent Gui Handle
        If $pHwnd[0] = 0 then Return SetError(1,2,0)
        $aPos = ControlGetPos($pHwnd[0],"",$hWnd);Get the current pos of the control
        If @error then Return SetError(1,3,0)
        $nHwnd = GUICreate("", $aPos[2], $aPos[3], $aPos[0], $aPos[1], 0x80000000, 0x00080000 + 0x00000040, $pHwnd[0]);greate a gui in the position of the control
        If $nHwnd = 0 then Return SetError(1,4,0)
        $a = DllCall("User32.dll", "hwnd", "SetParent", "hwnd", $hWnd, "hwnd", $nHwnd);change the parent of the control to the new gui
        If $a[0] = 0 then Return SetError(1,5,0)
        If NOT ControlMove($nHwnd,'',$hWnd,0,0) then Return SetError(1,6,-1);Move the control to 0,0 of the newly created child gui
        GUISetState(@SW_Show,$nHwnd);show the new child gui
        WinSetTrans($nHwnd,"",$iTrans);set the transparency
        If @error then Return SetError(1,7,0)
        GUISwitch($pHwnd[0]);switch back to the parent Gui
     
        Return $nHwnd;Return the handle for the new Child gui
     
    EndFunc
     
    lg Krusty

    Edit:

    Als ich folgendes überflog https://www.autoitscript.com/forum/topic/161517-guictrlcreateicon-with-transparent-background/, kam ich auf eine Idee: Du könntest anstatt Linien zu zeichnen, die Linien halb transparent in ein PNG Zeichnen und das anschließend laden, denn PNGs haben einen Alpha-Kanal. Du müsstest die Hintergrundfarbe des PNGs auf das gleiche Blau setzen, wie der Hintergrund deines Fensters gezeichnet wird.
    Das PNG kannst du entweder selbst mit Autoit erstellen oder vorerst mit Paint o.ä.



    Edit2:

    vlt denke ich zu einfach aber versuch mal folgendes:

    Füge zu deinem Skript folgende Zeile unter das _WinAPI_SetLayeredWindowAttributes hinzu:
    _WinAPI_SetLayeredWindowAttributes($Form1, 0x0000E4, 100)

    dann ersetzt du in allen Aufrufen von GUICtrlSetBkColor den Wert 0x000000 durch 0x0000E4
     
    Zuletzt bearbeitet: 12. November 2019
    AutoitAnfänger gefällt das.
  6. AutoitAnfänger

    AutoitAnfänger New Member

    Registriert seit:
    10. November 2019
    Beiträge:
    7
    Zustimmungen:
    0
    Punkte für Erfolge:
    1


    Vielen Dank, jetzt funktioniert es :)

    Falls jemand das auch machen will hier der Skript:

    Code (Text):
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <WinAPI.au3>
    #include <ColorConstantS.au3>
    $Form1 = GUICreate("Form1", 200, 200, 663, 317, -1, $WS_EX_LAYERED)
    GUISetBkColor(0x0000E4)
    _WinAPI_SetLayeredWindowAttributes($Form1, 0x0000E4)
    _WinAPI_SetLayeredWindowAttributes($Form1, 0x0000E4, 100)
    GUICtrlCreateGraphic(0, 100, 200, 4)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(0, 50, 200, 4)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(0, 150, 200, 4)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(100, 0, 4, 200)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(50, 0, 4, 200)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateGraphic(150, 0, 4, 200)
    GUICtrlSetBkColor(-1, 0x000000)
    GUISetState(@SW_SHOW)
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
     
  7. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    106
    Zustimmungen:
    40
    Punkte für Erfolge:
    28
    Geschlecht:
    männlich
    Ort:
    Wadiya
    So wie es jetzt gemacht ist, ist die ganze Form aber nicht mehr ganz durchsichtig.
    Ich dachte nur die Linien sollen nicht ganz durchsichtig sein?
     
  8. AutoitAnfänger

    AutoitAnfänger New Member

    Registriert seit:
    10. November 2019
    Beiträge:
    7
    Zustimmungen:
    0
    Punkte für Erfolge:
    1


    habe es pink makiert :)
     
  9. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    106
    Zustimmungen:
    40
    Punkte für Erfolge:
    28
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Okay, dann fällt die Zeile ohne den dritten Parameter weg: _WinAPI_SetLayeredWindowAttributes($Form1, 0x0000E4)

    Du kannst auch mal WinSetTrans($Form1,"", 100) versuchen, das könnte auch klappen.
     
    AutoitAnfänger gefällt das.

Diese Seite empfehlen

Die Seite wird geladen...