Delphi --> AutoIt (SetLayeredWindowAttributes)

    • Offizieller Beitrag

    Hallo

    Ich bin grad dabei ein bisschen mit DWM (windows vista Aero) zu experimentieren. Bin auch eigentlich schon fertig, Problem: Text wird falsch angezeigt.
    Tja, ich bin nicht der einzige mit dem Problem ;) Hab was gefunden was in Delphi geschrieben ist, habs auch verucht umzuschreiben, hat auch indirekt funktioniert.
    Aber es hat nicht den gewünschen effekt.

    Hier der Delphi code:

    Spoiler anzeigen


    Hier den Code, so wie ich ihn übersetzt hab:

    Spoiler anzeigen
    [autoit]

    #include<WindowsConstants.au3>

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

    $clFuchsia = 0xFF00FF
    $cBlurColorKey = $clFuchsia

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

    $hMainGui = GUICreate("TEST", 400, 400, -1, -1,-1,$WS_EX_LAYERED)
    GUISetBkColor($cBlurColorKey)
    GUICtrlCreateLabel("TEST",10,10)
    DllCall("user32.dll", "dword", "SetLayeredWindowAttributes", "hwnd", $hMainGui, "dword", $cBlurColorKey, "byte", 0, "byte",1)
    GUISetState(@SW_SHOW, $hMainGui)

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

    While True
    Switch GUIGetMsg()
    Case - 3
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Also der Hintergrund verschwindet, super, aber es ist torzdem nicht das, was ich will^^
    Also, da muss noch irgendwo ein kleine Fehler drin sein. Findet ihn jemand? Würde mir sehr helfen. :thumbup:

    Mfg Spider

    • Offizieller Beitrag

    Hallo

    Ja, das hab ich natürlich auch schon ausprobiert (Fuchsia = 0xFFFF00FF)
    Windows beschreibung hab ich mir auch schon durchgelesen, eigentlich stimmt die übersetzung ja auch!?

    Genau ;) habs geschafft ne komplette GUI oder teile einer GUI in dem Aero zu machen. Aber schrift wird falsch angezeigt,
    und da sollte das layerd helfen.. Nur tut es das bei mir nicht (gui bleibt enifach schwarz)

    Trzdm danke für deine antwort :)

    Mfg Spider
    EDit:
    Hier, genau so sieht es aus:[Blockierte Grafik: http://msdn2.microsoft.com/en-us/library/Aa969537.dwm_sheetofglass(en-us,VS.85).png]
    Soll aber halt schwarzer text sein, und kein durchsichtiger :P
    BTW: Für dwm ist schwarz=AERO

  • Ich hatte mal die Layer-Func in ne UDF gemacht:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Function Name: _API_SetLayeredWindowAttributes
    ; Description:: Sets Layered Window Attributes:) See MSDN for more informaion
    ; Parameter(s):
    ; $hwnd - Handle of GUI to work on
    ; $i_transcolor - Transparent color
    ; $Transparency - Set Transparancy of GUI
    ; $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
    ; Requirement(s): Layered Windows
    ; Return Value(s): Success: 1
    ; Error: 0
    ; @error: 1 to 3 - Error from DllCall
    ; @error: 4 - Function did not succeed - use
    ; _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;
    Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)
    Local $LWA_ALPHA = 0x2
    Local $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    Select
    Case @error
    Return SetError(@error,0,0)
    Case $ret[0] = 0
    Return SetError(4,0,0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_API_SetLayeredWindowAttributes

    [/autoit]


    Sonst versuch doch Beta und GUICtrlSetDefColor(0x010101)

    Einmal editiert, zuletzt von progandy (10. April 2008 um 17:26)

    • Offizieller Beitrag

    Hallo

    Vielen dank ersma für deine Antworten! :)
    Mh, die funktion löst mein Problem leider auch nicht. Ist ja das gleiche was ich auch gemacht hab :(

    Ich hab hier mal 3 Bilder, das erste mit Textfarbe 0x010101(fast schwarz) das zweite mit textfarbe 0x555555 und das dritte mit 0xffffff (weiß)
    Anscheinend erkennt er wieviel Schwarz drin ist, und macht das auch Halbtransparent:

    Spoiler anzeigen

    Hat sonst jemand noch ein Rat?! Ich komm einfach nicht weiter :P

    Mfg Spider