Textselektion in Tabellenzellen welche den Text unten anordnen

  • Hallo,

    in einer Tabelle werden Texte an der Unterkante der Tabellenzelle angezeigt, die Tabellenzeile kann dabei auch mal 10 Text-Zeilen hoch sein.

    Wird nun ein Teil des Textes mit der Maus oder per Code selektiert, ist nicht nur der Text selbst blau hinterlegt, die Textmarkierung reicht so hoch wie die Zelle ist und das sieht für den Anwender unschön aus!

    Ich möchte die Markierung des selektierten Textes nur so hoch haben wie der Text selbst ist (wie z.B. auch wenn der Text oben in der Tabellenzelle steht).

    Auf welchem Wege wäre das zu bewerkstelligen?

    Ich habe ja SelStart, SelLength, kann man den selektierten Textteil die Zeichen mit einem anderen Hintergrund hinterlegen?

    SetStyle funktioniert ja nur für komplette Paragraphen...

    Ciao

    Stefan

  • Hallo,

    da ich irgendwie weiterkommen wollte, habe ich im ChangeSelection folgenden Code, nachdem ich in den ViewOptions mit wpHideSelection die Anzeige des selektierten Texteils abgeschaltet habe:

    Code
    procedure WPRichTextChangeSelection(Sender: TObject);
    begin
      WPRichText.SelectedTextAttr.SetBGColor(clBlue);
      WPRichText.SelectedTextAttr.SetColor(clWhite);
      WPRichText.DelayedReformat;
    end;

    Nur wie setze ich das Blau/Weiß im nächsten ChangeSelection wieder zurück, dass immer nur das selektierte diese Farbe hat?

    Hierfür fehlt mir irgendwie der Ansatz...

    Gibt es da eine Möglichkeit?

    Ciao

    Stefan

  • Zitat

    Ist dieses visuelle Problem wirklich so kritisch?

    Für meinen Chef schon ;-) , besonders wenn die Tabellenzeile sehr viel höher als eine Zeile ist, sieht das doch recht komisch aus.

    Es wird erwartet, dass ich ein bestehendes Projekt welches Lieferscheine / Rechnungen / etc. darstellt, auf WPTOOLS umstelle und für die Kunden soll optisch am besten alles so aussehen wie seit 'zig Jahren gewohnt.
    Ich halte diese Anforderung auch für verständlich...

    Wenn es in absehbarer Zeit ein Update gibt wäre das hervorragend, dann kann ich mich anderen Punkten des Projekts widmen!

    Trotzdem wäre es für mich interessant zu erfahren wie man nur ein paar einzelne Zeichen eines Paragraphen in Schriftfarbe / Hintergrundfarbe ändert ;-)

    Ciao

    Stefan

    Edit:

    Bin schon am Download der neuen Version, vielen Dank!

    Einmal editiert, zuletzt von skoschke (6. Juli 2018 um 07:00)

    • Offizieller Beitrag

    Wenn es in absehbarer Zeit ein Update gibt wäre das hervorragend, dann kann ich mich anderen Punkten des Projekts widmen!

    Wie immer gibt es die Lösung extrem zeitnah: WPTools 8.05 is available now!

    Zitat

    Trotzdem wäre es für mich interessant zu erfahren wie man nur ein paar einzelne Zeichen eines Paragraphen in Schriftfarbe / Hintergrundfarbe ändert ;-)

    Der code mit SelectionAttr ist ja richtig - das Problem ist hier die Änderungen wieder zurückzunehmen. Das geht nur mit sehr grossem Aufwand, da man ja die bisherige Position speichern muss. Allerdings könnte der Anwender etwas geändert haben womit die Positionen nicht mehr stimmen. Daher ist der Ansatz in OnChangeSelection keine gangbare Möglichkeit.

    Um ein paar Zeichen zu ändern entweder übe eine Auswahl oder über per low level code über par.CharAttr und dem AttrHelper.

    Die Demo Unit "G) Low Level\CreateTable\WPCreateDemoText.pas" zeigt wie das geht.

    • Offizieller Beitrag
    Zitat

    Markiert man mit der Maus einen Teil des unten stehenden Textes, ist die Markierung hellblau korrekt so hoch wie der Text, markiert man aber alles wird die Markierung wieder so hoch wie die ganze Tabellenzelle!

    Das ist mit Absicht so implementiert.

    Intern gibt es dafür sogar eine eigene Abfrage - wenn der gesamte Absatz markiert wird, wird die gesamte Zelle markiert dargestellt - so war dies in der Vergangenheit auch.

    Sie können die Abfrage

    if (iSelectFrom=0) and (iSelectTo>=PaintPar.CharCount) then

    in WPRTEPaint.pas abschalten, wenn Sie das anders haben wollen.