Einfaches Ausgabe-Fenster ala ToolTip, aber...

  • Hallo Zusammen,

    mit GUIs habe ich keine große Erfahrung und erscheint mir für mein Gefühl etwas zu mächtig. Ich bräuchte ein einfaches Ausgabe-Fenster ala ToolTip,

    - also das so schön gelb ist :)
    - keinen Windows-Rahmen hat
    - den Schatten wirft
    - dem ich einfach Parameter zur Ausgabe übergeben kann
    - das immer im Vordergrund liegt

    aber zusätzlich bräuchte ich die Möglichkeit, es mit der Maus

    - verschieben zu können (am liebsten mit dem Klick der linken Maustaste in das Fenster und halten und verschieben)
    - ein rechte Maustastenmenu, zumindest aber die Möglichkeit das Fenster zu minimieren.
    - eventuell scrollbar

    Gibt es da was einfaches oder muß ich mich jetzt doch endlich in das GUI-Dingens einarbeiten? :)

    Besten Dank!
    R@iner

    Einmal editiert, zuletzt von skyteddy (23. November 2008 um 20:15)

    • Offizieller Beitrag

    Wenn es genau so werden soll, musst du dich noch in viel mehr als nur "normale" Guis einlesen ;).
    Fenster Schatten werfen lassen erfordert wohl mindestens PNG-Fenster mit Transparenz (gibt es Beispiele im Forum). Der Rest könnte mit einem gestylten Edit-Feld gehen auf den ersten Blick...

    peethebee

  • Hallo peethebee,

    dank Dir für die schnelle Antwort. Ok, ich verzichte auf die Schatten. So wichtig sind mir die dann doch nicht.:-)

    Hast Du bitte, danke in deinem Fundus ein Beispiel, worauf ich aufbauen könnte? Das würde mir den Einstieg in die GUIs vermutlich sehr erleichtern.

    Besten Dank und viele Grüße!
    R@iner

    • Offizieller Beitrag

    Bisschen Material, habe es selbst noch nie gemacht und nicht genau durchgesehen. Ich meine GtaSpider hätte sowas auch mal gemacht, habe aber keinen Thread gefunden auf die Schnelle...

    [ offen ] Der etwas andere GUI - Form
    http://www.autoitscript.com/forum/index.php?showtopic=83661
    http://www.google.de/search?hl=de&q=autoit+png+gui&btnG=Suche&meta=&aq=f&oq=autoi+png+gui

    peethebee

    • Offizieller Beitrag

    skyteddy: Das empfand ich mal als ganz interessante Aufgabe, weshalb ich mich mal rangesetzt habe. :)

    Das Ergebnis:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon ; Trayicon erstmal verstecken
    #include<EditConstants.au3>
    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEventMode für die GUI
    Opt('TrayOnEventMode', 1) ; OnEventMode für das Traymenü
    Opt('TrayMenuMode', 1) ; Standard-Traymenü entfernen

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

    $sTitle = 'GUI-Titel'
    $BgColor = 0xFFFFDD

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

    $hGui = GUICreate($sTitle, 320, 240, Default, Default, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW) ; keine Titelleiste, kein Button in der Taskleiste
    GUISetBkColor($BgColor) ; Hintergrundfarbe setzen
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End') ; [ESC] beendet das Programm

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

    $hLabel = GUICtrlCreateLabel('', 0, 0, 320, 240, Default, $GUI_WS_EX_PARENTDRAG) ; Transparentes Label zum verschieben des Fensters

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

    $hHead = GUICtrlCreateLabel('', 10, 10, 300, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG) ; Ein Label für die Überschrift
    GUICtrlSetFont(-1, 18, 600, 0, 'Arial') ; Größe und Zeichensatz der Überschrift setzen

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

    $hText = GUICtrlCreateEdit('', 10, 45, 300, 180, BitOr($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY), $WS_EX_TRANSPARENT) ; ein scrollbares Editfeld erstellen
    GUICtrlSetBkColor(-1, $BgColor) ; Hintergrundfarbe setzen
    GUICtrlSetState(-1, $GUI_ONTOP) ; Das Editfeld nach vorne holen, damit man scrollen kann

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

    $hContextMenu = GUICtrlCreateContextMenu($hLabel) ; Kontextmenü erstellen
    GUICtrlCreateMenuItem('Minimieren', $hContextMenu) ; Minimieren-Eintrag erstellen
    GUICtrlSetOnEvent(-1, '_Minimize') ; dem Eintrag eine Funktion zuweisen
    GUICtrlCreateMenuItem('Beenden', $hContextMenu) ; Beenden-Eintrag erstellen
    GUICtrlSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen

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

    TrayCreateItem('Wiederherstellen') ; Traymenüeintrag erstellen
    TrayItemSetOnEvent(-1, '_Restore') ; dem Eintrag eine Funktion zuweisen
    TrayCreateItem('Beenden') ; Traymenüeintrag erstellen
    TrayItemSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen

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

    GUISetState() ; GUI anzeigen
    WinSetOnTop($sTitle, '', 1) ; Fenster immer im Vordergrund

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

    $msg = 'In der großen Koalition sorgt der Zank um die Novelle des Gesetzes für das Bundeskriminalamt (BKA) weiter für Unmut. Vor allem Bundesinnenminister Wolfgang Schäuble ist nach wie vor erzürnt über den Widerstand auch aus SPD-regierten Ländern gegen die vom Bundestag abgesegnete Ausweitung der BKA-Befugnisse einschließlich einer Lizenz für heimliche Online-Durchsuchungen.'
    $msg &= '"Die Führung der Partei kann ihre Entscheidungen derzeit nicht durchsetzen", klagte der CDU-Minister dem "Focus" sein Leid. Der Koalitionspartner befinde sich in einer "akuten Krise". Eine "Handvoll Jusos" in Sachsen könne das Inkrafttreten eines jahrelang beratenen Gesetzes verzögen, schimpfte Schäuble gegen das erste Nein eines Landes gegen das Vorhaben, in dem die Sozialdemokraten mit an der Macht sind.'

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

    GUICtrlSetData($hHead, 'Streit um BKA-Gesetz') ; Überschrift anzeigen
    GUICtrlSetData($hText, $msg) ; denText anzeigen

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

    While True ; Endlosschleife
    Sleep(20) ; Prozessor entlasten
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Minimize()
    GUISetState(@SW_HIDE, $hGui) ; GUI minimieren
    TraySetState(1) ; Trayicon anzeigen
    EndFunc

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

    Func _Restore()
    GUISetState(@SW_SHOW, $hGui) ; GUI wiederherstellen
    TraySetState(2) ; Trayicon verstecken
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Oscar sieht sehr gut aus . Coole arbeit 8)

    Edit: Das Menü mit der rechten Maustaste funzt einwandfrei, solange man es nicht im Editfeld benutzt. Im Editfeld wird ein anderes Menü angezeigt, ich denke mal das ist das Standardmenü des Edits . Aber trotzdem klasse Arbeit.

    • Offizieller Beitrag

    Da hast du recht. War gut das ich nicht Schlafen kann und deshalb so ziemlich alle Posts lese und ausprobiere. Hab aus deinem Script schon wieder was gelernt. THX :P8)

    • Offizieller Beitrag

    Ich habe mein Script noch um einen Schatten erweitert (skyteddy, jetzt sind alle Deine Bedingungen erfüllt). :)

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon ; Trayicon erstmal verstecken
    #include<EditConstants.au3>
    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEventMode für die GUI
    Opt('TrayOnEventMode', 1) ; OnEventMode für das Traymenü
    Opt('TrayMenuMode', 1) ; Standard-Traymenü entfernen

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

    $sTitle = 'Extended Tooltip'
    $BgColor = 0xFFFFDF ; Hintergrundfarbe
    $ShColor = 0x666666 ; Schattenfarbe
    $Width = 320 ; Breite des Fensters
    $Height = 200 ; Höhe des Fensters
    $Left = Int(@DesktopWidth/2-$Width/2) ; Horizontale Position (zentriert)
    $Top = Int(@DesktopHeight/2-$Height/2) ; Vertikale Position (zentriert)

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

    $hGui = GUICreate($sTitle, $Width, $Height, $Left, $Top, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW) ; keine Titelleiste, kein Button in der Taskleiste
    GUISetBkColor($BgColor) ; Hintergrundfarbe setzen
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End') ; [ESC] beendet das Programm

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

    $hLabel = GUICtrlCreateLabel('', 0, 0, $Width, $Height, Default, $GUI_WS_EX_PARENTDRAG) ; Transparentes Label zum verschieben des Fensters

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

    $hHead = GUICtrlCreateLabel('', 10, 10, $Width-20, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG) ; Ein Label für die Überschrift
    GUICtrlSetFont(-1, 16, 600, 0, 'Arial') ; Größe und Zeichensatz der Überschrift setzen

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

    $hText = GUICtrlCreateEdit('', 10, 45, $Width-20, $Height-60, BitOr($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY), $WS_EX_TRANSPARENT) ; ein scrollbares Editfeld erstellen
    GUICtrlSetBkColor(-1, $BgColor) ; Hintergrundfarbe setzen
    GUICtrlSetState(-1, $GUI_ONTOP) ; Das Editfeld nach vorne holen, damit man scrollen kann

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

    $hContextMenu = GUICtrlCreateContextMenu($hLabel) ; Kontextmenü erstellen
    GUICtrlCreateMenuItem('Minimieren', $hContextMenu) ; Minimieren-Eintrag erstellen
    GUICtrlSetOnEvent(-1, '_Minimize') ; dem Eintrag eine Funktion zuweisen
    GUICtrlCreateMenuItem('Beenden', $hContextMenu) ; Beenden-Eintrag erstellen
    GUICtrlSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen

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

    TrayCreateItem('Wiederherstellen') ; Traymenüeintrag erstellen
    TrayItemSetOnEvent(-1, '_Restore') ; dem Eintrag eine Funktion zuweisen
    TrayCreateItem('Beenden') ; Traymenüeintrag erstellen
    TrayItemSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen

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

    $hShadow = GUICreate('Shadow', $Width, $Height, $Left+6, $Top+6, $WS_POPUP, $WS_EX_TOOLWINDOW) ; Schattenfenster erzeugen
    GUISetBkColor($ShColor) ; Farbe des Schattens setzen
    WinSetTrans($hShadow, '', 128) ; Transparenz des Schattens einstellen

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

    GUISetState(@SW_SHOW, $hShadow) ; Schatten anzeigen
    GUISetState(@SW_SHOW, $hGui) ; GUI anzeigen
    WinSetOnTop('Shadow', '', 1) ; Schatten immer im Vordergrund
    WinSetOnTop($sTitle, '', 1) ; GUI immer im Vordergrund

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

    GUIRegisterMsg($WM_MOVE, '_ShadowMove') ; Funktion zum "Schatten verschieben" registrieren

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

    $msg = 'In der großen Koalition sorgt der Zank um die Novelle des Gesetzes für das Bundeskriminalamt (BKA) weiter für Unmut. Vor allem Bundesinnenminister Wolfgang Schäuble ist nach wie vor erzürnt über den Widerstand auch aus SPD-regierten Ländern gegen die vom Bundestag abgesegnete Ausweitung der BKA-Befugnisse einschließlich einer Lizenz für heimliche Online-Durchsuchungen.'
    $msg &= '"Die Führung der Partei kann ihre Entscheidungen derzeit nicht durchsetzen", klagte der CDU-Minister dem "Focus" sein Leid. Der Koalitionspartner befinde sich in einer "akuten Krise". Eine "Handvoll Jusos" in Sachsen könne das Inkrafttreten eines jahrelang beratenen Gesetzes verzögern, schimpfte Schäuble gegen das erste Nein eines Landes gegen das Vorhaben, in dem die Sozialdemokraten mit an der Macht sind.'

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

    GUICtrlSetData($hHead, 'Streit um BKA-Gesetz') ; Überschrift anzeigen
    GUICtrlSetData($hText, $msg) ; denText anzeigen

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

    While True ; Endlosschleife
    Sleep(10) ; Prozessor entlasten
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Minimize()
    GUISetState(@SW_HIDE, $hShadow) ; Schatten verstecken
    GUISetState(@SW_HIDE, $hGui) ; GUI verstecken
    TraySetState(1) ; Trayicon anzeigen
    EndFunc

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

    Func _Restore()
    GUISetState(@SW_SHOW, $hShadow) ; Schatten wiederherstellen
    GUISetState(@SW_SHOW, $hGui) ; GUI wiederherstellen
    TraySetState(2) ; Trayicon verstecken
    EndFunc

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

    Func _ShadowMove()
    Local $pos = WinGetPos($sTitle) ; Fensterposition der GUI holen
    WinMove('Shadow', '', $pos[0]+6, $pos[1]+6) ; das Schatten-Fenster entsprechend verschieben
    EndFunc

    [/autoit]

    Edit: Funktion zum verschieben des Schattens auf WM_MOVE geändert. Das verhindert den "Nachzieh"-Effekt beim Schattenfenster.

  • Kein Erfolg, leider. Die Funktion wird also beim MouseDown ausgeführt und nicht beim MouseUp, bei mir ?(

    Edit: Besser gesagt, wenn das Fenster beginnt sich zu bewegen und dann nur einmal!


    EDIT: Damit funktioniert's!

    [autoit]

    Global Const $WM_WINDOWPOSCHANGED = 0x0047

    [/autoit]
  • Mit $WM_WINDOWPOSCHANGED funktioniewrt es jetzt ja. Ich denke (hab's jetzt auch getestet ;) ) das hat damit zu tun, dass ich die Option 'Fensterinhalt bein Ziehen anzeigen' abgeschaltet habe. Als ich es eingeschaltet hatte, funktionierte auch $WM_MOVING. Also danke für diese tolle GUI und den Support. :D