Formular global anlegen
Moderator: Moderatoren
Re: Formular global anlegen
Hallo Bert,
ja, es hat Spaß gemacht und ich werde es sicher noch optimieren.
Allerdings sind die Informationen nur sehr schwer zu finden.
Ich meinte übrigens oooforum.org...... übrigens ein thread, in dem Du bereits selbst dort geforscht hast.
Wünsche Dir jedenfalls viel Spaß bei Deiner weiteren Arbeit und bin dankbar für weitere Tipps, um das Modul zu komplettieren.
Gruß eBayer
ja, es hat Spaß gemacht und ich werde es sicher noch optimieren.
Allerdings sind die Informationen nur sehr schwer zu finden.
Ich meinte übrigens oooforum.org...... übrigens ein thread, in dem Du bereits selbst dort geforscht hast.
Wünsche Dir jedenfalls viel Spaß bei Deiner weiteren Arbeit und bin dankbar für weitere Tipps, um das Modul zu komplettieren.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular global anlegen
Hallo eBayer,
ein Problem ist mir noch aufgefallen: das Formular "Adressen" kann nun nicht mehr bearbeitet werden, da es ja jetzt sein eigenes Menü hat. Ich vermute mal, du hast dem Formular beim Öffnen das Ereignis "configMenu" zugewiesen. Kann ich aber nun ohne Bearbeitungsmöglichkeiten im Formular nicht mehr feststellen und auch nicht mehr ändern. Sehe ich das richtig, oder hast du dir noch eine Hintertür offen gehalten?
Als Verbesserungsmöglichkeiten fallen mir gerade noch die 2 Sachen ein:
- Separatoren hinzufügen
- verschachtelte Menüs (also mit weiteren Untermenüs)
Ich werde mich da dann wohl auch mal an die Suche danach machen, denke aber, dass du eh schneller bist als ich.
Gruss
Bert
ein Problem ist mir noch aufgefallen: das Formular "Adressen" kann nun nicht mehr bearbeitet werden, da es ja jetzt sein eigenes Menü hat. Ich vermute mal, du hast dem Formular beim Öffnen das Ereignis "configMenu" zugewiesen. Kann ich aber nun ohne Bearbeitungsmöglichkeiten im Formular nicht mehr feststellen und auch nicht mehr ändern. Sehe ich das richtig, oder hast du dir noch eine Hintertür offen gehalten?
Als Verbesserungsmöglichkeiten fallen mir gerade noch die 2 Sachen ein:
- Separatoren hinzufügen
- verschachtelte Menüs (also mit weiteren Untermenüs)
Ich werde mich da dann wohl auch mal an die Suche danach machen, denke aber, dass du eh schneller bist als ich.
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular global anlegen
Hallo Bert,
Separatoren habe ich heute gelöst.
Verschachtelte Menü's.... Du kriegst den Hals wohl nie voll? *grins
Aber damit werde ich mich vorerst mal nicht befassen. Vielleicht magst Du ja?
Um das Formular zu bearbeiten, setze einfach in das Sub "configMenu" als erste Zeile ein "exit Sub" hinein.
Dann bleibt das Standardmenu erhalten.
Ich werde noch ein wenig an dem Testprogramm verschlimmbessern.... dann kann ich Dir die neue Version schicken.
Gruß eBayer
Ergänzung: Ich bin soweit fertig und hänge die aktuelle Version hier an.
Separatoren habe ich heute gelöst.
Verschachtelte Menü's.... Du kriegst den Hals wohl nie voll? *grins
Aber damit werde ich mich vorerst mal nicht befassen. Vielleicht magst Du ja?
Um das Formular zu bearbeiten, setze einfach in das Sub "configMenu" als erste Zeile ein "exit Sub" hinein.
Dann bleibt das Standardmenu erhalten.
Ich werde noch ein wenig an dem Testprogramm verschlimmbessern.... dann kann ich Dir die neue Version schicken.
Gruß eBayer
Ergänzung: Ich bin soweit fertig und hänge die aktuelle Version hier an.
- Dateianhänge
-
- PopUpTest.odb
- (14.57 KiB) 116-mal heruntergeladen
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular global anlegen
Hallo eBayer,eBayer hat geschrieben:Hallo Bert,
Separatoren habe ich heute gelöst.
Verschachtelte Menü's.... Du kriegst den Hals wohl nie voll? *grins
Aber damit werde ich mich vorerst mal nicht befassen. Vielleicht magst Du ja?
Um das Formular zu bearbeiten, setze einfach in das Sub "configMenu" als erste Zeile ein "exit Sub" hinein.
Dann bleibt das Standardmenu erhalten.
Ich werde noch ein wenig an dem Testprogramm verschlimmbessern.... dann kann ich Dir die neue Version schicken.
Gruß eBayer
Ergänzung: Ich bin soweit fertig und hänge die aktuelle Version hier an.
ich wusste ja, dass du einfach schneller bist, als ich. Ich bin zur Zeit immer noch dabei, deinen Code zu analysieren, da kommt schon die neue Version. Ich komme leider mit X-Ray und der Dokumentation nicht so richtig klar. Irgendwie kriege ich da nie so richtig gute Infos raus, die mich auch weiterbringen. Na ja, ich schau mir mal weiterhin deine Beispiele an und versuche einfach, die zu verstehen. Manche Sachen sind ja auch klar und logisch... Ich melde mich morgen wieder.
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular global anlegen
Sieht ja richtig schick aus, mit Icons und Separatoren. Hast du auch was über die Mnemonics herausgefunden? Also, die unterstrichenen Buchstaben in den Menü-Items. Die werden wohl von OOo automatisch vergeben. Ich schau mir deinen Code morgen nochmal genauer an. Vielleicht schaffe ich es ja mit den verschachtelten Menüs... 
Gruss
Bert

Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular global anlegen
Hallo eBayer,
ein kleiner Verbesserungsvorschlag. Der folgende Code wird zweimal ausgeführt. Einmal beim Löschen der bestehenden MenuBar (killStandardMenu), und einmal beim Anlegen der neuen MenuBar (setFormMenu). Da das Löschen auf jeden Fall immer zuerst stattfindet, müsste es ja reichen, diese dann ganz am Anfang für das ganze Modul zu definieren und sich dann nur einmal die Objekte zu holen.
Ansonsten wegen den verschachtelten Menüs denke ich, es müsste so ähnlich gehen, wie ich es bei Java-Programmen mache: einfach in den einzelnen Menüs anstatt ein MenuItem nochmal ein Menu aufrufen.
Ich melde mich später nochmal...
Gruss
Bert
ein kleiner Verbesserungsvorschlag. Der folgende Code wird zweimal ausgeführt. Einmal beim Löschen der bestehenden MenuBar (killStandardMenu), und einmal beim Anlegen der neuen MenuBar (setFormMenu). Da das Löschen auf jeden Fall immer zuerst stattfindet, müsste es ja reichen, diese dann ganz am Anfang für das ganze Modul zu definieren und sich dann nur einmal die Objekte zu holen.
Code: Alles auswählen
...
sMenuBar = "private:resource/menubar/menubar"
oModel = ThisComponent
If not isNull( oModel ) then
oFrame = oModel.getCurrentController().getFrame()
oLayoutManager = oFrame.LayoutManager()
oMenuBar = oLayoutManager.getElement( sMenuBar )
oMenuBarSettings = oMenuBar.getSettings( true )
oMenuBar.Persistent = false
end if
...
Ich melde mich später nochmal...
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular global anlegen
Bert, das habe ich ganz bewusst so getan!
Wenn die Routine als allgemein verwendbare benutzt werden soll, kann es ja auch mal sein, daß ich das bestehende Menü erhalten möchte. Meine Logik ist so gestrickt, daß ich beliebige MenuItems anhängen kann.
Das siehst Du übrigens ganz gut beim erzeugen der Menüs, wo ich für jedes MenuItem separat die Routine aufrufe.
Wenn ich dort zum Anfang die Menupunkte löschen würde, würde ich die gerade eingefügten ja wieder zerschlagen und nur das letzte bliebe stehen.
Ich habe das ganz bewusst so gestrickt, weil es auch für Dich oder jeden, der das Menü anpassen will, einfacher zu lesen und zu handhaben ist, wenn er sich nicht mit verschachtelten Arrays herumschlagen muß - das hat auch mir Probleme bereitet.
So wie es ist, definierst Du das MenuItem und die dazugehörigen UnterMenus und übergibst es der Routine...
und das machst Du nach folgendem Muster:
1. Altes Menü löschen, wenn gewünscht
2. von links beginnend das erste MenuItem mit den UnterMenus
3. das nächste und so weiter
Du kannst sogar bestehende PopUpMenus Punkt für Punkt auf diese Weise erweitern. Die Routine sucht sich das passende MainMenu und hängt dann das UnterMenu an
Alles klar?
Gruß eBayer
Wenn die Routine als allgemein verwendbare benutzt werden soll, kann es ja auch mal sein, daß ich das bestehende Menü erhalten möchte. Meine Logik ist so gestrickt, daß ich beliebige MenuItems anhängen kann.
Das siehst Du übrigens ganz gut beim erzeugen der Menüs, wo ich für jedes MenuItem separat die Routine aufrufe.
Wenn ich dort zum Anfang die Menupunkte löschen würde, würde ich die gerade eingefügten ja wieder zerschlagen und nur das letzte bliebe stehen.
Ich habe das ganz bewusst so gestrickt, weil es auch für Dich oder jeden, der das Menü anpassen will, einfacher zu lesen und zu handhaben ist, wenn er sich nicht mit verschachtelten Arrays herumschlagen muß - das hat auch mir Probleme bereitet.
So wie es ist, definierst Du das MenuItem und die dazugehörigen UnterMenus und übergibst es der Routine...
und das machst Du nach folgendem Muster:
1. Altes Menü löschen, wenn gewünscht
2. von links beginnend das erste MenuItem mit den UnterMenus
3. das nächste und so weiter
Du kannst sogar bestehende PopUpMenus Punkt für Punkt auf diese Weise erweitern. Die Routine sucht sich das passende MainMenu und hängt dann das UnterMenu an
Alles klar?
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular global anlegen
Hallo eBayer,eBayer hat geschrieben:Bert, das habe ich ganz bewusst so getan!
Wenn die Routine als allgemein verwendbare benutzt werden soll, kann es ja auch mal sein, daß ich das bestehende Menü erhalten möchte. Meine Logik ist so gestrickt, daß ich beliebige MenuItems anhängen kann.
kann ich gut verstehen, dass du das so gelöst hast. Mir als Anfänger ist das aber schon etwas zu viel. Ich bin gerade dabei, dein Beispiel auf das Notwendigste zu kürzen. Also nur die Teile, die mir die Menüs und Menü-Items anlegen (natürlich vorher das Standard-Menü löschen). Auch wenn das dann völlig starr und unflexibel ist, so versteh ich dann wenigstens eher, wie es funktioniert. Wenn ich das dann habe, kann ich auch versuchen, solch eine Dynamik wie bei deinem Beispiel reinzubringen. Es bringt mir dann am ehestens was, weil ich dann lerne, wie das aufgebaut ist und funktioniert. Dein Beispiel ist mir aber sehr hilfreich dabei.
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular global anlegen
Ich hab's geschafft, in einem Menü ein verschachteltes Untermenü anzulegen (die Verschachtelung wird angezeigt), aber in dieses Untermenü bekomme ich irgendwie keine weiteren Menu-Items rein. Ich hab einfach anstatt eines Menu-Items ein neues Menu hinzugefügt.
(eBayer: nicht lachen über meine vereinfachten Versuche; das ist noch nicht fertig, ich werde da noch weiter dran basteln)
(eBayer: nicht lachen über meine vereinfachten Versuche; das ist noch nicht fertig, ich werde da noch weiter dran basteln)

