Text von Schaltfläche zur Laufzeit ändern

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
hempelr
**
Beiträge: 23
Registriert: Mo, 05.01.2004 11:56

Text von Schaltfläche zur Laufzeit ändern

Beitrag von hempelr »

Nachdem ich mir heut den ganzen Sonntag um die Ohren und Tante Google geschlagen habe, muss ich als absolutes Greenhorn in OO-Basic ne saudämliche Frage stellen.
Es ist eine Schaltfläche in einem Dokument, diese soll je nach Wet eines Feldinhaltes einen anderen Text bekommen.
Dieses Modell von OOo-Basic ist mir als Script-Programmierer absolut verschlossen, ich begreif das leider absolut nicht ohne ein paar leichte Schläge auf den Hinterkopf.
Hier mal etwas Code (der bis auf die Änderung des Textes der Schaltfläche wunderbar läuft und das macht, was sie soll):

Code: Alles auswählen

sub ButtonProtectBuchliste
	sTabZielName = "Kontenblaetter"
	oDoc = thisComponent.getSheets()
	oAktTab = oDoc.getByName(sTabZielName)
	if oAktTab.getCellByPosition(2,12).string = "Bericht gesperrt" then
		On Error Resume Next
		oAktTab.unprotect("pw")
		On Error Goto 0
		oAKtTab.getCellByPosition(2,12).string = "Bericht frei"
		'oAktTab.getElementByName("btnProtectBuchliste").Title = "Schutz ein"
	else
		oAktTab.getCellByPosition(2,12).string = "Bericht gesperrt"
		On Error Resume Next
		oAktTab.protect("pw")
		On Error Goto 0
	    'oAktTab.getElementByName("btnProtectBuchliste").Title = "Schutz aus"
	end if
end sub
Wie kann man den Button ansprechen und seine Eigenschaften ändern, er ist einfach in Dokument oberhalb eines Bereiches, welcher einen Datenpilot enthält, in einer Zelle positioniert.

Danke für Hilfe...
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von mumpel »

Hallo!

Ungetestet.

Dim oButton1 As Object

Sub ButtonProtectBuchliste()
sTabZielName = "Kontenblaetter"
oDoc = thisComponent.getSheets()
oAktTab = oDoc.getByName(sTabZielName)
oButton1 = oAktTab.getElementByName("btnProtectBuchliste")
If oAktTab.getCellByPosition(2, 12).String = "Bericht gesperrt" Then
On Error Resume Next
oAktTab.Unprotect ("pw")
On Error GoTo 0
oAktTab.getCellByPosition(2, 12).String = "Bericht frei"
oButton1.Model.Label = "Schutz ein"
Else
oAktTab.getCellByPosition(2, 12).String = "Bericht gesperrt"
On Error Resume Next
oAktTab.Protect ("pw")
On Error GoTo 0
oButton1.Model.Label = "Schutz aus"
End If
End Sub

Code eingefügt mit VBA in HTML 2.0

Gruß, René

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von mumpel »

hempelr hat geschrieben: Dieses Model von OOo-Basic ist mir als Script-Programmierer absolut verschlossen...
Du kannst Dir auch meine Extension OOo Telefonfunktion herunterladen. Das ZIP-Archiv enthält auch den Quellcode zur Extension im HTML-Format. Kannst Du Dir ja mal anschauen und nachzuvollziehen versuchen. Vielleicht hilft Dir das ein wenig, das Starbasic-UNO-Model zu verstehen.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Benutzeravatar
hempelr
**
Beiträge: 23
Registriert: Mo, 05.01.2004 11:56

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von hempelr »

Vielen Dank für die Antwort(en).
Ist jetzt erst mal ohne die Beschriftungsänderung "fertig"gestellt.
Die genannte Makrobib schau ich mir gern an, danke für den Tipp.

Viele Grüße aus dem bitterkalten Erzgebirge an den "Rest der Welt" :)
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von mumpel »

Hat das Makro aus meiner ersten Antwort funktioniert?

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Benutzeravatar
hempelr
**
Beiträge: 23
Registriert: Mo, 05.01.2004 11:56

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von hempelr »

