TWPTextObj erstellen, auflisten und bearbeiten

  • Ich erzeuge eine Textbox im Header und möchte später damit etwas machen.

    Zum Testen habe ich folgenden Minimalcode:

    Die Zeile

    Code
    i := WPRichText1.TextObjects.Count;

    soll nur angeben ob was vorhanden ist, später dann beim Erstellen der Liste

    Code
    WPRichText1.TextObjectsGetList(list, wpobjTextObject, true);

    ist list.count dann aber 0 groß!

    Hintergrund:

    Ich wollte in der Schleife alle Textobjekte Tag = 0 setzen, um im OnTextObjectPaint das gerade selektierte gelben Hintergrund (Tag = 1) und alle anderen weißen Hintergrund zu zeichnen.

    Wo liegt mein Denkfehler?

    Ciao
    Stefan

    • Offizieller Beitrag

    Um das gerade selektierte zu markieren reicht es aus den Pointer auf das selektierte mit dem zu zeichnenden Textbox zu vergleichen. Mann muss dafür nicht die Liste durchlaufen. Ich hatte in 2017 das entsprechende Event eingebaut:

    procedure TWPPremTest.WPRichText1BeforePaintLayer(Sender: TObject;

    Editor: TWPRTFEnginePaint; RTFData: TWPRTFDataBlock; Canvas: TCanvas;

    R: TRect; InEditor, IsEditing: Boolean);

    begin

    if InEditor and IsEditing and (RTFData.Kind = wpIsOwnerSelected) then

    begin

    Canvas.Brush.Style := bsSolid;

    Canvas.Brush.Color := $eaefea;

    InflateRect(r,-5,-5);

    Canvas.FillRect( r );

    end;

    end;

    Zitat

    ist list.count dann aber 0 groß!

    Das liegt daran, dass Sie hier kein Objekt des Types wpobjTextObject sonder eine TextBox erstellen. TextBoxen haben wie Bilder den Typ wpobjImage.