Funktion von "ActiveParagraph"

  • Hallo,

    ich habe eine Tabelle im Body des Dokuments und in Textboxen im Header je ebenfalls eine Tabelle mit einer Zeile und einer Spalte.

    Jetzt möchte ich im Code herausfinden, ob ich in einer Tabelle in der Textbox oder der Haupttabelle bin.

    Befindet sich der Cursor in der Haupttabelle bekomme ich bei WPRichText1.ActiveParagraph.Name oder .GetText die Werte der aktuellen Zelle wie erwartet.

    Befindet sich der Cursor aber in einer "Textboxtabelle" dann sind Name und GetText leer!

    Ich habe dann herausgefunden, dass WPRichText1.ActiveText.Kind = wpIsBody ist!

    WPRichText1.Table ist Nil!

    Ich stehe doch aber in einer Tabelle, die sich im Header befindet!

    Wie kann man erkennen, in welcher Tabelle man sich befindet?

    Ciao

    Stefan

  • Hallo,

    ich habe jetzt lange gesucht, nur OnChangeCursorpos schien relevant.

    Also es wird beim Klick auf eine "Textbox-Tabellenzelle" aufgerufen, ActiveParagraph und alles andere ist korrekt.

    Greife ich mit einem Event (z.B. Doppelklick auf WPRichText) auf ActiveParagraph zu ist der ebenfalls noch korrekt.

    Habe ich aber einen Butten neben dem WPRichText welcher das Gleiche auslösen soll, ist ActiveParagraph falsch!

    Ein ChangeCursorpos wird aber nicht gefeuert wenn das WPRichText den Focus verliert, der Cursor steht auch noch sichtbar in der betreffenden Zelle wenn es die Haupttabelle war und nach dem Buttonclick ein WPRichtText1.Setfocus aufgerufen wird.

    Das Gleiche dann in der Textboxtabelle und da ist der Cursor danach verschwunden, wenn das Setfocus ausgeführt wird, dabei kommt nun auch ChangeCursorPos und CPPosition ist 0!

    Irgendwelche Ideen dazu?

    Ciao

    Stefan

    • Offizieller Beitrag
    Zitat

    Habe ich aber einen Butten neben dem WPRichText welcher das Gleiche auslösen soll, ist ActiveParagraph falsch!

    So habe ich es getestet und ActiveParagraph las in meinem Test immer noch den Text in der Tabellenzelle aus. (!)

    ActiveParagraph ist auch nicht "falsch", es ist nur so, dass irgendwie in Ihrem Projekt die Position des Cursors geändert wird - bzw. der aktive Layer verlassen.

    SetFocus setzt nicht unbedingt die cursor position.

    OnLeaveRTFDataBlock wird normalerweise aufgerufen wenn durch einen Klick ein Layer (also Header/Footer/TextBox) verlassen wird. Wenn Sie den even abfangen und in dem Handler einen breakpoint plazieren, können Sie vermutlich anhand des Stacks herausfinden, wieso der wechsel stattfindet.

    Andere Gelegenheiten für breakpoints finden sich in WPRTEDEFS.pas:

    function TWPRTFDataCursor.MoveTo(paragraph: TParagraph ...)

    procedure TWPRTFDataCursor.set_RTFData(x: TWPRTFDataBlock);