![]() |
OO Writer Textmarken werden nicht richtig "angesprungen
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry Leute wenn ich schon wieder mit dem selben Problem aufwarte (Open Office)
Aber ich stehe hier vor einem für euch vielleicht nur kleinem für mich so langsam scheinbar "unlösbaren" Problem. (um mal etwas zu dramatisieren) Ich versuche seit längerer Zeit mit Delphi in Open Office zu Navigieren, so wie ich es von Word gewöhnt bin. Also Textmarken anlegen und hinein oder hinüber mit dem Text.... Und mir nicht ganz klaren Bedingungen schreibt er den Text auch rein, wenn er die Textmarke nicht findet... Um alles etwas zu beschleunigen, habe ich einfach Screenshots gemacht, vielleicht liegt das Problem ja nicht in der Programmierung, vielleicht kann ich auch einfach Open Office nicht "bedienen" :-) "Denn - weil", die Textvorlagen welche ich von Word konvertiert habe (also die Textmarken in Word angelegt wurden) funktionieren, zumindest soweit, das die Textmarken ersetzt werden und nicht davor geschrieben wird (voll verwirrend) anbei die Funktion und die Screenshots... Gottes Segen wünscht euch ein grüblender Andreas Nun die funktion die einen Bookmark ersetzt:
Delphi-Quellcode:
function TOLE_OpenOffice.ErsetzeBookmarkAlt(name:string;inhalt:string;
bmpfilename:string; hoehe,breite : smallint; bInMarke : boolean = true):boolean; var objtext, tc, bm, li, oGraphic, aPoint : Variant; i : integer; bRueck : boolean; // oHOrient oSize : variant; oCursor : variant; begin bRueck := false; try objText := Document.getText; try oGraphic := Document.CreateInstance('com.sun.star.text.GraphicObject'); except on e:Exception do frmProt.AddEx(true,e); end; tc := objText.createTextcursor; li := Document.Bookmarks.getElementNames; for i := VarArrayLowBound(li,1) to VarArrayHighBound(li,1) do begin if (uppercase(li[i]) = uppercase(name)) then begin bm := Document.Bookmarks.getbyName(li[i]); tc := Document.Text.createTextCursorByRange(bm.Anchor); if bmpfilename <> '' then // Bild statt Text ersetzen begin try bmpfilename := InsertPicture(Document,ToOOPfad(bmpfilename),'signatur'); try oGraphic.SetSize(MakeSize(breite,hoehe)); try objText.inserttextcontent(tc,oGraphic,false); try oGraphic.HoriOrient := 3; oGraphic.GraphicURL := bmpfilename; except on e:Exception do frmProt.AddEx(false,e); end; except on e:Exception do frmProt.AddEx(false,e); end; except on e:Exception do frmProt.AddEx(false,e); end; except end; // wenn die Exception abgefangen wird gibs n Stackberlauf end else begin if not bInMarke then tc.string := inhalt else begin oCursor := objText.CreateTextCursor; tc.SetString(inhalt); //objText.InsertString(oCursor,inhalt,false); end; end; bRueck := true; end; end; except on e:Exception do begin frmProt.AddEx(true,e); bRueck := false; end; end; result := bRueck; end; Zur Vollständigkeit:
Delphi-Quellcode:
PS: die Bookmarkersetzefunktion unterstützt auch Bilder...
function TOLE_OpenOffice.Open(datei:string):boolean;
var rueckgabe : boolean; begin datei := ToOOPfad(datei); try Document := Desktop.LoadComponentFromURL(datei, '_blank', 0, VarArrayCreate([0, - 1], varVariant)); rueckgabe := true; setze_Doc_Type('dummy'); except on e:Exception do begin frmProt.AddEx(true,e.ClassName,e.Message+':'+datei,13502); rueckgabe := false; end; end; result := rueckgabe; end; function TOLE_OpenOffice.MakePropertyValue(PropName, PropValue:string):variant; var Struct: variant; begin Struct := Service.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); Struct.Name := PropName; Struct.Value := PropValue; Result := Struct; end; function TOLE_OpenOffice.InsertPicture(oDoc : Variant;cUrl,cInternalName:String):string; var oBitmaps : Variant; begin result := ''; oBitmaps := oDoc.CreateInstance('com.sun.star.drawing.BitmapTable'); oBitmaps.InsertByName(cInternalName,cUrl); result := oBitmaps.GetByName(cInternalName); end; function TOLE_OpenOffice.MakeSize(weite,hoehe:integer):variant; var struct : variant; begin struct := service.Bridge_GetStruct('com.sun.star.awt.Size'); struct.Width := weite; struct.Height := hoehe; result := struct; end; PPS: habt ihr Lust ne gemeinsame Klasse TdpText zu bauen ? Wo wir TdpWord und TdpWriter drin "schachteln" und sozusagen nen kleines OpenSource "all in one" Projektchen zu basteln... ich hätte Lust drauf (Gordon ein Freund) ebenfalls |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz