Seite 1 von 1
[Gelöst] loadComponentFromURI in eingebetten Frame
Verfasst: Fr, 13.01.2012 15:14
von jemies
Hallo
(Hinweis: Ich benutze LibreOffice 3.4.4. Ich erlaube mir dennoch, hier zu posten, weil ich alles, was ich für mein kleines Skript brauchte, hier bzw. bei den englischsprachigen KollegInnen dieser Seite zusammen gesammelt habe. Bitte um Nachsicht. Ich habe den Fehler bzw. Vorgang auch in meiner VirtualBox mit OpenOffice-3.3 auf WindowsXP untersucht. Dort stürzte OOO-3.3 bereits etwas früher ab.)
In einem Dokument mit einem Formular (Thema: "standalone-Form") habe ich einen Frame mit der Eigenschaft Name="Viewer" (per GUI) angelegt. Mit folgendem Code versuche ich ein file.odt, das ebenfalls ein Formular enthält, in den Frame mit der Eigenschaft Name="Viewer" zu laden:
Code: Alles auswählen
function fnOpenDoc(sFile)
DIM sURL AS String
DIM oFrame As Object
sURL = ConvertToURL(sFile)
fnOpenDoc = StarDesktop.CurrentComponent.CurrentController.Frame.loadComponentFromURL(sURL, oFrame, 0, Array())
end function
sub OpenDocToViewer
Dim oDoc As Object
Dim oFrame As Object
Dim sFile As String
Dim oDoc2 As Object
' Get the document that this macro is embedded into.
oDoc = ThisComponent.CurrentController.Frame
' Get the Viewer-Frame within the Document.
oFrame = oDoc.findFrame("Viewer",0)
sFile = "pathtofile/file.odt"
oDoc2 = fnOpenDoc(sFile)
end sub
Nachdem der Code ursprünglich zwei- oder dreimal funktioniert hat, erhalte ich nun regelmäßig einen Absturz mit folgender Fehlermeldung:
Die vermutlich mit
diesem Bug zusammenhängt.
Muss ich das Ziel aufgeben, dass die per Button aufgerufenen Dokumente in einem Frame des übergeordneten Dokumentes angezeigt werden? Oder hat jemand eine bessere Idee?
Dank und Gruß
jemies
Re: loadComponentFromURI in eingebetten Frame führt zu SIGSE
Verfasst: Fr, 13.01.2012 16:28
von Frieder D.
Hallo jemies
jemies hat geschrieben:(Hinweis: Ich benutze LibreOffice 3.4.4. Ich erlaube mir dennoch, hier zu posten, weil ich alles, was ich für mein kleines Skript brauchte, hier bzw. bei den englischsprachigen KollegInnen dieser Seite zusammen gesammelt habe. Bitte um Nachsicht. Ich habe den Fehler bzw. Vorgang auch in meiner VirtualBox mit OpenOffice-3.3 auf WindowsXP untersucht. Dort stürzte OOO-3.3 bereits etwas früher ab.)
Dieses Forum ist nicht von Apache, sondern privat. Und solange OO und LO noch kompatibel sind ist dass kein Problem.
jemies hat geschrieben:
Nachdem der Code ursprünglich zwei- oder dreimal funktioniert hat, erhalte ich nun regelmäßig einen Absturz mit folgender Fehlermeldung:
Die vermutlich mit
diesem Bug zusammenhängt.
Muss ich das Ziel aufgeben, dass die per Button aufgerufenen Dokumente in einem Frame des übergeordneten Dokumentes angezeigt werden? Oder hat jemand eine bessere Idee?
Falls es wirklich mit dem oben genannten Bug zu tun hat, empfehle ich dir die(sowieso stabilere) Version
LO3.3.4 manuell zu installieren.
Mit der Mitgelieferten Version von Ubuntu gibt es sowieso mehrere Probleme.
Die Installation ist in der readme -Datei gut erklärt. Vergiss aber nicht die Desktop-Integration nach der eigentlichen Installation zu installieren.
(das deutsche Sprachpaket muss auch manuell installiert werden.)
Du kannst vorher natürlich unter Windows XP die Portable Version testen, um zu schauen, ob es in der 3.3.4 läuft.
Gruß Frieder
Re: loadComponentFromURI in eingebetten Frame führt zu SIGSE
Verfasst: Sa, 14.01.2012 09:26
von F3K Total
Hallo,
ich bin kein "Frame"-Kenner, habe mal rumgestöbert. Im SDK steht unter
"constants group FrameSearchFlag"
AUTO
const long AUTO = 0;
Usage Restrictions
deprecated
Description
no longer supported
Using of this flag will do nothing. Use right combination of other flags instead of this one.
jemies hat geschrieben:oFrame = oDoc.findFrame("Viewer",0)
D.h., die
0 funktioniert nicht mehr.
Ich habe durch "try and error" folgende Lösung herausbekommen, sie ist auch "etwas" kürzer als die ursprüngliche:
Code: Alles auswählen
sub OpenDocToViewer
sFile = "pathtofile/file.odt"
oDoc2 = fnOpenDoc(sFile)
end sub
function fnOpenDoc(sFile) as object
sURL = ConvertToURL(sFile)
fnOpenDoc = StarDesktop.CurrentComponent.CurrentController.Frame.loadComponentFromURL(sURL, "_self", 2, Array())
end function
Gruß R
Re: loadComponentFromURI in eingebetten Frame führt zu SIGSE
Verfasst: Sa, 14.01.2012 10:50
von balu
Hallo jemies,
wenn Du schon Crossposting betreibst, dann sag das wenigstens. Das gehört sich so. Ist einfach nur höflicher so.
http://www
Gruß
balu
[edith]
link entfernt, da im anderen Forum der Thread vom OP gelöscht wurde.
[/edith]
Re: loadComponentFromURI in eingebetten Frame führt zu SIGSE
Verfasst: Sa, 14.01.2012 11:21
von jemies
Dank erst einmal für die Antworten.
@balu
Das ist mir sehr peinlich. Ich habe den Artikel - könnt ich schwören - im openoffice-forum vor der Veröffentichung hier gelöscht - hab ich aber scheinbar eben nicht. Habe ich jetzt nachgeholt. Bitte um Entschuldigung.
@Frieder D
Falls es wirklich mit dem oben genannten Bug zu tun hat, empfehle ich dir die(sowieso stabilere) Version LO3.3.4 manuell zu installieren.
Stimmt. Habe es ausprobiert, und LO3.3.4 stürzt nicht ab. Super.
Leider zeigt sich nun, dass der Code nicht tut, was es soll. Das Verhalten des Codes hängt sehr davon ab, an welcher Stelle sich zum Zeitpunkt des Aufrufes der sichtbare Curser befindet.
Auch die Versíon von
F3K Total führt nicht zu dem gewünschten Ergebnis, denn sie öffnet ein komplett neues Fenster, anstatt in einem eingebetteten Frame.
Mein Ziel ist,
- innerhalb einer TextDatei einen Frame einzufügen (als eingebetteten SubFrame sozusagen); habe ich per GUI getan
- diesen Frame mit dem Namen "Viewer" zu versehen; habe ich ebenfalls über den Dialog in der GUI getan
- um nun über Schaltflächen verschiedene Dokumente gezielt in diesem benannten Frame zu öffnen.
Wie erzeugt man einen Frame als subFrame innerhalb eines Dokumentes?
Weiß jemand Rat?
Dank und Gruß
Re: loadComponentFromURI in eingebetten Frame führt zu SIGSE
Verfasst: Sa, 14.01.2012 12:54
von balu
Hallo jemies,
Entschuldigung angenommen. Ich habe den Link hier auch gelöscht.
Sorry, das ich dir nicht helfen kann, aber das übersteigt momentan noch meine Kenntnisse. Aber hast Du schon mal bei
Dannenhöfer vorbeigeschaut?. Vielleicht steht dort ja was dazu.
Gruß
balu
Re: loadComponentFromURI in eingebetten Frame führt zu SIGSE
Verfasst: Fr, 20.01.2012 13:03
von jemies
Ich habe nun eine Methode gefunden und will sie nicht vorenthalten:
Zunächst erzeugt man per GUI einen ganz normalen Rahmen (Nicht: Frame) und nennt ihn unter dem Register "Zusätze": Name = RahmenName.
Dann kann mit folgendem Makro der ggf. bestehende Text in diesem Rahmen ersetzt werden.
Das ganze macht Sinn, wenn man den Namen der Datei, deren TextContent eingefügt werden soll (in meinem Fall ein Formular), per Button-Eigenschaft "ZusatzInformationen" übergibt ( vgl.:
http://user.services.openoffice.org/en/ ... 022#p82565. Das Makro muss dann dem Button als Ereignis zugewiesen werden.
Code: Alles auswählen
sub GetTextContentFromFileAndInsert(oEv)
REM Ansatz dannenhöfer
REM http://www.dannenhoefer.de/faqstarbasic/DokumentEinfgen.html#DokumentEinf%FCgen
Dim sPath AS String
Dim sFile AS String
DIM sURL AS String
Dim sPrevFormName as String
DIM sButtonTag AS String
Dim oDoc
Dim oTargetFrame
Dim oFrameCursor
DIM sFName as String
oDoc = ThisComponent
sPath = "/home/jemies/01_Dokumente/02_springinsfeld/datenbank/"
REM Get FileName From Button-Property "Tag"
REM See: http://user.services.openoffice.org/en/forum/viewtopic.php?f=39&t=18022
cWhat = com.sun.star.text.GenericTextDocument
oModel = oEv.Source.getModel()
sButtonTag = oModel.Tag
sFile = Char10 & sPath & Char10 & sButtonTag & Char10
sURL = ConvertToURL(sFile)
sFName = "RahmenName"
Dim myInsertProps(0) as New com.sun.star.beans.PropertyValue
' myInsertProps(0).name = "ReadOnly"
' myInsertProps(0).value = true
oTargetFrame = oDoc.TextFrames.getByName ( sFName )
oFrameCursor = oTargetFrame.Text.createTextCursor()
oFrameCursor.gotoend( true )
oFrameCursor.InsertDocumentFromUrl(sURL,myInsertProps())
oFrameCursor.gotoStart( true )
REM Damit das Display der Seite nach dem Laden längerer Texte nicht ans Seiten-Ende rutscht,
REM wird der Cursor an den Anfang des Viewer-Rahmens gesetzt
myViewCursor = oDoc.GetCurrentController.ViewCursor
myViewCursor.gotoRange(oFrameCursor,false)
end sub
Dank auch noch einmal für den Verweis auf Dannenhöfer, der hat mir sehr geholfen.
Gruß
jemies