AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi OO Writer Textmarken werden nicht richtig "angesprungen"
Thema durchsuchen
Ansicht
Themen-Optionen

OO Writer Textmarken werden nicht richtig "angesprungen"

Ein Thema von spacewolf · begonnen am 17. Jun 2005
Antwort Antwort
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#1

OO Writer Textmarken werden nicht richtig "angesprungen

  Alt 17. Jun 2005, 13:48
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:
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;
PS: die Bookmarkersetzefunktion unterstützt auch Bilder...
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
Miniaturansicht angehängter Grafiken
textmarke1_207.jpg  
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz