GUI Close Button deaktivieren

  • Hallo zusammen,

    ist es möglich, bei einer Standard-GUI den Close Button zu deaktivieren oder auszublenden ohne daß das Titelleistenicon mit ausgeblendet wird?

    So...

    [autoit]

    GUICreate('MyGUI', 400, 400, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU))

    [/autoit]


    ...find ich das schon ok, nur das "Kreuz" hätte ich gern noch deaktiviert oder ausgeblendet.


    Verwende ich nur...

    [autoit]

    GUICreate('MyGUI', 400, 400, -1, -1, $WS_CAPTION)

    [/autoit]


    ...dann wird leider auch kein Icon mehr in der Titelleiste angezeigt. :/

    In anderen Themen habe ich schon gelesen, daß das wohl mit WinSetStyle Funktionen geht, aber ich hoffe immernoch, daß es ein einfachen Befehl oder Style dafür gibt...


    Gruß

    Einmal editiert, zuletzt von vurman (22. September 2011 um 15:38)

  • Möchtest du das man es garnichtmehr sieht oder das wenn man darauf klickt einfach nichts passiert?
    Bei dem das man es garnichtmehr sieht kann ich dir leider nicht helfen,
    damit nichtsmehr passiert wenn man draufklickt reicht es

    [autoit]

    Case $GUI_EVENT_CLOSE

    [/autoit]

    aus dem Skript zu entfernen (Wenn du es mit Koda gemacht hast)

    MfG,
    Styler334

  • Hi,

    ja so habe ich es bis jetzt, er ist sozusagen schon deaktivert, da keine Funktion hinterlegt ist.
    Ich meinte aber mit deaktivieren so einen ausgegrauten Button, das würde ich richtig Klasse finden.. :)


    Gruß

  • Hi,
    schau Dir mal

    [autoit]


    GUICtrlSetState(-1, $GUI_DISABLE) ;i bzw. $GUI_ENABLE

    [/autoit]


    genauer an. 8)


    Es geht aber nicht um Controls, sondern um den close button oben rechts im Fenster :/

  • Auch ne interessante Variante :)

    Aber wie schon im ersten Post geschrieben, hab ich bereits einige Sachen im Netz gefunden, die das auch können, aber ich hatte gehofft, doch noch irgendwie eine AutoIt-interne Möglichkeit zu finden, also ohne zusätzliche Funktionen, includes etc..

    Trotzdem schonmal vielen dank für Eure Mühen :D


    Gruß

  • Das

    [autoit]

    #include

    [/autoit]

    im Beispiel ist für die GUI da.
    Ein besseres Beispiel kenne ich leider nicht, ich hoffe trotzdem das es dir geholfen hat.

    MfG,
    Styler334

  • Mit dem Includer veränderst du 0 % am Script ?!?
    Ich kann ma wühlen, das gab ne Möglichkeit die Titelleiste da zu lassen, ich schau nachher (wenn ich am PC bin) mal ob ich was finde

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hi,

    es hilft alles Styler334, keine Frage, aber ich wollte es so spartanisch wie möglich lösen. ;)
    Na vllt hat ja noch jemand die Lösung, ansonsten ist das jetzt auch nicht so der Weltuntergang, wäre aber halt schön, es soll ja schliesslich auch gefallen. ;)


    Gruß

    • Offizieller Beitrag

    Wie spartanisch willst du es noch haben?


    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $GUI = GUICreate("Beispiel", 250, 150)
    GUISetState()

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

    $hMenu = DllCall("user32.dll", "hwnd", "GetSystemMenu", "hwnd", $GUI, "int", 0)
    DllCall("user32.dll", "hwnd", "EnableMenuItem", "hwnd", $hMenu[0], "int", 0xF060, "int", 0x1)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]

    2 Zeilen um das Button zu deaktivieren ist doch net viel. :rolleyes:

  • Ja schon, aber um den Code-Aufwand selbst geht es mir auch nicht, es wird extra eine Dll aufgerufen und ich würde es besser finden, wenn AutoIt da gleich was bietet beim Erstellen der GUI per Style osä..


    Gruß

  • Wie hier zu lesen ist, kann der Schließen-Button mit dem Style CS_NOCLOSE (512) deaktiviert werden. Aber nur beim Registrieren der Klasse. Da dies aber AutoIt-intern passiert und man darauf keinen Einfluss hat, kann das nur noch über den DLLCall nachgeholt werden.

    Natürlich kann man mit _WinAPI_RegisterClassEx und _WinAPI_CreateWindowEx seine eigenen Fenster bauen, abr das wären ja schon wieder so unnötige DLLCalls. :rolleyes:
    Ob nun AutoIt intern die DLLs ausführt oder sie explizit über das Skript aufgerufen werden, was soll's!


    Edit: Jetzt mal davon abgesehen, dass es sich hierbei wieder um DLLCalls handelt, hier noch ein Beispiel wie man den Style der Klasse ändern kann. Wie man daraus ableiten kann, wird damit aber jedes Fenster mit der gleichen Fensterklasse beeinflusst, und das will man ja in der Regel auch nicht!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <WinAPIEx.au3>

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

    Global Const $GCL_STYLE = -26
    Global Const $CS_NOCLOSE = 512

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

    $GUI = GUICreate("Beispiel", 250, 150, 10, 10)
    GUISetState()
    _WinAPI_SetClassLongEx($GUI, $GCL_STYLE, BitOR(_WinAPI_GetClassLongEx($GUI, $GCL_STYLE), $CS_NOCLOSE))

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

    Sleep(2000)
    $GUI2 = GUICreate("Beispiel2", 250, 150, 500, 500)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]
  • Ja ihr habt ja Recht, das hab ich mir auch schon gedacht, daß AutoIt intern auch nichts anders machen wird. Aber ich hatte halt im entferntesten die Hoffnung, es sei nicht so.
    Naja, Träume erhalten ja bekanntlich das Leben... ;)

    Dann sehe ich das jetzt als gelöst an und bedanke mich nochmal bei allen Beteiligten!


    Gruß