Zugriff auf Dialog-Objekte

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

Moderator: Moderatoren

Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Zugriff auf Dialog-Objekte

Beitrag von Schwedenbitter »

Hallo,

ich bin neu und möchte endgültig von den M$-Werken auf OpenOffice umsteigen. In M$ W*** hatte ich durch ein Makro den Speichern-Dialog ersetzt. Gleiches wollte ich jetzt in Writer machen, stoße aber an meine Grenzen in Basic. Ich habe ein Formular gebastelt, dessen Aufruf mir auch gelingt. Allerdings bekomme ich es nicht hin, auf die Objekte (Buttons, etc.) des Dialogs zuzugreifen. Das müsste auch während der Laufzeit des Dialog-Fensters möglich sein, weil sich in Abhängigkeit der Benutzereingaben die Eingabemasken etc. ändern sollten. Aus den zahlreichen Hilfetexten werde ich nicht schlau; ebenso wie aus den Fehlermeldungen…

Soweit bin ich jetzt (schon) gekommen:

Code: Alles auswählen

Dim MyDlg As Object

Sub Main
   If isModified() Then Sichern
End Sub

Sub Sichern
   If hasLocation() Then store() Else Abfrage EndIf
End Sub

Sub Abfrage
   Dialoglibraries.Loadlibrary("Tools")
   MyDlg = CreateUnoDialog(Dialoglibraries.Standard.Fenster)
   MyDlg.Execute()
   MyDlg.Dispose()
End Sub
Ich habe weiterhin das Problem, dass der Dialog trotz Änderungen am Dokument dennoch nicht angezeigt wird. Sieht jemand das Problem. Ich mach ursprünglich viel mit Pascal/Delphi. Dort könnte man die Prozeduren Main und Sichern super zusammenfassen. Geht das mit Basic auch? Habe bereits diese Idee:

Code: Alles auswählen

Sub Main
   If isModified() Then If hasLocation() Then store() Else Abfrage
End Sub
Ich bin dankbar für jede Antwort
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Schwedenbitter,

Fangen wir unten an:
Dort könnte man die Prozeduren Main und Sichern super zusammenfassen. Geht das mit Basic auch?
Ja. So ähnlich, wie du das geschrieben hast - allerdings nicht in einer Zeile!

Code: Alles auswählen

If isModified() Then 
   If hasLocation() Then 
      store() 
   Else 
      Abfrage 
   end if
end if
Nun zu deinem anderen Problem. Was willst du denn ändern? Auf jedem Dialog liegen diverse Kontrollelemente - als Objekte. da kommst du natürlich ran - über

Code: Alles auswählen

oCtl = oDlg.getControl("NamedesKontrollelementes")
Dieses Objekt hat nun diverse Eigenschaften - und ein Modell, aus dem es abgeleitet wurde. Beides kannst du "manipulieren", sowohl das Model als auch die angezeigte "View-Ansicht".
Nur: Was genau möchtest du ändern?
Und, wie meist du das?
Ich habe weiterhin das Problem, dass der Dialog trotz Änderungen am Dokument dennoch nicht angezeigt wird.
"Main" hat in OOo Basic keine Bedeutung. Du kannst deine Funktionen nennen wie diu willst (im Rahmen der Bezeichner). Aber du musst sie natürlich irgendwie aufrufen. Wie machst du das jetzt?

Im übrigen:
MyDlg.Dispose()
Das kannst du dir sparen. Dispose() entfernt die Varaiblen aus dem Speicher - das macht OOo auch automatisch. Lass es weg, denn es kann zu unerwarteten Fehlern kommen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

Danke für die schnelle Antwort!

