Button per Makro löschen

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

Moderator: Moderatoren

Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Button per Makro löschen

Beitrag von Stancer »

Hallo,
Ich suche ein Makro um im Writer einen Buttom zu löschen. Hatte die frage bereits im Writer gestellt, allerdings ist das dort schnell zum Makro abgedriftet, deswegen jetzt hier nochmal.
Bisher kann ich den Button per Makro verstecken, was aber nichts bringt, da er wieder erscheint sobald das Dokument in ein anderes eingefügt wird(Globaldokument).

Code: Alles auswählen


Sub Button_Ausblenden
   oDoc = thisComponent
   oController = oDoc.getCurrentController()
   oform=odoc.drawpage.forms.getbyindex(0)
   oKontroll = oForm.getByName("PushButton") 'Achtung: Namen anpassen
   oKView = oController.getControl(oKontroll)
   oKView.visible = false
End Sub
Wie kann ich den Code nun ändern, sodass er löscht und nicht nur versteckt.
OpenOffice portable 2.1, Win XP
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Button per Makro löschen

Beitrag von Toxitom »

Hey Stancer,

hmm, na ja, das ist nicht so einfach...
Jedes Kontrollelement ist einmal der Drawpage zugewiesen (und dort entfernst du es mit remove(), ist aber andererseits auch einem Formular zugewiesen, das wiederum ein Veto einlegt, wenn du das Kontrollelement entfernen willst. Der Weg ist also zweistufig:
Zuerst entfernst du das Element aus dem Formular - hat aber keinerlei auswirkung auf die Sichtbarkeit.
Dann entfernst du das Element von der Drawpage, allerdings kannst du es jetzt nur noch schwierig identifizieren, da der Name des Kontrollelentes nicht identisch ist mit dem Namen des Grafikobjektes (der ist meist nicht gesetzt. Der folgende Code entfernt deinen Button "PushBotton" aus deinem Writer Dokument:

Code: Alles auswählen

sub ButtonEntfernen
  oDoc = thisComponent
  REM entfernt die Zuordnung zur Drawpage
  odoc.drawpage.forms.getByIndex(0).removeByName("PushButton")  
  REM  entfernt den Button (die Zeichnung) aus dem Dokument
  for i = 0 to oDoc.drawpage.getCount -1
       if odoc.Drawpage.getByIndex(i).control.name = "Pushbotton" then
          odoc.Drawpage.remove(odoc.Drawpage.getByIndex(i))
       end if
  next
end sub
Eventuell musst du noch eine Fehlerabfrage einbauen, falls du noch Grafiken auf der Drawpage hast, die keine contols sind.
Aber auf der Basis solltest du weiterarbeiten können ;-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Button per Makro löschen

Beitrag von Stancer »

Hi Thomas,
vielen Dank für deine schelle Hilfe.
Hab jetzt schon ewig versucht das Makro zum laufen zu bringen, aber es kommt immer ein Fehler:NoSuchElementException in dieser Zeile:

Code: Alles auswählen

odoc.drawpage.forms.getByIndex(0).removeByName("PushButton")
Komme an dieser Stelle einfach nicht weiter. Am Namen des Kontrollelements liegts auf jeden Fall nicht.
Danke für die Hilfe.

Mfg Stancer
OpenOffice portable 2.1, Win XP
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Button per Makro löschen

Beitrag von Toxitom »

Hey Stancer,

na ja - das Element existiert nicht! Es ist schwer nachzuvollzeihen, was du schon alles gemacht hast. Aber: mal angenommen, du lässt den Code erstmalig laufen, es erfolgt eine Fehlermeldung in einer späteren Zeile - d.h., der Button wurde aus dem Formular entfernt, nicht aber aus deinem Dokument (du siehst ihn noch, er funktioniert auch noch, er gehört halt nur nicht mehr zum Formular)- jetzt würde bei jedem weiteren Aufruf des Codes genau dieser Fehler auftreten - denn das Formular hat diesen Button nicht mehr!

Kannst du über den Formularnavigator überprüfen. Ansosnten kann es natürlich noch an vielen Möglichkeiten liegen. Kein Writer-Dokument? Nicht im ersten Formular? ...

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Button per Makro löschen

Beitrag von Stancer »

Hi Thomas,
Du hast recht. Der Button existiert nicht mehr, wird aber nicht von der Drawpage gelöscht, oder besser gesagt wurde nicht.
Musste Openoffice grade nach nem Absturz neu starten und siehe da, der Button ist weg wenn ich das Makro starte.
Gibts dafür ne Erklärung???
Naja, auf jeden Fall bin ich jetzt glücklich mit dem Makro :D .
Vielen Dank Thomas.

Mfg Stancer
OpenOffice portable 2.1, Win XP
Antworten