Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Nächste untere Navigationsebene bei mousemove aufklappen

Begonnen von Ferenz71, Mai 19, 2016, 19:07:28

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

nun, Access ist halt kein Entwicklungprogramm für visuelle Darstellungsformen..

Das Flackern wird eher schwierig zu unterbinden sein.  Möglicherweise gelingt es mit dem Trick, über eine "Merk"-Variable das erste MouseMouve-Ereignis zu erkennen und damit das Ereignis (d. h. den dahinerliegenden Code) bei weiterem Auftreten zu überspringen.

Bei der leeren Fläche handelt es sich vermutlich um den Detailbereich eines Forms.  Der sollte auch ein MouseMove-Ereignis besitzen...


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

#16
Hallo Ferenz,
eine mögliche Option wäre auch die Verwendung des "Kontextmenüs", sprich Commandbar Klasse.
Die sollte man zwar per Klick (auch linke Maustaste) vom ersten Element  (Commandbutton oder Label) öffnen - was meiner Meinung nach bei der ersten Ebene eh besser ist. Danach geht eh alles per MouseMove - aber ohne Flackern.
Es spielt auch keine Rolle wie viele Ebenen du hast und verwendest eine fertige Klasse bei der du dich um nichts mehr kümmern musst.

LGM

Ferenz71

Hallo DF6GL,
Dein Trick hat prima funktioniert  :). Als Merker habe ich einfach die Hintergrundfarbe gewählt, weil die dem Anwender sowieso anzeigen soll wo er sich befindet. Nach dem selben Prinzip habe ich auch das Flackern während dem Mousemove des Detailbereichs unterbunden. Jetzt fehlt mir noch der Pfeil im Label, der anzeigt in welche Richtung die nächste Auswahl aufklappen wird. Ich habe im Anhang ein Bild hinterlegt, in dem ich die Pfeile mit einem gelben ovalen Kreis markiert habe. Ich habe dazu nur eine Lösung gefunden. Ich soll die Schriftart auf "Wingdings" ändern und ein bestimmtes Symbol auswählen, aber wenn ich das mache, dann ist der Text meines Labels auch im Wingdings. Gibt es da nicht einen Trick?
Hallo markus88,
ich bin mir nicht ganz sicher was Du mit "Kontextmenüs" meinst. Ich habe nämlich die Commandbar ausprobiert, die erstellt mir jedoch ein Add-In als Registerkarte und in den Gruppen ein Add-In Button. Auf der Microsoftentwicklerseite steht dazu, dass die Commandbar in der weiteren Entwicklung von Office nicht mehr berücksichtigt wird, da die Ribbons in XML programmiert werden.
Zitat"CommandBar"-Objekte wurden in einigen Microsoft Office-Anwendungen durch die neue Menüband-Komponente der Microsoft Office Fluent-Benutzeroberfläche abgelöst. Suchen Sie in der Hilfe nach dem Stichwort "Menüband", um weitere Informationen zu erhalten.
https://msdn.microsoft.com/de-de/library/office/ff862548.aspx
Jetzt sehe ich aber auch einen Artikel über commandbar class. Jedoch nicht unter MS Office, sondern unter msdn.microsoft.
Wie kann ich die in VBA einbinden? Die Bibliothek des commandbar Objekts musste ich auch zusätzlich in die Entwicklerumgebung einbinden. Die commandbar class ist nur unter C#, C++ und VB beschrieben. Geht die commandbar class unter VBA überhaupt?
Viele Grüße
Ferenz

markusxy

Kontextmenü ist das was erscheint, wenn du die rechte Maustaste drückst.
Wenn du z.B. auf einem Formular oder einen Button drückst siehst du das Standard Kontextmenü.
Dieses kann man mit der Commandbar erstellen. Früher hat man es auch für das Menüband->Ribbon  verwendet, jetzt nur noch für das Kontextmenü.
Verweis auf Microsoft Office Object Library setzen, dann siehst du die Objekte im Objekt Explorer und kannst die Hilfe dazu verwenden.

Hier ist der Link.
https://msdn.microsoft.com/de-de/library/office/ff865005.aspx

Ich verwende die recht oft, da man sie auch dynamisch erstellen kann und mehrere Ebenen ideal darstellen kann - z.B. wenn es Einschränkungen bei unterschiedlichen Rechten geben soll.
LG



Ferenz71

#19
Hallo markus888,
das klingt sehr interessant :). Ich verstehe nur nicht wie ich die Commandbar in das Formular einbetten soll.
Muss ich zuerst ein commandbar Steuerelement erzeugen wie dieses hier?
Set myControl = CommandBars("Custom").Controls _
    .Add(Type:=msoControlComboBox, Before:=1)
With myControl
    .AddItem Text:="First Item", Index:=1
    .AddItem Text:="Second Item", Index:=2
    .DropDownLines = 3
    .DropDownWidth = 75
    .ListHeaderCount = 0
End With

Wie bekomme ich das Steuerelement in das Formular und wie positioniere ich es oder muss ich den Kontext an die Labels hängen, die ich bereits erstellt habe? Ich müsste dann nur den Kontext erstellen wie das hier, oder, wenn denn das überhaupt möglich ist?
Set myBar = CommandBars _
    .Add(Name:="Custom", Position:=msoBarTop, _
    Temporary:=True)
With myBar
    .Controls.Add Type:=msoControlButton, ID:=2
    .Visible = True 
End With
MsgBox (myBar.Context)


LG Ferenz