Sorry, bin grad auf deine Frage gestossen...
Nee, habs nicht zum Laufen bekommen, war eben nochmal dran
Ich denke, dass es irgendwie nicht das Objekt geregelt bekommt, also der Button ist nicht ansprechbar.
Gibts die Methode "getElementByName" überaupt - hab nix gefunden dazu...

Die Adresse des Buttons ist der Knackpunkt - ich werd echt noch blöd mit diesem verwurschtelten "Basic"; da sind ja verschachtelte Datenstrukturen mit verschachtelten Hashs und Listen in Perl einfacher zu handeln...
Das absolut grosse Problem ist, dass nirgendwo wirklich gute verständliche Dokumentationen zu finden ist, jeder noch so kleine Schritt ist ein Fischen im Trüben, ewiges Suchen in den wenigen Büchern und im Netz, da verliert man tatsächlich ruck zuck die Lust, weil sich kaum Erfolge einstellen.
Naja, was solls, für mehr als "einfaches" Arbeiten ist OOo halt doch nicht geeignet - viel zu kompliziert als dass ein "normaler" Mensch sich da reinfitzen könnte...schade, aber nicht zu ändern.
"Wenn ich den Armen zu essen gebe, nennen sie mich einen Heiligen. Aber wenn ich frage, warum die Armen nichts zu essen haben, schimpfen sie mich einen Kommunisten."
Dom Hélder Câmara (1909-1999) Erzbischof
Benutzeravatar
hempelr
**
Beiträge: 23
Registriert: Mo, 05.01.2004 11:56

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von hempelr »

So, Frust hatte ich im letzten Beitrag etwas abgelassen, hab dann weitergekämpft ;-)
Lösung mit Hilfe des Sun-Basic-Handbuches und Trial and Error-Methode, ist viel einfacher als gedacht.

Nurmal so zur Info auch für andere "Suchende" wies geht:

Formularelemente sind auf Zeichenebene, diese ist auf jeder Tabelle vorhanden, sie muss per Index angesprochen werden.
In "meinem" Fall heisst der Button (das was in Titel des Steuerelementeigenschaftenfensters eingetragen ist)
btnProtectTabKb, der sich auf der Tabelle mit Namen Kontenblaetter befindet.
Um nun die Eigenschaften dieses Buttons ansprechen zu können, muss man folgendes tun:

Code: Alles auswählen

	      sTabZielName = "Kontenblaetter"  ' Name der Tabelle, auf denen man ein (Formular)element ansprechen will
              sButton = "btnProtectTabKb"  ' Name des Buttons		
	      oDoc = thisComponent.getSheets()  ' Zwischenvariable - Objekt
	      oAktTab = oDoc.getByName(sTabZielName)  ' Tabellenobjekt
       ' Das imaginäre Formularobjekt der aktuellen Tabelle über seinen Index holen
       ' Warum der Index 0 ist und ob es da noch einen anderen Index bzw. weitere Formularelemente gibt,
      ' ist mir vollkommen unklar
	      oForm = oAktTab.DrawPage.Forms.GetByIndex(0) 'Formularebene auf der sich der Button befindet in Objekt-Var
       ' Hier kann jetzt der Button endlich komplett in eine "einfache" (Objekt)Var gesteckt und darüber seine Eigenschaften
       ' manipuliert werden
	      oBtnA = oForm.getByName(sButton)
      ' und hier können wir nun endlich einfach einen neuen Wert zuweisen
            oBtnA.Label = "Schutz ein"

Danke für die Gedankenanstöße und die guten Links im Forum hier - und ganz besonders für die Geduld mit meinen "Frust"-Sätzen - ich versuche mich zu bessern ;-)
"Wenn ich den Armen zu essen gebe, nennen sie mich einen Heiligen. Aber wenn ich frage, warum die Armen nichts zu essen haben, schimpfen sie mich einen Kommunisten."
Dom Hélder Câmara (1909-1999) Erzbischof
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Text von Schaltfläche zur Laufzeit ändern

Beitrag von mumpel »

Ja in manchen Dingen ist MSO eben doch besser. Soetwas lässt sich in VBA viel einfacher programmieren. Aber so schwer ist Starbaisc auch nicht. Nur dass es professionelle Hilfe für Starbasic nicht wirklich gibt, was schlecht ist für Anfänger und Umsteigewillige. Bis heute warte ich auf Antwort auf eine meiner Fragen.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Antworten