Problem mit GUI Menü

  • Ich wollte für HastyNotes ein richtiges Design basteln,
    so das es auf allen Rechnern ziemlich den gleichen Stil hat.

    Design geht soweit auch.

    Problem: Wenn ich jetzt mit "GUICtrlCreateMenu" EIn Menü
    einfüge verschiebt sich alles. Ist es nicht möglich diese Menü Leiste weiter runter zu setzen?

    Script+Bilder: Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Design wird bitte NICHT weiter verwendet.

  • Hi,

    nein, leider geht das so wie Du es dir vorstellst nicht, da die Menüleiste zum Nicht-Anwendungsbereich des Fensters gehört.

    Was Du aber machen kannst:
    Erzeuge eine Werkzeugleiste unterhalb deines "Rahmens" und für jedes Element der Werkzeugleiste erzeugst Du ein Popupmenü. ;)
    Das machen viele Anwendungen so ...


    Gruß
    Greenhorn


  • Du meinst mit einer Toolbar/Popup Mischung?
    Ich verstehe ca. was du meinst, hab aber grad nicht den Kopf dazu.

    Hast du zufällig grad ein Beispiel dafür rumliegen?

  • ich denke mal er meint sowas?
    Aus der Hilfe zu GUICtrlCreateContextMenu

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example2()

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

    ; *****************
    ; * Second sample *
    ; *****************
    Func Example2()
    Local $hGui, $OptionsBtn, $OptionsDummy, $OptionsContext, $OptionsCommon, $OptionsFile, $msg
    Local $OptionsExit, $HelpBtn, $HelpDummy, $HelpContext, $HelpWWW, $HelpAbout
    $hGui = GUICreate("My GUI", 170, 40)

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

    $OptionsBtn = GUICtrlCreateButton("&Options", 10, 10, 70, 20, $BS_FLAT)

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

    ; At first create a dummy control for the options and a contextmenu for it
    $OptionsDummy = GUICtrlCreateDummy()
    $OptionsContext = GUICtrlCreateContextMenu($OptionsDummy)
    $OptionsCommon = GUICtrlCreateMenuItem("Common", $OptionsContext)
    $OptionsFile = GUICtrlCreateMenuItem("File", $OptionsContext)
    GUICtrlCreateMenuItem("", $OptionsContext)
    $OptionsExit = GUICtrlCreateMenuItem("Exit", $OptionsContext)

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

    $HelpBtn = GUICtrlCreateButton("&Help", 90, 10, 70, 20, $BS_FLAT)

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

    ; Create a dummy control and a contextmenu for the help too
    $HelpDummy = GUICtrlCreateDummy()
    $HelpContext = GUICtrlCreateContextMenu($HelpDummy)
    $HelpWWW = GUICtrlCreateMenuItem("Website", $HelpContext)
    GUICtrlCreateMenuItem("", $HelpContext)
    $HelpAbout = GUICtrlCreateMenuItem("About...", $HelpContext)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

    Switch $msg
    Case $OptionsExit, $GUI_EVENT_CLOSE
    ExitLoop

    Case $OptionsBtn
    ShowMenu($hGui, $msg, $OptionsContext)

    Case $HelpBtn
    ShowMenu($hGui, $msg, $HelpContext)

    Case $HelpAbout
    MsgBox(64, "About...", "GUICtrlGetHandle-Sample")
    EndSwitch
    WEnd
    GUIDelete()
    EndFunc ;==>Example2

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

    ; Show a menu in a given GUI window which belongs to a given GUI ctrl
    Func ShowMenu($hWnd, $CtrlID, $nContextID)
    Local $arPos, $x, $y
    Local $hMenu = GUICtrlGetHandle($nContextID)

    $arPos = ControlGetPos($hWnd, "", $CtrlID)

    $x = $arPos[0]
    $y = $arPos[1] + $arPos[3]

    ClientToScreen($hWnd, $x, $y)
    TrackPopupMenu($hWnd, $hMenu, $x, $y)
    EndFunc ;==>ShowMenu

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

    ; Convert the client (GUI) coordinates to screen (desktop) coordinates
    Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
    Local $stPoint = DllStructCreate("int;int")

    DllStructSetData($stPoint, 1, $x)
    DllStructSetData($stPoint, 2, $y)

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

    DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

    $x = DllStructGetData($stPoint, 1)
    $y = DllStructGetData($stPoint, 2)
    ; release Struct not really needed as it is a local
    $stPoint = 0
    EndFunc ;==>ClientToScreen

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

    ; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd)
    Func TrackPopupMenu($hWnd, $hMenu, $x, $y)
    DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
    EndFunc ;==>TrackPopupMenu

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Müsste eigentlich leichter gehen.
    Bin der Meinung sowas gabs auch schonmal..
    Aber ich hab 0 Plan wo ich das gesehen hab.

    Google zeigt mir ja immer nur den Beitrag hier lol

  • Keiner eine Idee?

    Bin zwar erst wieder ein paar Stunden wach,
    aber immer noch keine Brauchbare Lösung gefunden.

    Die Idee von oben geht zwar aber nja,
    bei 8-9 Context Menü's wirds dann deutlich zu unübersichtlich x.x

  • Hab jetzt alles ausprobiert..
    sogar ne list view zum schluss XD

    Ich hab einfach kp wie du das machen willst o_O


    Ich habe auch einiges ausgetestet, aber mit ebensowenig Erfolg. Das Problem ist ..., mom, mir fällt gerade etwas ein ...


    Gruß
    Greenhorn


    • Offizieller Beitrag

    Benutze für das Menu doch einfach eine zweite GUI (Child):

    Spoiler anzeigen
    [autoit]


    #Region - Includes
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion - Includes

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

    #Region GUI-Design
    $MainGUI = GUICreate("HastyNotes", 640, 480, -1, -1, $WS_POPUP)
    GUISetBkColor(0xFFFFFF)

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

    $TopLeisteStart = GUICtrlCreatePic("Images/TopLineStart.jpg", 0, 0, 7, 23, -1, $GUI_WS_EX_PARENTDRAG)
    $TopLeisteMiddle = GUICtrlCreatePic("Images/TopLineMiddle.jpg", 7, 0, 589, 23, -1, $GUI_WS_EX_PARENTDRAG)
    $TopLeisteEnd = GUICtrlCreatePic("Images/TopLineEnd.jpg", 633, 0, 7, 23, -1, $GUI_WS_EX_PARENTDRAG)
    $Background = GUICtrlCreatePic("Images/Background.jpg", 0, 23, 640, 432)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $TopButton1 = GUICtrlCreatePic("Images/Mini.jpg", 589, 0, 22, 23)
    $TopButton2 = GUICtrlCreatePic("Images/Close.jpg", 611, 0, 22, 23)
    $BottomLeiste = GUICtrlCreatePic("Images/BottomLine.jpg", 0, 455, 640, 25)
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_MOVE, '_WM_MOVE')

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

    $aMainPos = WinGetPos($MainGUI)
    $MenuGUI = GUICreate('', 636, 16, $aMainPos[0] + 2, $aMainPos[1] + 23, $WS_POPUP, Default, $MainGUI)
    $hFileMenu = GUICtrlCreateMenu('File')
    GUICtrlCreateMenuItem('Open', $hFileMenu)
    GUISetState(@SW_SHOW)
    #EndRegion GUI-Design

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $TopButton1
    GUISetState(@SW_MINIMIZE)
    Case $TopButton2
    Exit
    EndSwitch
    WEnd

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

    Func _WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    If $hWnd = WinGetHandle($MainGUI) Then
    WinMove($MenuGUI, '', BitAND($lParam, 0x0000FFFF) + 2, BitShift($lParam, 16) + 23)
    EndIf
    EndFunc

    [/autoit]
  • Benutze für das Menu doch einfach eine zweite GUI (Child):


    Wahrscheinlich die beste Alternative ...

    Ich habe bis jetzt das hier fabriziert:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Ist ein bißchen langsam und nicht perfekt.


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (9. August 2009 um 03:24)

  • Habs jetzt 99%tig fertig. (Die Buttons oben inner Leiste haben noch keine Funktion.)
    Läuft 1a..
    Allerdings, ehrlich gesagt gefällt mir die "Non-Custom-Gui" echt besser =/

    Mal Vergleich und Code:
    [Blockierte Grafik: http://img-up.net/thumbs/VergleichTcPNZMW.jpg]
    (Links Custom, rechts normal.)

    Spoiler anzeigen
    [autoit]


    #Region Main-GUI
    $MainGUI = GUICreate("HastyNotes " & $Version, 640, 480, -1, -1, $WS_POPUP)
    GUISetBkColor(0xFFFFFF)

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

    $TopLeisteStart = GUICtrlCreatePic("Images/TopLineStart.jpg", 0, 0, 7, 23, -1, $GUI_WS_EX_PARENTDRAG)
    $TopLeisteMiddle = GUICtrlCreatePic("Images/TopLineMiddle.jpg", 7, 0, 589, 23, -1, $GUI_WS_EX_PARENTDRAG)
    $TopLeisteEnd = GUICtrlCreatePic("Images/TopLineEnd.jpg", 633, 0, 7, 23, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $TopButton1 = GUICtrlCreatePic("Images/Mini.jpg", 589, 0, 22, 23)
    $TopButton2 = GUICtrlCreatePic("Images/Close.jpg", 611, 0, 22, 23)
    $BottomLeiste = GUICtrlCreatePic("Images/BottomLine.jpg", 0, 455, 640, 25)
    GUIRegisterMsg($WM_MOVE, '_WM_MOVE')

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

    ; Main-Tab
    $UberTab = GUICtrlCreateTab(0, 46, 640, 410, $TCS_BOTTOM, $WS_EX_CLIENTEDGE)
    GUICtrlSetFont(-1, 10, 400, 0, "Verdana")

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

    ; Tab 1
    $Tab1 = GUICtrlCreateTabItem($TabName1)
    $Edit1 = GUICtrlCreateEdit("", 7, 53, 626, 370)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Verdana")

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

    ; Tab 2
    $Tab2 = GUICtrlCreateTabItem($TabName2)
    $Edit2 = GUICtrlCreateEdit("", 7, 53, 626, 370)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Verdana")

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

    ; Tab 3
    $Tab3 = GUICtrlCreateTabItem($TabName3)
    $Edit3 = GUICtrlCreateEdit("", 7, 53, 626, 370)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Verdana")

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

    ; Tab 4
    $Tab4 = GUICtrlCreateTabItem($TabName4)
    $Edit4 = GUICtrlCreateEdit("", 7, 53, 626, 370)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Verdana")

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

    ; Tab 5 - Kalender
    $Tab5 = GUICtrlCreateTabItem("Kalender")
    $Kalender = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 7, 53, 626, 370)

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

    ; Tab 6 - Termine
    $Tab6 = GUICtrlCreateTabItem("Termine")
    $Terminliste = GUICtrlCreateListView("Betreff|Uhrzeit|Datum|Kommentar", 7, 53, 626, 370)
    $ContextTermin = GUICtrlCreateContextMenu($Terminliste)
    $KillTerminC = GUICtrlCreateMenuItem("Markierten Termin entfernen", $ContextTermin)
    $KillAllTerminC = GUICtrlCreateMenuItem("Alle Termine entfernen", $ContextTermin)

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

    ; Tab 7 - Adressbuch
    $Tab7 = GUICtrlCreateTabItem("Adressbuch")
    $Adressbuch = GUICtrlCreateListView("Name|Adresse1|Adresse2|TelefonNr|HandyNr", 7, 53, 626, 370)
    $ContextAdress = GUICtrlCreateContextMenu($Adressbuch)
    $KillAdressC = GUICtrlCreateMenuItem("Markierten Kontakt entfernen", $ContextAdress)
    $KillAllAdressC = GUICtrlCreateMenuItem("Alle Kontakte entfernen", $ContextAdress)

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

    ; Tab 8 - Browser
    $Tab8 = GUICtrlCreateTabItem("Browser")
    $InputURL = GUICtrlCreateInput("", 7, 53, 626, 20)
    $BrowserWindow = GUICtrlCreateObj($Browser, 7, 78, 626, 345)
    _IENavigate($Browser, "http://google.de/")

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

    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)
    _GUICtrlListView_SetExtendedListViewStyle($Terminliste, $iExListViewStyle)
    _GUICtrlListView_RegisterSortCallBack($Terminliste)
    _GUICtrlListView_SetExtendedListViewStyle($Adressbuch, $iExListViewStyle)
    _GUICtrlListView_RegisterSortCallBack($Adressbuch)
    #EndRegion Main-GUI

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

    #Region Menu-GUI
    $aMainPos = WinGetPos($MainGUI)
    $MenuGUI = GUICreate('', 640, 23, $aMainPos[0], $aMainPos[1] + 23, $WS_POPUP, Default, $MainGUI)
    $Datei = GUICtrlCreateMenu("Datei")
    $Laden = GUICtrlCreateMenuItem("Öffnen", $Datei)
    $SpeichernInTab = GUICtrlCreateMenuItem("Alles speichern", $Datei)
    $SpeichernInDatei = GUICtrlCreateMenuItem("Tab speichern in Datei", $Datei)
    GUICtrlCreateMenuItem("", $Datei)
    $Drucken = GUICtrlCreateMenuItem("Drucken", $Datei)
    GUICtrlCreateMenuItem("", $Datei)
    $Beenden = GUICtrlCreateMenuItem("Beenden", $Datei)

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

    $Bearbeiten = GUICtrlCreateMenu("Bearbeiten")
    $Kopieren = GUICtrlCreateMenu("Kopieren", $Bearbeiten)
    $KopierenAll = GUICtrlCreateMenuItem("Alles kopieren", $Kopieren)
    $KopierenMark = GUICtrlCreateMenuItem("Nur Markierung kopieren", $Kopieren)
    $Delete = GUICtrlCreateMenu("Löschen", $Bearbeiten)
    $DeleteAll = GUICtrlCreateMenuItem("Alles löschen", $Delete)
    $DeleteMark = GUICtrlCreateMenuItem("Nur Markierung löschen", $Delete)
    $Ausrechnen = GUICtrlCreateMenu("Ausrechnen", $Bearbeiten)
    $ZeichenAll = GUICtrlCreateMenuItem("Zeichen - Alle", $Ausrechnen)
    $ZeichenLine = GUICtrlCreateMenuItem("Zeichen - Zeile", $Ausrechnen)
    $Sichern = GUICtrlCreateMenu("Sichern", $Bearbeiten)
    $TextSetzen = GUICtrlCreateMenu("Festsetzen/Lösen", $Sichern)
    $TextFestsetzen = GUICtrlCreateMenuItem("Tab festsetzen", $TextSetzen)
    $TextLoesen = GUICtrlCreateMenuItem("Tab lösen", $TextSetzen)
    $TabsFestsetzen = GUICtrlCreateMenuItem("Alle Tabs festsetzen", $TextSetzen)
    $TabsLoesen = GUICtrlCreateMenuItem("Alle Tabs lösen", $TextSetzen)
    $Textlaenge = GUICtrlCreateMenu("Text längen Limit", $Sichern)
    $Textlaengesetzen = GUICtrlCreateMenuItem("Setzen", $Textlaenge)
    $Textlaengeentfernen = GUICtrlCreateMenuItem("Entfernen", $Textlaenge)
    $Einfuegen = GUICtrlCreateMenuItem("Einfügen", $Bearbeiten)
    $Backmake = GUICtrlCreateMenuItem("Rückgängig", $Bearbeiten)
    $Ausschneiden = GUICtrlCreateMenuItem("Ausschneiden", $Bearbeiten)
    $MarkAll = GUICtrlCreateMenuItem("Alles markieren", $Bearbeiten)
    $DatumTime = GUICtrlCreateMenuItem("Datum und Zeit", $Bearbeiten)
    $Ersetzen = GUICtrlCreateMenuItem("Suchen/Ersetzen", $Bearbeiten)
    GUICtrlCreateMenuItem("", $Bearbeiten)
    $NewTabName = GUICtrlCreateMenu("Tab Namen ändern", $Bearbeiten)
    $NewTabName1 = GUICtrlCreateMenuItem("Tab 1", $NewTabName)
    $NewTabName2 = GUICtrlCreateMenuItem("Tab 2", $NewTabName)
    $NewTabName3 = GUICtrlCreateMenuItem("Tab 3", $NewTabName)
    $NewTabName4 = GUICtrlCreateMenuItem("Tab 4", $NewTabName)

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

    $Termine = GUICtrlCreateMenu("Termine")
    $AddTermin = GUICtrlCreateMenuItem("Termin hinzufügen", $Termine)
    $Termin2 = GUICtrlCreateMenu("Termin entfernen", $Termine)
    $KillTermin = GUICtrlCreateMenuItem("Markierten Termin", $Termin2)
    $KillAllTermin = GUICtrlCreateMenuItem("Alle Termine", $Termin2)

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

    $Adressen = GUICtrlCreateMenu("Adressbuch")
    $AddAdress = GUICtrlCreateMenuItem("Kontakt hinzufügen", $Adressen)
    $Adressen2 = GUICtrlCreateMenu("Kontakt entfernen", $Adressen)
    $KillAdress = GUICtrlCreateMenuItem("Markierten Kontakt", $Adressen2)
    $KillAllAdress = GUICtrlCreateMenuItem("Alle Kontakte", $Adressen2)

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

    $Optionen = GUICtrlCreateMenu("Optionen")
    $TransMain = GUICtrlCreateMenu("Transparents", $Optionen)
    $TransON = GUICtrlCreateMenuItem("Transparent setzen", $TransMain)
    $TransOFF = GUICtrlCreateMenuItem("Transparents aufheben", $TransMain)
    GUICtrlSetState($TransOFF, $GUI_DISABLE)

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

    $Hilfe = GUICtrlCreateMenu("Hilfe")
    $Funktionen = GUICtrlCreateMenuItem("Funktionen", $Hilfe)
    $UberHastyNotes = GUICtrlCreateMenuItem("Über", $Hilfe)
    $Update = GUICtrlCreateMenuItem("Update", $Hilfe)
    #EndRegion Menu-GUI

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

    #Region - StartFunc/GUI
    GUISetState(@SW_SHOW, $MainGUI)
    GUISetState(@SW_SHOW, $MenuGUI)

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

    _Logread()
    #EndRegion - StartFunc/GUI

    [/autoit]