Announcement

Collapse
No announcement yet.

Zeilenumbruch in Memo-Feld

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeilenumbruch in Memo-Feld

    Hallo,

    ich drucke den Inhalt eines DBMemo-Feldes per Quickreport (QDBRichText) aus. Nun möchte ich die Eingabe des Feldes so gestalten, daß sich die Zeilenumbrüche in der Eingabe so verhalten, wie die Umbrüche im Ausdruck, so daß der Anwender ggf. ein bißchen Einfluß auf das Druckbild hat. Wie kann ich das am elegantesten realisieren?
    Die Breite im Ausdruck ist bekannt und feststehend. (D5, Paradox)

    Danke im Voraus

    Torsten

  • #2
    Hallo Torsten<BR>
    Setze im DBMemo die Eigenschaft ScrollBars auf ssBoth.<BR>
    Dadurch werden nur wirkliche CR/LF als neue Zeilen angezeigt.<BR>
    Gruß<BR>
    Matthia

    Comment


    • #3
      Hallo Matthias,

      ich meine es anders. Wenn Text ins DBMemo eingeben wird, soll an der Stelle, an der auch der Ausdruck umgebrochen wird (würde), ein Umbruch erfolgen. So kann der Anwedner ggf. Worte abkürzen, damit sie noch auf die Zeile passen oder vorher eine Zeilenschaltung einfügen.

      Torste

      Comment


      • #4
        Hallo,<p>
        ich weiss zwar jetzt nicht, ob es effektiv was nützt, aber in einem TMemo mache ich einen Zeilenumbruch mit der uralt Methode <b>#13#10</b><br>
        Das ganze sieht also dann so aus:<br>
        'Text der in dieser Zeile steht.'#13#10'Text der in der nächsten Zeile steht.'<p>
        PS: Tabulator entspricht: #

        Comment


        • #5
          Hallo,

          wahrscheinlich habe ich mein Problem zu umständlich erklärt. Angenommen ich gebe einen Text ins Memo ein, dann wird dieser Text im Ausdruck "willkürlich" umgebrochen, eben dann, wennn die Ausgabebreite erreicht ist. In der Eingabe wird der Text an einer anderen Stelle umgebrochen, weil die Breite des Memo-Feldes dort eine andere ist. Letzteres möchte ich verhindern. Wie ich einen Zeilenumbruch erzwinge, weiß ich auch. Aber was nicht an welcher Stelle. Außerdem sollte sich das Ganze dynamisch verhalten, dh. wenn ich in einer Eingabezeile etwas ändere, soll sich das natürlich auch auf den Umbruch auswirken. Eben so, wie in dieser Eingabemaske, die ich hier gerade fülle. Ich vermute, daß die Ausgabebreite, die verwendete Ausgabeschriftart und Größe usw. da eine zwingende Bedingung ergeben, wann die Zeile umgebrochen werden muß.

          Torste

          Comment


          • #6
            Hallo,

            eine Idee wäre, zunächst alle festen RETURNS per Code zu entfernen, dann die einzelnen Lines des Memo in einer Schleife zu durchlaufen und ein RETURN anzuhängen, z.B.:
            <pre>
            for i := 0 to memo1.lines.count -1 do
            memo1.lines[i] := memo1.lines[i] + #13#10;
            </pre>
            Dabei gehen allerdings feste Umbrüche, die der Anwender eingegeben hat, verloren. Das kann man aber sicher irgendwie regeln.

            Gruß Ul

            Comment


            • #7
              Hi Torsten,<BR>
              Du müßtest dann so vorgehen:<BR>
              1. Wieviele Zeichen pro Zeile bekomme ich in den Ausdruck.<BR>
              2. Überprüfe das Memo Zeile für Zeile<BR>
              2.1 Sind die Anz. Zeichen in der Memozeile < als im Ausdruck OK<BR>
              Nein - Nehme Max Zeichen aus Memo, Lese Rest der Zeile,<BR>
              und füge neue Zeile in Memo ein.<BR>

              Ungefähr so:
              procedure CheckMemoLines;<BR>
              var<BR>
              i,v_len,v_max : Integer;<BR>
              s : String;<BR>
              begin<BR>
              v_max := 72; // Max Zeichen im Ausdruck;<BR>
              for i := 0 to Memo.Lines.Count-1 do begin<BR>
              v_len := Length(Memo.Lines[i]);<BR>
              if v_len > v_max then begin<BR> // zb. 80 Zeichen
              s := Copy(Memo.Lines[i], v_max+1, Length(Memo.Lines[i])-v_len);<BR>
              Memo.Insert([i+1],s);
              end;<BR>
              end;<BR>
              end;<BR>

              Naja, schau mal ;-)<BR>
              Matthia

              Comment


              • #8
                Hallo Matthias,

                Danke für Deine Antwort. Dein Punkt 1 ist für mich das Problem. Mein Druckfeld ist zb. 212 Pixel (width) breit. Als Schriftart Arial, Größe 12. Wenn "i" nehme oder "M" passen natürlich unterschiedlich viele Zeichen in eine Ausgabezeile. Aber wie viele? Und wie breit sind Leerzeichen?
                Sollte ich etwa die Breite jedes Buchstaben aufsummieren und bei Erreichen der Grenze das letze Leerzeichen suchen und einen Umbruch einfügen? Oder geht das auch einfacher.

                Torste

                Comment


                • #9
                  Hallo Torsten,

                  ich würde Ulis Variante nehmen. Stelle die Breite des Memos auf die Breite des Druckfeldes und dann Ulis Schleife. Da darf aber kein einzelnes Wort länger sein als dir Druckbreite.

                  mfg Klaus-Pete

                  Comment

                  Working...
                  X