Über Dialog in fremdes Dokument schreiben?

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

Moderator: Moderatoren

Steffan
****
Beiträge: 125
Registriert: Mi, 21.06.2006 10:07
Wohnort: Dresden

Über Dialog in fremdes Dokument schreiben?

Beitrag von Steffan »

Hallo zusammen,

ich habe folgendes Problem:
Ich habe ein Writer-Dokument, dass als Steuerdokument für verschiedene andere Anwendungen dienen soll.
Das heißt, das Dokument enthält Schaltflächen, Makros und Dialoge über die andere Dokumente erstellt, geöffnet und modifiziert werden.
Jetzt möchte ich aus dem Steuerdokument beispielsweise folgendes tun:
- ein neues Writer-Dokument öffnen (klappt)
- einen im Steuerdokument gespeicherten Dialog aufrufen (klappt)
- bei Klick auf eine Dialogschaltfläche Text in das neue Dokument schreiben (klappt nicht)

Obwohl der Dialog-Schaltfläche ein Makro zugeordnet ist, dass den Text einfügt, wird das einfach nicht gestartet. Warum? Habe ich irgendeinen Denkfehler?
Hier der Code:

Code: Alles auswählen

REM  *****  BASIC  *****

dim oDoc as object

sub createDoc
'neues leere Writer-Dokument erstellen
	Dim mArgs()
	oDoc = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank", 0, mArgs())
'Dialog laden und anzeigen
	DialogLibraries.LoadLibrary("Standard")
	oDia=CreateUnoDialog(DialogLibraries.Standard.dia1)
	oDia.Execute
end sub

sub insert1
'Ausführung bei Klick auf die erste Schaltfläche des Dialoges
	insert(1)
end sub

sub insert2
'Ausführung bei Klick auf die zweite Schaltfläche des Dialoges
	insert(2)
end sub

private sub insert(i as integer)
'Dialog schließen
	oDia.EndExecute
'Text einfügen
	oText = oDoc.text
	oCursor = oText.createtextcursor()
	oText.insertString(oCursor, "Text" & str(i),false)
end sub

Zur Erläuterung lege ich eine kleines Beispiel für das Steuerdokument bei, das den Makro-Code und den Dialog enthält.

Wäre schön, wenn mir jemand helfen könnte.
Vielen Dank im Voraus,
Steffan
testDialog.odt
Beispiel für Steuerdokument
(11.17 KiB) 54-mal heruntergeladen
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Über Dialog in fremdes Dokument schreiben?

Beitrag von DPunch »

Aloha

Durch das Laden des Dokuments erhält dieses automatisch den Fokus.
Der daraufhin geladene Dialog ist sozusagen an das aktive Fenster "gebunden" - Makro-Aufrufe über diesen Dialog werden also im neu geladenen Dokument gehandled.
Dort gibt es die Prozeduren "insert1" bzw "insert2" aber nicht, daher werden diese auch nicht gestartet.

Eine Möglichkeit wäre, die Makros nicht im Dokument selber zu halten, sondern in einer "öffentlichen" Bibliothek (also z.B. Meine Makros & Dialoge -> Standard).
Steffan
****
Beiträge: 125
Registriert: Mi, 21.06.2006 10:07
Wohnort: Dresden

Re: Über Dialog in fremdes Dokument schreiben?

Beitrag von Steffan »

Hallo DPunch,

erst mal vielen Dank für Deine Antwort.
Die Idee mit Makros in der öffentlichen Bibliothek finde ich nicht so toll. Der Charme meines Steuerdokuments ist ja, dass es schreibgeschützt im Netzwerk liegt und jeder Rechner darauf zugreifen kann und so ohne lästige "lokale" Nachinstallationen alle Makros beim Öffnen dieses Dokuments zur Verfügung habe.
Aber zumindest weiß ich jetzt woran es liegt.
Ich werde jetzt wohl so verfahren, dass ich Daten zuerst sammle und als letztes das neue Dokument öffne und alles in einem Rutsch reinschreibe.

Beste Grüße,
Steffan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Über Dialog in fremdes Dokument schreiben?

Beitrag von Stephan »

ich habs jetzt nicht weiter getestet (DEin Problem ist zwar interessant, ich habe aber wenig Zeit) würde aber sagen es liegt am zentralen Makro wo Du dafür sorgen must das der Dialog initialisiert wird bevor der 'ThisComponent-Fokus' (*) das Dokument verlässt, verwende:

(*)
naja, wie nenne ich das sonst, es geht hier nicht um das eigentliche Dokument-Objekt sondern nur um seinen Bezug im Zusammenhang mit ThisComponent

Code: Alles auswählen

dim oDoc as object
Dim oDia As Object '(!)


sub createDoc

	Dim mArgs()
'Dialog laden und anzeigen
	DialogLibraries.LoadLibrary("Standard")
	oDia=CreateUnoDialog(DialogLibraries.Standard.dia1)
	'an dieser Stelle (!):
	oDoc = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank", 0, mArgs())
	oDia.Execute
end sub
den fokus mußt Du dann ggf. noch auf das neue Dokument setzen, damit es sichtbar/aktiv ist.



Gruß
Stephan
Steffan
****
Beiträge: 125
Registriert: Mi, 21.06.2006 10:07
Wohnort: Dresden

Re: Über Dialog in fremdes Dokument schreiben? [gelöst]

Beitrag von Steffan »

Hallo Stephan,

vielen Dank, so funktioniert es.

Steffan
Antworten