Ich arbeite in einer Anwaltskanzlei. Da sich eine Fachspezifische Software nicht lohnt, verwalten wir alle unsere Schriftsätze bisher über einen verständlichen Verzeichnisbaum. Um den Mitarbeitern das speichern zu erleichtern, geben diese nur noch den Kanzleistandort (Listbox), das Rechtsgebiet (ComboBox), Aktennummer und Jahr (je PatternField) und genaue Beschreibung (TextField) in einen Dialog ein. Bisher unter M$-W***. Es gibt Schreiben ohne Aktenzeichen und dafür brauche ich eine CheckBox.
Wenn die angeklickt ist, sollen alle Felder bis auf das TextField für die genaue Beschreibung unsichtbar gemacht werden und umgekehrt. Ferner existiert ein Labe, in dem nach und nach der Dateiname nach den bereits vorhandenen Angaben zusammengesetzt und angezeigt werden soll...

Ich habe jetzt

Code: Alles auswählen

oEinfach = oDlg.getControl("Einfach")
ausprobiert, wobei Einfach der Name der CheckBox ist. Groß-/Kleinschreibung habe ich beachtet.
Allerdings bekomme ich jetzt immer die Fehlermeldung "Objektvariable nicht belegt". Ich habe bereits vor dieser o.g. Zeile

Code: Alles auswählen