DF6GL

Hallo,


hier gibt es eine Beschreibung:
http://www.access-basics.de/index.php/Kontextmenues.html
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

Hallo Ferenz!
das Thema ist vielschichtig, aber es lohnt sich.
Wenn die Commandbar sich nicht verändert, dann kannst du sie erstellen und dem Steuerelement fix zuordnen.
Bei jedem Steuerelement gibt es im Eigenschaftsblatt den Punkt Kontextmenüleiste, dort kannst aus den erstellten Commandbars auswählen.
Bei einem rechtsklick wird dann das Menü angezeigt.
Wichtig ist halt die onAction Eigenschaft des Commandbars. Die bestimmt welche Public Funktion aufgerufen wird, wenn das Element angeklickt wird.

Kleines Beispiel als Anregung:
Sub CommandbarCreate()
    Dim oCB As CommandBar
    Dim oCbPopup As CommandBarPopup
    Dim oButton As CommandBarButton
    Dim sAction$
   
    On Error Resume Next
    CommandBars("Test").Delete
    On Error GoTo 0
   
    Set oCB = CommandBars.Add("Test", msoBarPopup)
    sAction = "=Action()"
   
    Set oButton = oCB.Controls.Add(msoControlButton)
    With oButton
        .Caption = "Action 1"
        .OnAction = sAction
        .Parameter = 1
        .FaceID = 499
    End With
   
    Set oButton = oCB.Controls.Add(msoControlButton)
    With oButton
        .Caption = "Action 2"
        .OnAction = sAction
        .Parameter = 2
    End With
   
    Set oCbPopup = oCB.Controls.Add(msoControlPopup)
    oCbPopup.Caption = "Ebene2"
    oCbPopup.CommandBar.Name = "Ebene2"
   
   
    Set oButton = oCbPopup.Controls.Add(msoControlButton)
    With oButton
        .Caption = "Action 3"
        .OnAction = sAction
        .Parameter = 3
        .FaceID = 19
    End With
   
End Sub
Public Function Action()
    Dim oCBB As CommandBarButton
   
    Set oCBB = CommandBars.ActionControl
    MsgBox "Action " & oCBB.Parameter

End Function

LG Markus

Ferenz71

Hallo Franz und Markus,
danke für die Beschreibungen. Die Commandbar- und Commandbutton Verschachtelung ist echt super mit seinen vielen Möglichkeiten gegenüber meiner Labellösung wie bspw. die Gruppenbildung, das langsame Aufklappen der Ebene oder der FaceID :)
Ich habe jedoch den Kontextaufruf an das Mousemove-Ereignis gekoppelt, weil ich dem User nicht den Rechtsklick zumuten kann.
Jetzt hätte ich noch ein paar Fragen:
1. Die commandbar poppt jetzt sofort beim Label auf, da ich den Kontextabruf an das mousemove gekoppelt habe. Ungeschickterweise poppt die Commandbar genau dort auf wo sich der Mauszeiger befindet. Die commandbar soll aber direkt unter dem Label linksbündig aufpoppen. Wie ist das möglich?
2. Die commandbuttons haben auch keine Farbeigenschaft, denen ich eine Farbe zuordnung kann. Wie ändere ich die Farbe der commandbuttons und deren Ebenen?
3. Wozu dient eigentlich der Parameter beim commanbarbutton?
Die Beschreibung bei https://msdn.microsoft.com/de-de/library/ff862239.aspx sagt mir nichts.
Was macht bspw. Parameter-Wert 1 oder 2.
LG Ferenz

markusxy

#23
Zitat von: Ferenz71 am Mai 26, 2016, 14:38:13
1. Die commandbar poppt jetzt sofort beim Label auf, da ich den Kontextabruf an das mousemove gekoppelt habe.

Das Kontextmenü ist immer direkt beim Mauszeiger.
Im Prinzip kann man nur vorher den Mauszeiger positionieren (falls du nicht weißt wie es geht - goolge weiß alles - und dann die Commandbar anzeigen.
Damit das sinnvoll ist würde ich aber die Commandbar nur mit Klick öffnen. Du kannst es ja so machen, dass es mit der rechten und er linken Maustaste erscheint.

Zitat
2. Die commandbuttons haben auch keine Farbeigenschaft, denen ich eine Farbe zuordnung kann. Wie ändere ich die Farbe der commandbuttons und deren Ebenen?
Kenn da keine Weg.
Da gibts nur den Weg über die Standard Formulare.

Zitat
3. Wozu dient eigentlich der Parameter beim commanbarbutton?

Hast du schon in der VBA Hilfe nachgesehen?
Ist eher überflüssig. So was wie der Tag.
LG Markus

Ferenz71

Hallo Markus und Franz  :),
den Kontext öffne ich mit dem Mausklick. Ich habe die Formularposition innerhalb Windows ermittelt und dadurch die Maus in Relation zum Label positionieren können.
Ihr habt mir echt super geduldig meine noch so banalen Fragen beantwortet. Wichtig für mich ist auch eine Antwort zu erhalten auf Fragen, die keine Lösung besitzen, weil es keine Möglichkeit gibt. Das erspart mir sehr viel Rechercheaufwand.
Super herzlichen Dank :)
Ich wünsche euch alles Gute
Ferenz



markusxy

@Ferenz
schön das es funktioniert hat.
Du bist immerhin in der Lage Vorschläge auch selbst umzusetzen, was Hilfestellung sehr erleichtert.
LG Markus