TParagraph.HeightTotal und Tabellenzeilenhöhe

  • Hallo,

    ich habe Tabellenzeilen in der Höhe begrenzt

    Code
    row.ASet(WPAT_BoxMinHeight, H);
    row.ASet(WPAT_BoxMaxHeight, H);

    und möchte nun reagieren, wenn der Benutzer mehr Text eintippt wie in die Zelle passt.

    Daher wird im KeyUp folgendes gemacht:

    Code
    par := fWPRichText.ActiveParagraph;
    // Texthöhe;
    th := par.LineHeight(0) * par.LineCount;
    //oder par.HeightTotal
    // Zellenhöhe
    par.ParentRow.AGet(WPAT_BoxMaxHeight, zh);
    if th > zh then
      begin
          showmessage('zu hoch');   
      end;

    aber die Zeilenhöhe wird viel größer ermittelt als die Höhe des Textes, selbst wenn dieser eine Zeile mehr hat als dargestellt werden kann!

    (Beispiel Texthöhe ca. 720 und Zeilenhöhe Tabelle ca. 1780)

    Werden hier unterschiedliche "Einheiten" verwendet (das eine in Twips, das andere in Pixel?) und wenn ja wie kann ich umrechnen?

    Leider gibt die Hilfe nur an, das das Integer Werte sind, aber nicht welche Einheit...

    Ciao

    Stefan

    • Offizieller Beitrag

    Eine einfache Lösung wäre es, in KeyUp einen Timer zu starten der asynchron dann die Tabellenhöhe prüft.

    Der Ansatz mit dem ShowMessage gefällt mir aber dennoch nicht, ich würde eher mittels OnCustomLinePaintBefore (Siehe TextBox demo) den Hintergrund einfärben sobald es zu einem Überlauf kommt. Der vorgeschlagene code in KeyUp würde nämlich so oder so nicht berücksichtigen, wenn es durch einen Spaltenänderung zu einem Überlauf kommt.

    Grüsse,

    Julian

  • Stimmt, danke für den Tip!

    Auch eine Änderung der Schriftgröße durch den Anwender würde nicht berücksichtigt!

    Ich schau mir mal OnCustomLinePaintBefore an, vielleicht ist das der bessere Ansatz...

    Was mich momentan noch optisch stört, sind die dicken schwarzen Pfeile, die erscheinen, wenn man die Maus oberhalb einer Tabellenspalte oder neben einer Tabellenzeile hat.

    Da komplette Spalten oder Zeilen bei mir nicht markiert werden sollen, würde ich das gern abschalten, habe aber noch keine Option dafür gefunden?

    Ciao

    Stefan

  • Danke!

    Nun bin ich aber über ein Problem gestoßen, was die Höhe eines Paragraphen betrifft:

    Ich habe die Zeilenhöhe in der Tabelle festgelegt mit MinHeight und MaxHeight.

    Beim Prüfen ob der Text in der Höhe noch passt habe ich erst par.HeightTotal versucht und dabei festgestellt, dass die Höhe nicht größer wird als die Zelle zulässt, egal wie viel Text ich dazutippe!

    Gut, dachte ich addiere doch die einzelnen Zeilenhöhen

    Code
    th:=0;
    for i := 0 to par.LineCount-1 do
       th:=th+par.Lines[i].Height;

    aber dabei musste ich feststellen, dass dabei die LineCount bei Erreichen des unteren Zellenrandes nicht größer wird!

    Wie bekomme ich nun die Höhe des Paragraphen die er hätte wenn er nicht durch die Zelle beschränkt würde?

    Ich hoffe das Problem verständlich erklärt zu haben?

    Ciao

    Stefan