Beiträge von wpsupport

    I tested again - cannot find a problem in 8.01.1 -

    so please try if it really makes a difference which text you enter. If unicode text is a problem.

    Sometimes it happens that the compiler finds DCU units in different locations. If an older version is combined with a new one, problems can happen anywhere in the program.

    Please also add

    {$HIGHCHARUNICODE ON}

    to WPINC.INC. It may make a difference.

    Einen Header fügt man ja so ein:

    Code
       WPRichText1.HeaderFooter.Get(wpIsHeader,wpraNamed,'MICKEY').WorkOnText := TRUE;
       WPRichText1.InputString('WPTools Documentation');
       WPRichText1.WorkOnText := wpIsBody;

    und aktivieren kann man den dann so gemäss Seitenzahl PageNo

    Code
    procedure TForm1.WPRichText1GetSpecialText(Sender: TObject;
      par: TParagraph; PosInPar, PageNr: Integer; Kind: TWPPagePropertyKind;
      var IsLastPage, UseThis: Boolean; var SpecialText: TWPRTFDataBlock);
    begin
      // We use 'Get' to find the header or footer
      SpecialText := WPRichtext1.HeaderFooter.Get(Kind, wpraNames, 'MICKEY' );
      // Only then the variable is actually used
      UseThis := TRUE;
    end;


    Speichern in RTF geht natürlich nicht, da dort nur die standard header positionen unterstützt werden.

    Der code zum zeichenweise auslesen der Attribute muss neu geschrieben werden, PTAttr gibt es nicht mehr.

    WPTools speichert seit V5 die Attribute mittels eines Zeichenattribute index wertes. Dieser wird in dem array par.CharAttr gespeichert.

    Das höchstwertigste byte von CharAttr wird für interne Zwecke verwendet, also bitte den Wert &FFFFFF nehmen.

    Diesen kann man dann WPRichText.AttributeHelper.CharAttr zuweisen und erhält über dieses Interface die Möglichkeit die Attribute auszulesen.

    Im Manual ist eine Einführung für die Datenstrukturen. Praktischerweise ist für gleiche Attribute der Wert vom CharAttr gleich. Dadurch muss man nur neu auswerten, wenn sich CharAttr ändert.

    pc^ kann einfach durch par.CharItem[i] ersetzt werden.

    pa^.width gibt es nicht mehr, dafür aber CharPos[i].Width

    Seit WPTools 5 werden die Zeilen nicht mehr umgebrochen in einzelne Blöcke innerhalb eines Absatzes. Stattdessen werden in par.Lines die Anfangsposition sowie die Länge jeder Zeile gespeichert.

    Im wesentlichen dient der Code dazu einen Paragraph Zeichen für Zeichen durchzuscannen und
    Text mit gleichen Textattributen zusammengefasst als Text-Elemente für eine eigenes Format
    zu konvertieren.

    Um ein eigenes Format zu realisieren würde ich aber eher einen writer programmieren. Der HTML writer aus WPIOHTML.pas kann hierfür als Vorbild dienen.

    Grundsätzlich erscheint die Textbox immer auf der Seite auf der ihr Anker WPTextObj eingefügt wurde.

    Man müsste also eine feste neue Seite mit inputString(#12) erstellen und in den neuen Absatz dann die Textbox einfügen.

    CPPage ist nicht unbedingt immer exakt da ein Absatz ja über mehrere Seiten gehen kann. Das einfügen der Textbox verschiebt den text, die Formatierung wird ungültig. Insgesamt gesehen scheint mir dies kein gutes Vorgehen zu sein.

    Ich würde die Textboxen in spezielle Header texte einfügen und die Header dann für einzelne Seiten aktivieren mit OnGetSpecialText.

    Das ReformatAll ist da scheinbar wirkungslos?

    Wird das nicht ausserhalb der Schleife aufgerufen?

    Alpha is defined like this:

    Alpha : Integer; // 0 or Alpha in range 1..255.

    So to make it opaque please either use the value 0 or 255. It is not a percentage values.

    COMPDF_MouseAddOneDrawObject purpose is to create a rectangle with the mouse. If you need to create it without user input you need

    You will not be able to select the object with the mouse since this command does not switch the mouse mode.

    Hallo,

    TWPRichText.FindParagraph arbeitet komplett unabhängig von der cursor position.

    Um mehrere Absätze der Reihe nach abhängig von ihrem jeweiligen Namen zu bearbeiten oder auszulesen geht man so vor:

    Code
      par :=  WPRichText1.BodyText.FirstPar;
      while par<>nil do
      begin
        if par.Name='ARTIKEL' then ....
        par := par.Next;
      end;

    Wenn man auch in Header und Footer sowie TextBoxen suchen will

    Code
    par :=  WPRichText1.RTFData.FirstPar;
      while par<>nil do
      begin
        if par.Name='ARTIKEL' then ....
        par := par.GlobalNext;
      end;

    Grüsse,

    Julian ZIersch

    Diese Zeile

    WP.ActiveText := WP.BodyText;

    positioniert den Cursor ganz am Anfang wodurch auch dort mittels AddTable die Tabelle erstellt wird. Das problem ist, dass die TextBox dann Teil der Tabelle ist was nicht geht.

    Sie brauchen

    WP.ActiveText := WP.BodyText;

    WP.CPPosition := MaxInt;

    Damit die Tabelle nach dem TextBox absatz erstellt wird.

    Bitte rufen Sie ausserdem auf:

    WPRichText1.HeaderFooter._CheckTableHeightInFormat := false;

    Beste Grüsse,

    Julian Ziersch

    Mit der gezeigten Technik "cell := row.AppendNewCell();" liesse sich auch eine mehrzeilige Tabelle erstellen.

    Code wie dieser wird mit steigender Anzahl der Abätze langsamer da LastPar ja immer neu ermittelt wird.

    WP.ActiveParagraph := WP.BodyText.LastPar;

    Es ist daher immer schneller direkt mit den Absatz Referenzen zu arbeiten und insbesondere die letzte Referenz zu nutzen um weitern Inhalt zu produzieren.

    Das fragliche Anzeige Problem kann ich allerdings nicht erkennen - grundsätzlich arbeitet WPTools immer Seiten basiert und da müssen Umbrüche an manchen Stellen eingebaut werden.

    Wenn Sie eine durchgehende Tabelle brauchen sollten Sie die Zellen über den Name der Zelle anstatt dem Namen der Tabelle adressieren. Namen für Reihen können nicht gespeichert werden.

    Ich befürchte ein Dokument mit 5000 tabellen überfordert manchen RTF "consumer". Das Layout leidet auch.

    (Ich habe den Titel des Beitrags so angepasst, dass er einen Hinweis auf die enthaltene Fragestellung bzw. Lösung enthält.)

    Grüsse,

    Julian

    In dem code werden 5000 Tabellen mit je 1 Zeile und 1 Reihe erstellt - welches Problem löst dies?

    Wie sie ja schon gesehen haben ergibt sich eine andere Höhe durch den Umbruch. Probieren Sie den Umbruch für Tabellen in FormatOptions abzuschalten.,

    Weniger Overhead hat diese code: