Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: chris2212 am 13.03.06 - 09:50:30

Titel: RichText Formatierung (Tab)
Beitrag von: chris2212 am 13.03.06 - 09:50:30
Hallo,

via ODBC hole ich mir aus Navision Daten, welche
formatiert in einem computed RichText Feld dargestellt
werden sollen.

Mein Problem da bei ist ein Feld in dem sich die Beschreibung
befindet, da mir die Länge des Feldes nicht bekannt ist, klappt
die Darstellung nicht wirklich zuverlässig :-(

Wenn der Inhalt 18 Zeichen lang ist passt es, ist es weniger
oder mehr verschieben sich meine Tabs :-(

Ich habe eine Funktion von der ich den Wert bekomme, ich habe
auch schon getestet was passiert wenn ich die Feldlänge auf
max. 40 Zeichen begrenze, hilft halt leider auch nicht, wenn der
Inahlt z.B. 27 Zeichen lang ist.


Wie kann ich "dynamisch" Tabs abhängig von der Feldlänge
in einem RichText Feld einstellen?


Anbei mein "toller" SourceCode...
Schnipp---schnipp

   .....irgendwas davor   


   Dim Body As NotesRichtextItem
   Dim BodyCondition As NotesRichtextItem
   Dim richStyle As NotesRichTextStyle
   Dim rtpStyle As NotesRichTextParagraphStyle
   Dim tabpos1 As Long
   Dim tabpos2 As Long

   
   .....irgendwas dazwischen   
   
   Set body = New NotesRichTextItem ( newDoc, "CreditMemoBody" )
   Set richStyle = session.CreateRichTextStyle
   Set rtpStyle = session.CreateRichTextParagraphStyle
      
      
   Call body.AppendParagraphStyle(rtpStyle)
      richstyle.FontSize = 9      
      richstyle.Bold = True
      Call body.AppendStyle(richStyle)
      rtpstyle.Leftmargin = 1611
      
      rtpStyle.FirstLineLeftMargin = RULER_ONE_INCH   
      rtpStyle.LeftMargin = RULER_ONE_CENTIMETER * 7
      
      tabpos1= RULER_ONE_CENTIMETER *4
      tabpos2= RULER_ONE_CENTIMETER *6
      Call rtpStyle.SetTab( tabpos1, TAB_LEFT)   
      Call rtpStyle.SetTab( tabpos2, TAB_LEFT)   
      
      Call body.AppendParagraphStyle(rtpStyle)
      Call body.AddTab(1)
      Call body.AppendText( "Credit Memo: " & CreditMemoNumber)
      Call body.AddNewline(2)
      Call body.AddTab(1)
      
      Call body.AppendText("Pos"+Chr(9))
      
      Call body.AppendText("Description")
      Call body.AddTab(6)
      
      Call body.AppendText("Quantity")
      Call body.AddTab(1)
      
      Call body.AppendText("Unit of Measure ")
      Call body.AddTab(1)
      
      Call body.AppendText("Unit Price")
      Call body.AddTab(1)
      
      Call body.AppendText("Amount")
      Call body.AddTab(2)
      
      Call body.AppendText("Line Discount")
      Call body.AddTab(2)
      
      Call body.AppendText("Begin Maintenance")
      Call body.AddNewline(1)
      richstyle.Bold = False
      Call body.AppendStyle(richStyle)         
      Call body.AddTab(1)   
      
      While(conLine.Fetch(resultListLine) > 0)
         rtpstyle.Leftmargin = 1611
         rtpStyle.FirstLineLeftMargin = RULER_ONE_INCH   
         rtpStyle.LeftMargin = RULER_ONE_CENTIMETER * 7
         tabpos1= RULER_ONE_CENTIMETER *4
         tabpos2= RULER_ONE_CENTIMETER *6
         Call rtpStyle.SetTab( tabpos1, TAB_LEFT)   
         Call rtpStyle.SetTab( tabpos2, TAB_LEFT)
         
         Call body.AppendParagraphStyle(rtpStyle)
         Call body.AddTab(1)
         
         Pos = getValue(rF_Pos.Text(0))
         Call body.AppendText(Pos+Chr(9))
         
         Description = getValue(rF_Description.Text(0))
         Call body.AppendText(Description)
         
         Select Case Len(Description) 'da hab ich versucht mit Select die Tabs entsprechend einzustellen
         Case Is < 20 :
            Call body.AddTab(6)
         Case Is < 41 :
            Call body.AddTab(3)            
         End Select      
         
         Quantity = getValue(rF_Quantity.Text(0))
         Call body.AppendText(Quantity)
         Call body.AddTab(2)
         
         Unit_of_Measure = getValue(rF_Unit_of_Measure.Text(0))
         Call body.AppendText(Unit_of_Measure)
         Call body.AddTab(3)
         
         Unit_Price = getValue(rF_Unit_Price.Text(0))
         Call body.AppendText(Unit_Price)
         Call body.AddTab(2)
         
         Amount = getValue(rF_Amount.Text(0))
         Call body.AppendText(Amount)
         Call body.AddTab(3)
         
         Line_Discount_Pct = getValue(rF_Line_Discount_Pct.Text(0))
         Call body.AppendText(Line_Discount_Pct)
         Call body.AddTab(3)
         
         Beginn_Wartung = getValue(rF_Beginn_Wartung.Text(0))
         Call body.AppendText(Beginn_Wartung)   
         Call body.AddNewline(1)
      Wend
      
      
   .....irgendwas danach


Ich habe in der Online Help schon geschaut aber so richtig schlau
bin ich daraus auch nicht geworden :-( Hier im Forum hab ich mir
den ein oder anderen Code "geklaut", da ich was die Formatierung
von RichText Feldern angeht nicht wirklich weis was es für Möglichkeiten
gibt und es halt wie immer schnell gehn muss, wollte hiermit um Eure
Unterstützung bitten.


Für jede Unterstützung dankbar!

Gruß
Chris
Titel: Re: RichText Formatierung (Tab)
Beitrag von: Axel am 13.03.06 - 10:02:57
Nimm doch anstatt von Tab eine Tabelle.

Hier http://atnotes.de/index.php?topic=28996.0 siehst du, wie man mit Script eine Tabelle anlegen kann.


Axel
Titel: Re: RichText Formatierung (Tab)
Beitrag von: Wirsing am 13.03.06 - 10:05:53
Mit Leerstellen kannste das nicht hinbekommen?

Wäre einfacher, da Du hier

      anzLeerstellen = 40 - len(Description)
      call body.AppendText(UString$(anzLeerstellen," "))

nutzen könntest...

Das setzt natürlich eine Blockschrift( z.B. Courier ) vorraus


Grüsse

Holger
Titel: Re: RichText Formatierung (Tab)
Beitrag von: chris2212 am 13.03.06 - 10:09:34
Hallo Axel,

danke für die schnelle Antwort!

Das hab ich mir schon überlegt, aber da ich hier im Forum
gelesen habe, dass es aktuell in R6 keine "einfache" Möglichkeit
gibt die im RichText Feld erzeugt Tabelle zu formatieren (z.B. Rahmen ausblenden)
habe ich mir gedacht ich realisiere die Darstellung der Daten mittels Tabs.

Ich hatte schon eine Tabelle im RichText Feld die Darstellung der Daten hat dem
"Kunden" aber nicht gefallen :-(
Wenn es eine Funktion gibt mit der es möglich ist die Rahmen auszublenden, könnte
ich auch eine Tabelle verwenden.


Konntest Du auf den ersten Blick einen Fehler finden?


Danke & Gruß
Chris
Titel: Re: RichText Formatierung (Tab)
Beitrag von: chris2212 am 13.03.06 - 10:11:50
Hallo Holger,

das könnte ich mal testen.

Kann aber etwas dauern bis ich Berichten
kann ob es geklappt hat oder nicht, da wir
in ca. 10 Min. unsere "Montagsversammlung" haben...

Danke für die Antworten!

Gruß
Chris
Titel: Re: RichText Formatierung (Tab)
Beitrag von: Axel am 13.03.06 - 10:27:34
Konntest Du auf den ersten Blick einen Fehler finden?

Nein. Wenn du keine Tabellen nutzen kannst, dann bleibt dir eigentlich nur der Tipp von Holger.
Was anderes fällt mir im Moment auch nicht ein.


Axel
Titel: Re: RichText Formatierung (Tab)
Beitrag von: chris2212 am 13.03.06 - 14:18:49
Hallo,

vielen Dank für die Unterstützung!
Ich habe es mit der von Holger vorgeschlagenen Lösung
umgesetzt.

...irgendwas davor
Description = getValue(rF_Description.Text(0))
anzLeerstellen = 50 - Len(Description)
Call body.AppendText(Description)
Call body.AppendText(Ustring$(anzLeerstellen," "))
...irgendwas danach

Nochmals vielen DANK für die schnelle Hilfe!

Danke & Gruß
Chris
Titel: Re: RichText Formatierung (Tab)
Beitrag von: Untitled am 16.03.06 - 15:26:36
Noch ein Geheimtrick zur Vervollständigung, den ich sehr gerne Verwende:

Code
Dim meinStr as String * 50
meinStr = deinStr

damit hast du in "meinStr" immer genau ein 50 Zeichen langer String. Ev. mit Leerzeichen aufgefüllt, oder falls zu lang, abgeschnitten.

Grüsse
Titel: Re: RichText Formatierung (Tab)
Beitrag von: Wirsing am 17.03.06 - 15:02:48
Wow, guter Tip!!

Danke an den Untitulierten  ;D