Dim oEinfach As Object
eingegeben. Allerdings hilft das nicht. :(
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Schwedenbitter,
Allerdings bekomme ich jetzt immer die Fehlermeldung "Objektvariable nicht belegt".
Hmm, ist denn oDlg überhaupt belegt? Sorry ich habe hier meine übliche Schreibweise genutzt, bei dir müsste es natürlich heissen "myDlg", denn so hattest du deine Dialogvaraible genannt. Ansonsten bräuchte ich den kompletten Code - evt. auch als Beispieldatei. Alles andere ist "stochern im Nebel" :wink:

Viele Grüße
Thomas

PS: auf der Homepage http://www.amt-wiesbaden.de/index.php?z ... t08&rm=r01
findest du ein paar hübsche Beispiele - gut dokumentiert (z.B. Fahrtenbuch). Vielleicht hilft dir das?
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

Ich muss mich entschuldigen. Etwa 10 Minuten nach meinem letzten Beitrag hatte ich das Problem selber gelöst.
Allerdings hatte ich nicht geantwortet, weil ich dann keine Zeit mehr hatte. Außerdem habe ich mich damit getröstet, dass bestimmt auch andere Anfänger dieses Syntax-Problem haben und eine Antwort daher nicht schaden kann.
Ansonsten bräuchte ich den kompletten Code - evt. auch als Beispieldatei.
Kann man denn mit OpenOffice.org Basic die Dateien auch separat z.B. als *.bas-Dateien speichern? Würde mich auch interessieren, weil mein Programm schon 170 Zeilen lang ist und schätzungsweise mind. doppelt bis dreimal so lang werden wird.

Gibt es außerdem noch irgendwo im Netz eine Liste mit den Befehlen vom Basic? Konkret suche ich Befehle für das Anlegen und Wechseln von Verzeichnissen.

Schließlich suche ich nach einem Befehl, mit dem man das Schließen eines Dokumentes verhindern kann. Mein Speichern-Dialog wird durch das Ereignis „Dokument schließen“ gestartet. Wenn aber der Benutzer nicht aus „Speichern“ oder „Verwerfen“, sondern auf „Abbrechen“ klickt, soll er normal weiterarbeiten können. Unter Delphi ging das mit der Property CanClose. Diese wurde zunächst auf False gesetzt und erste wenn der Nutzer das Programm beenden wollte auf True. Mein M$-W*** Makro sah „Abbrechen“ gar nicht vor. Dort musste entweder gespeichert oder verworfen werden. Aber mit dem Writer ist jetzt mein Ehrgeiz mit mir durchgegangen.
Ich setzte die letzten beiden Fragen auch in einen extra Thread, falls das gewünscht (vom Modarator) wird.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Schwedenbitter,
Kann man denn mit OpenOffice.org Basic die Dateien auch separat z.B. als *.bas-Dateien speichern?
Ja. Modulweise. Dazu nutzt du das Icon in der Symbolleiste - letztes Symbol (Basic speichern).
Gibt es außerdem noch irgendwo im Netz eine Liste mit den Befehlen vom Basic?
Viele Fundstellen sind im ersten Thread dieses Forums aufgeführt - schau dich dort einfach mal um.

Zum letzten Thema:
Also, das musst du einfach probieren. Ich habe bis jetzt noch nichts gefunden, was nicht geht - dein spezielles Problem aber noch nicht probiert.
Vom Moderator-Seite her ist ein neuer Thread nicht unbedingt gewünscht, aber aus eigenen Interesse solltest du das tun, wenn es hier keine Antworten mehr gibt. Ein eigenes Thema bietet einfach mehr Möglichkeiten, Antworten zu erhalten :wink:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

Hallo Thomas,
Ja. Modulweise. Dazu nutzt du das Icon in der Symbolleiste - letztes Symbol (Basic speichern).
Geht das auch irgendwie mit dem Formular? Ich habe gesehen, dass der Quellcode einfach als Text in der *.bas-Datei gespeichert wurde. Wenn ich mein Makro auf einen anderen Rechner portieren will, brauche ich aber das Formular. Oder muss ich das jedesmal neu bauen?
Viele Fundstellen sind im ersten Thread dieses Forums aufgeführt - schau dich dort einfach mal um.
Wird gemacht :D

Wegen des neuen Threads werde ich also noch warten.

Gruß
Alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Schwedenbitter,
Geht das auch irgendwie mit dem Formular?
Nein. Aber - wozu auch? Formualre sind doch nur Writer (oder auch andere) Dateien. Speichere dir doch einfach die Writerdatei als "Muster" - fertig.

Und falls du gar nicht "Formualre" meinst sondern "Dialoge", so wird die Sache ein wenig komplizierter. Auch die kannst du in eine andere Datei verlagern - im Verwaltungsmodus der Basic-Module - jetzt musst du aber immer die komplete Bibliothek oder eben die Module "verschieben" - also von einem Platz zum anderen.
Falls du etwas "verteilen" möchtest, so empfiehlt sich ein Installer (ein Beispiel hierfür findest du bei amt-wiesbaden -> Calc Datenmaske).
Das ist wohl die praktischste Lösung.
Seit der 2.0 gibt es darüber hinaus die Möglichkeit der "Packages", damit habe ich mich aber noch nicht beschäftigt.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

Auch die kannst du in eine andere Datei verlagern - im Verwaltungsmodus der Basic-Module - jetzt musst du aber immer die komplete Bibliothek oder eben die Module "verschieben" - also von einem Platz zum anderen.
Hallo Toxitom,

wenn ich das jetzt richtig verstehe, dann muss ich zunächst das Dokument öffnen, in dem ich mein Makro gespeichert haben will und anschließend die einzelnen Bestandteile nebst Dialog in meine Datei verschieben. Anschließend noch gut speichern und fertig bin ich?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Schwedenbitter,
wenn ich das jetzt richtig verstehe, dann muss ich zunächst das Dokument öffnen, in dem ich mein Makro gespeichert haben will und anschließend die einzelnen Bestandteile nebst Dialog in meine Datei verschieben. Anschließend noch gut speichern und fertig bin ich?
Im Prinzip schon, ja. Und zwar im Verwaltungsbereich - bei den Bibliotheken.
Aber: Erstens "verschwinden" sie beim Verschieben aus dem ursprünglichen Platz - du kannst nicht kopieren! - und zweites gibt es einige Einschränkungen bei der Bibliothek "Standard".
Und wenn du verschiebst, denk dran, dass dann eventuell manche Pfade nicht mehr stimmen - ich denke hier insbesondere an Dialoge und deren Kontrollelemente, denen du Ereignisse zugewieden hast. Dort stehen ja noch die alten Pfade drin - es erfolgt keine automatische Anpassung!

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten