Hallo Mathias,
Mathias Bauer schrieb:
> Du musst schon zugeben, dass
> dein Macro
> etwas eigenartige Dinge tut.
Ja, im Prinzip schon - *wenn* ich Deine Ausführungen richtig verstehe
geschieht Folgendes:
Das Dokument 'sagt' ich _beginne_ jetzt mich zu öffnen und in diesem
Moment startet das Makro. Es ist jetzt sicher unwichtig darüber zu reden
ob mit Start des Makros der Ladevorgang des Dokuments stehen bleibt und
erst das Makro weiterarbeitet oder ob das Beides vollkommen parallel
erfolgt. Zumindest ist die Situation doch so das das Makro früher fertig
ist als das Dokument komplett geladen ist, oder diese Gefahr bestünde
wenn das Makro sehr kurz wäre. Will heißen es könnte in bestimmten
Fällen 'gut gehen' und in anderen nicht und wegen dieser 'anderen' wird
das gesamte Verfahren verworfen um auf der 'sicheren Seite' zu sein.
Nur ist mein Verständnis hier richtig?
Das hier würde ich als "Ja" deuten:
> Das
> Feature, ein Dokument *sofort* in seinem "OnLoad"-Event zerstören zu
> können
also verbal gesprochen würde es sich um ein Ereignis "Dokument wird
geladen" handeln, nur interpretiere ich das richtig?
Weil hier beschreibst Du IMHO etwas Anders:
> Du lädst ein Dokument. Wenn das Dokument mit dem Laden fertig ist,
> versendet es ein Event "Bin fertig!". Du hast per
> Konfiguration verfügt,
> dass beim Eintreffen dieses Events ein Basic-Macro ausgeführt wird.
Also verbal ein Ereignis "Dokument wurde geladen".
Ich habe inzwischen eine Lösung gefunden, nur ich würde doch gerne
wissen was als (theoretischer) Hintergrund richtig ist. Es handelt sich
bei dem Ereignis das das Makro startet, entweder um:
"Dokument wird geladen"
oder um:
"Dokument wurde geladen"
Nein, ich kann schon lesen(*), ich wollte mich nur über die Hintergründe
vergewissern.
(*)
denn wenn ich die Einträge in der Auswahl-Liste wörtlich nehme muß ja
"Dokument öffnen" dem Ereignis "Dokument wird geladen" entsprechen,
wegen der Analogie zu "Dokument sichern" und "Dokument wurde gesichert"
Ersteres könnte ich (nunmehr) gut verstehen, Zweiteres eher nicht und
könnte dann nur zur Kenntnis nehmen das:
> musste zugunsten besserer Stabilität geopfert werden.
Hier nun mein Code:
Sub Main()
dok = StarDesktop.CurrentComponent
'wegen Hilfe-Fenster
'leider noch nicht perfekt, weil es hilft nur
'bei Start eines Hilfethemas aus der Liste
'aber man kann ja jederzeit dok.Args() an
'weniger 'zentraler' Stelle nutzen
if not HasUnoInterfaces( dok, "com.sun.star.frame.XModel" ) Then
Exit Sub
Else
'"Parameter" feststellen
arg = dok.Args()
For i = LBOUND(arg()) To UBOUND(arg())
If arg(i).Name = "DocumentTitle" Then dat = arg(i).Value
Next
End if
'wurde eine "Start"datei neu geöffnet?
if Right(dok.URL,9) = "dummy.tmp" Then
If LEN(dat) = 0 Then
Msgbox "Fehler aufgetreten"
Exit Sub
End if
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
aktuell = elemente.NextElement()
If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
If aktuell.hasLocation() Then
if ConvertToURL(aktuell.GetLocation) = dat Then
aktuell.Close(true)
dok.close(True)
dim args4(0) as New com.sun.star.beans.PropertyValue
args4(0).Name = "DocumentTitle"
args4(0).Value = "* " & dat
StarDesktop.loadComponentFromURL( dat , "_blank", 0, args4() )
end if
end if
end if
Loop
Exit Sub
End If
'zweiter Dokumentstart
If LEN(dat) <> 0 AND LEFT(dat,1) = "*" Then
Exit Sub
End if
'normales Dokument
'-----------------------------------
'hier Bedingungen einbauen auf welche
'Dokumententypen das Makro wirkt bzw.
'andere Bedingungen zur Entscheidung ob
'das Makro aktiv werden soll
'------------------------------------
path = createunoservice("com.sun.star.util.PathSettings")
a_file = path.Temp & "/" & "dummy.tmp"
dim args(0) as New com.sun.star.beans.PropertyValue
args(0).Name = "DocumentTitle"
args(0).Value = dok.URL
If FileExists(a_file) Then
StarDesktop.loadComponentFromURL( a_file , "_blank", 0, args()
Else
datei_anlegen(a_file)
StarDesktop.loadComponentFromURL( a_file , "_blank", 0, args()
End If
End Sub
Sub datei_anlegen(a)
Dim iNumber As Integer
Dim aFile As String
aFile = a
iNumber = Freefile
Open aFile For Output As #iNumber
Print #iNumber, "dummy-File"
Close #iNumber
End Sub
(Einzig flackert das Ganze etwas, da ich das Dummy-Dokument
offensichtlich nicht "Hidden" laden kann, denn sonst geht der Rest nicht
mehr.)
> Aber man soll nie nie sagen. Soll heißen: ich denke darüber nach. :-)
Naja, sooo wichtig ist die Sache wohl nicht bzw. wenn Du schon bereit
wärst über was nachzudenken ... ;-)... würde ich es bevorzugen Dir
meinen favorisierten Feature-Wunsch nennen zu dürfen ... nachdem ich
Zeit hatte gründlich zu überlegen, welcher das wäre :-)
Gruß
Jörg
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]