Code: Alles auswählen
Dim oModel as Object
Dim oFrame as Object
Dim oLayoutManager as Object
Dim oMenuBar as Object
Dim oMenuBarSettings as Object
Sub configMenu
Dim oPopupMenu As Variant
getMenuBar 'holt sich die notwendigen Objekte
deleteStandardMenu 'Standard-Menü löschen
oMenuItem = CreateMenu("Menu1", "Datei")
oMenuBarSettings.insertByIndex( 0, oMenuItem )
oPopupMenuItem() = oMenuBarSettings.getByIndex(0)
oPopupMenu = GetProperty( "ItemDescriptorContainer", oPopupMenuItem() )
oMenuItem = CreateMenuItem( ".uno:CloseDoc", "Ende1" )
oMenuItem = oPopupMenu.insertByIndex( 0, oMenuItem )
oMenuItem = CreateMenuItem( ".uno:CloseDoc", "Ende2" )
oMenuItem = oPopupMenu.insertByIndex( 1, oMenuItem )
oMenuItem = CreateMenu("SubMenu1", "Untermenü")
oMenuItem = oPopupMenu.insertByIndex( 2, oMenuItem )
oMenuItem = CreateMenuItem( ".uno:CloseDoc", "Ende3" )
oMenuItem = oPopupMenu.insertByIndex( 3, oMenuItem )
oMenuItem = addSeparator()
oMenuItem = oPopupMenu.insertByIndex( 4, oMenuItem )
oMenuItem = CreateMenuItem( ".uno:CloseDoc", "Ende4" )
oMenuItem = oPopupMenu.insertByIndex( 5, oMenuItem )
oMenuItem = CreateMenu("Menu2", "Datei 2")
oMenuBarSettings.insertByIndex( 1, oMenuItem )
oMenuItem = CreateMenu("Menu3", "Datei 3")
oMenuBarSettings.insertByIndex( 2, oMenuItem )
oMenuBar.setSettings( oMenuBarSettings )
End Sub
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular global anlegen
Hallo eBayer,
hast du einen genaueren Plan, was dieser ItemDescriptorContainer ist und was man damit machen kann/muss? Laut API-Doku beschreibt der Service ItemDescriptor ein User Interface Item, welches Teil eines User Interface Elements (Menüs, Toolbars, Statusbars) ist. Der ItemDescriptorContainer beschreibt einen optionalen Sub-Container. Wenn laut deinem Code ein Menü erstellt wird, gibt es diese 4 Properties:
1.) CommandURL (Aktion für den Menüeintrag)
2.) Label (Beschriftung)
3.) Type (Typ des ItemDescriptors) -> 0 = normaler Item, 1-3 -> Separatoren
4.) ItemDescriptorContainer (???).
Die ersten 3 Properties sind klar. Aber was macht der ItemDescriptorContainer? Ein optionaler Sub-Container? Was bedeutet das?
Laut dem Code wird ihm das zugewiesen (was ich nicht verstehe):
Gruss
Bert
hast du einen genaueren Plan, was dieser ItemDescriptorContainer ist und was man damit machen kann/muss? Laut API-Doku beschreibt der Service ItemDescriptor ein User Interface Item, welches Teil eines User Interface Elements (Menüs, Toolbars, Statusbars) ist. Der ItemDescriptorContainer beschreibt einen optionalen Sub-Container. Wenn laut deinem Code ein Menü erstellt wird, gibt es diese 4 Properties:
1.) CommandURL (Aktion für den Menüeintrag)
2.) Label (Beschriftung)
3.) Type (Typ des ItemDescriptors) -> 0 = normaler Item, 1-3 -> Separatoren
4.) ItemDescriptorContainer (???).
Die ersten 3 Properties sind klar. Aber was macht der ItemDescriptorContainer? Ein optionaler Sub-Container? Was bedeutet das?
Laut dem Code wird ihm das zugewiesen (was ich nicht verstehe):
Code: Alles auswählen
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( "com.sun.star.sheet.SpreadsheetDocument" )
oContainer = oModuleCfgMgr.createSettings()
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3