BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] Open Office CommandButton per Basic ausblenden

Alles zur Programmierung im OpenOffice.org
Antworten
craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Open Office CommandButton per Basic ausblenden

Beitrag von craig » Fr 4. Nov 2016, 00:50

Hallo,

die Basic-IDE hat eine Übersetzungsroutine für VBA-Makros.
Dazu muss folgender Eintrage an oberster STelle in das Modulblatt eingegeben werden:

Code: Alles auswählen

Option VBASupport 1
ABER. nicht alles läuft perfekt :!:

Hiermal ein Ansatz für das Ansprechen eines Buttons:

Code: Alles auswählen

REM  *****  BASIC  *****
Option Explicit

Sub VisibleButton
Dim oDoc as Object
Dim oCC as Object
Dim oSheet as Object
Dim mButton(2) as Variant
Dim i as Integer

	' Referenz aktives Dokument
	oDoc=ThisComponent
' mri oDoc

	' Referenz Tabellenblatt
	oSheet=oDoc.Sheets().getByName("Tabelle1")

' mri oSheet
' mri oSheet.DrawPage.Forms.getByIndex(0)


	' Die Schaltfläche mit allen Eigenschaften, Methoden, Interfaces, usw.
	' in ein Objekt-Array laden
	for i = 0 to 2
		mButton(i)=oSheet.DrawPage.Forms.getByIndex(0).getByIndex(i)
	next i
'mri mButton(1)

REM Schaltfläche 1
' mButton(0).EnableVisible=false

REM Schaltfläche 2
' mButton(1).EnableVisible=false

REM Schaltfläche 3
' mButton(2).EnableVisible=false
	Msgbox " Der Code funktioniert bis hierhin :)",64,"Test Test Test"
End Sub
3 Buttons.ods
Beispieldatei mit dem abgebildeten Code
(54.66 KiB) 289-mal heruntergeladen
Bei Ausführung werden die Buttons in ein Objekt-Arrray geladen.
Es müssen jedoch zuvor andere Objekte geladen werden, verhält im Prinzip wie eine Pfadangabe.
Du musst auch wissen, dass ein OO Dokument (Writer und Calc) quasi aus verschiedenen Ebenen besteht.
Die Textebene und die Zeichnungsebene(u.a.)
Der Textinhalt der einzelnen Zellen liegt auf der Textebene.
Alle Zeichnungsobjekte auf der Zeichnungsebene(Drawpage)
Da die Buttons Zeichnungsobjekte sind, muss im Code der Pfad zur Drawpage angegeben werden,
damit man die Buttons ansprechen kann.
mButton(i)=oSheet.DrawPage.Forms.getByIndex(0).getByIndex(i)
Es muss aber bis zum erreichen der Buttons noch auf dies verwiesen werden:
Forms.getByIndex(0)
Entspricht den Formularsteuerelementen.

Jetzt stehst Du vor einem gewissen Problem. In der VBA-IDE werden Dir, im linken Fenster
die Eigenschaften für die Objekte angezeigt und oben im Fenster kannst Du über die Combobox die Events auswählen.
Beides fehlt bei OO.
Es gibt hierfür zwei Tools(Extensions): MRIund XRAY
Diese Tools kann man beim Start von OO gleich mitladen lassen.
Bei XRAY ist in deutsch beschrieben, wie man XRAY richtig lädt. MRI lädt man auf die Gleicheweise.
Dann stehen diese einem für die Programmierung direkt zur Verfügung.

Im obigen Code siehst Du einige auskommentierte Zeilen z.B.
' mri oDoc
Wenn Du MRI installiert und aktiviert hast, kannst Du das Hochkomma entfernen und den Code ausführen.
Es wird MRI starten und alle Informationen anzeigen, die das Objekt oDoc bzw. ThisComponent zur Verfügung stellt.

Anfänglich wird dies sehr verwirrend, scheinbar unbrauchbar vorkommen.
Mit ein wenig Übung wirst Du erkennen wie wertvoll dieses, bzw. diese Tools sind.
Beispiel:
  • MRI zeigt Dir das Fenster zum Objekt oDoc an. Dann klicke auf das Register "Properties".
  • Suche den Eintrag: Sheets
  • Das Fenster schaltet in den nächsten Modus. Wähle hier Register "Methods" aus.
  • Suche nach dem Eintrag: getByName
  • Doppelklick darauf, es wird Dir eine Auswahl von Tabellenblattnamen angezeigt.
  • Klicke auf eines dieser Blattnamen.
  • Schalte auf "Properties" um und suche nach dem Eintrage "Name" weiter rechts in
    derselben Zeile steht der gewählte Blattname.
Im Code steht dies:

Code: Alles auswählen

oSheet=oDoc.Sheets().getByName("Tabelle1")
Damit befindet sich nun das Objekt Tabellenblatt("Tabelle1") in der Objektvariablen oSheet.

Jetzt kannst Du mittels MRI auch auf die Eigenschaften, Methoden, Services, Interfaces. usw.
Halt alles, was die Entwickler diesem Objekt in seiner Grundausstattung mitgegeben haben.
Also immer in Pfadeangaben denken, hat mir zumindest geholfen mich besser zu orientieren.

Noch ein Hinweis.
Es gibt Interfaces(Schnittstellen) und diverse andere Dinge, die einem Objekt nicht unmittelbar
zur Verfügung stehen. Einem Sheet, bzw. einem Zellbereich kann man nicht in jedem Fall einen
äusseren Rahmen und inneren Rahmen per Code verpassen. Es muss zuvor eine weitere Struktur
geladen werden, der diese Eigenschaften verarbeiten kann. Auch da sind MRI und XRAY behilfch,
denn sie zeigen die einem an was erforderlich ist:

Code: Alles auswählen

BottomBorder       .table.BorderLine      -STRUCT-       148
Suchbegriff Google: OpenOffice "table.BorderLine"

So, jetzt hab ich hoffentlich nicht zuviel Blödsinn gekritzelt :lol:

Viel Spass beim Programmieren...

Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Antworten