Posts by wpsupport

    In diesem Fall machen die Textboxen natürlich SInn. Das Beispiel verwendet ja eine Variable txtobj, man kann also die Textbox auf der Seite genau platzieren:

    Code
    1.     txtobj := WPRichText1.InputTextbox('', w,h,true);
    2.     txtobj.PositionMode := wpotPage;
    3.     txtobj.RelY := WPCentimeterToTwips(4);
    4.     txtobj.RelX := WPCentimeterToTwips(1);

    TableAdd fügt die Tabelle an der Cursor Position ein, diese ist nach ActiveParagraph := par am Anfang dieser Zeile. Die Tabelle wird also richtigerweise davor eingefügt.


    Damit sollte es dann gehen:

    Code
    1.    WPRichText1.Clear;
    2.    WPRichText1.InputString(#13);
    3.    WPRichText1.TableAdd(3,1,[wptblActivateBorders]);

    InputString(#13) simuliert hier die Betätigung der Return taste und man landet am Anfang einer neuen Zeile.

    Ich habe so den Verdacht die Textbox ist in einer wiederholten Header Zelle gelandet. Dann müsste sie in der Tat wiederholt angezeigt werden.


    Wie bei der Textbox frage bereits gesagt - ich halte dies für eine sehr komplizierte Art um eine Adresse einzufügen und würde das selber nicht so machen.


    Wenn Sie die Adresse geschützt im Dokument unterbringen wollen, dann bietet sich hier auch ein Kopftext nur für Seite 1 an. Dieser Bereich könnte dann auch gesperrt sein.


    Man braucht also vor der Tabelle zumindest eine Zeile (also einen Absatz) welcher den Anker der Textbox aufnehmen kann.


    Die Sache mit dem Scrollen kann ich so nicht nachvollziehen. Ich würde nach der Erstellung des Textes, wenn man also fertig ist, ReformatAll aufrufen, die Cursor Position setzen mit CPPosition und dann auch den Focus reinsetzen - SetFocus.


    Die Bildschirmposition müsste dann entsprechend upgedatet werden.


    Während der automatischen Erstellung scrollt WPTools meist nicht mit - das ist natürlich Absicht und führt zu der hohen Performance die man bei WPTools beobachten kann.

    DelayedReformat formatiert wenn die Applikation Zeit hat, das ganze wird intern über PostMessage implementiert.


    ReformatAll sollte man normalerweise verwenden und zwar ganz zum Schluss, wenn alles gemacht ist.


    Mit CPPosition wird die Cursor position geändert, wenn Sie also ein Objekt am Anfang des Textes einfügen wollen, brauchen Sie CPPosition := 0 - was dann auch wieder nach oben scrollt.


    Um die Scrollbar zu sperren gibt es LockScreen/UnLockScreen - man kann aber auch die Eigenschaft TopOffset auslesen bzw. beschrieben umd die scrollposition zu ändern.

    Nun, ich würde die Adresse nicht nicht in die Textbox schreiben sondern in den Body ganz am Anfang, das wird sonst alles viel zu kompliziert.


    Aber ok, in die Textbox geht es so:


    Hier wird zuerst die Position zwischen gespeichert mit DropMarker, dorthin wird zurückgekehrt mit GotoMarker(true)


    Die Tabelle wird eingefügt - CPMoveBack geht eine position zurück, also in die letzte Zelle der Tabelle.


    Wenn in der Tabelle können dann noch Eigenschaften gesetzt werden, wie die absolute Zeilen höhe und Tabellen breite.

    Derzeit wird die Grösse der Textbox immer von Ihrem Inhalt kontrolliert - im Grunde handelt es sich bei der Textbox auch nicht um eine Box mit einem Inhalt sondern um eine Referenz auf eine Textebene. Die Textebenen werden verwendet für Kopf- und Fusszeilen, Fussnoten und text boxen.


    Das TWPTextObject ist eine Referenz auf eine Bild, Textbox oder kann auch ein eingebetteter code sein wie ein Feld oder Hyperlink. Die Modes werden nur für manche der Möglichkeiten verwendet.


    Eine Adresse würde ich aber auf keinen Fall mittels TextBox auf einen Brief platzieren.


    Dies geht besser mittels einer Tabelle. Hier kann man dann auch neine feste Zeilenhöhe einstellen sodass die Mindestgrösse immer gleich ist.


    In die Tabellenzelle kommt dann Mischfeld (InputMailMergeField) welches dann mit MergeText gefüllt werden kann.

    If you create a new class which inherits from a standard class such as TCustomEdit you need to set the property

    StyleLookup.


    Example:

    StyleLookup := 'comboeditstyle';


    Otherwise the controls stays empty at paint time.

    I don't know why this has not be encoded into the FireMonkey core, but the often used VCL "Invalidate" can be simply implemented into a control class as

    InvalidateRect( RectF(0,0,Width,Height) )


    If a standard FMX control should be drawn the call would be


    SomeControl.InvalidateRect( RectF(0,0,SomeControl.Width,SomeControl.Height) )

    Surprisingly the controls in Firemonkey have the properties Left and Top - but they do not control the position of a control (such as a TEdit) on the form.


    In contrast to VCL controls the properties Position.X and Position.Y must be used instead.


    This fact sometimes causes problems which are hard to find, since no syntax error is triggered but the code simply does not work.


    The properties Width and Height work as expected.

    Diese TParagraph property wird auch als ZAHL in RTF gespeichert: WPAT_PARID


    Die folgenden properties kann man auch frei verwenden, sie werden in RTF nicht gespeichert, wohl aber im WPT format.

    WPAT_USER und WPAT_USER2


    Wie üblich kann man die properties schreiben mit


    par.ASet( WPAT_PARID, value) und lesen mit


    if par.AGet(WPAT_PARID, value ) then

    process (value).


    Oder man liest den wert mit


    value := par.AGetDef( WPAT_PARID, 0)


    Prinzip bedingt kann value nur Integer werte enthalten die in 3 byte passen

    No, the word converter only work with older version of office.


    In the meantime we have a native DocX loading and saving which does not require any other DLLs. This special support is available for WPTools 7 and 8.

    Grundsätzlich geht das Gewollte in WPTools nicht, so wie es in Word (=Wordprozessor) auch nicht geht.


    Es gibt Möglichkeiten ein derartiges Verhalten zu simulieren. Das geht über Ereignisse welche zur Ausgabezeit auslösen. Die Technik muss aber auf Basis der konkret ausgegebene Daten entwickelt werden - allgemein gültig ist das nie da man auf Feldnamen zugreifen muss.

    Ich kann Ihnen hier gerne helfen - im "free" support kann dieser Service aber nicht enthalten sein.


    Der event DoTextObjectPaintCalcEvent kommt in einer der Demos vor - es handelt sich um ein Event welches einem TWPTextObjekt zugewiesen wurde, also von diesem ausgelöst wird.