Beiträge von skoschke

    Hallo,

    wenn in einem 200 seitigen Dokument getippt wird, ergeben sich doch schon recht deutliche "Verzögerungen", d.h. die getippten Zeichen werden erst nach einer Verzögerung von fast 1 sec. sichtbar.

    Refresh, Repaint etc. im OnKeyUp haben nichts gebracht, gibt es eine andere Möglichkeit die getippten Zeichen sofort zur Anzeige zu bringen?

    Es gibt keinerlei weitere Events die hier das Zeitverhalten beeinflussen würden, das WPRchText ist "nackig"...

    Ciao

    Stefan

    Zusatzhinweis:

    Dieser Effekt tritt nicht auf wenn das lange Dokument nur Text beinhaltet, aber wenn da mehrere Bilder oder Tabellen enthalten sind, wird's schwergängig!

    Zitat

    Dies geht aus einem separaten Editor sofern dieser synchronisiert ist

    Was ist mit synchronisiert gemeint?

    Mein Problem ist, dass TableRow.Duplicate eine vorhandene Zeile dupliziert, ich habe aber z.B. 3 Materialpositionszeilen, dann eine Textzeile, dann eine Zwischen-Positiion oder Zwischensummenzeile, dann wieder Text, Materialpositionen usw. und das eben bunt gemischt, so wie halt z.B. ein Angebot aus dem Handwerk aussieht.

    Diese Zeilen jeweils komplett selbst zu erstellen und zu füllen dauert mir bei 3000 Positionen (die in der Praxis auch vorkommen) eben zu lange und das Einfügen "vorgefertigter" Zeilen geht eben um vieles schneller.

    Deswegen würde ich gern die Variante

    Zitat

    Wenn Sie vorgefertigte Strings verwenden müssen Sie hier ganze Tabellen abspeichern und dann die Zeile 0 rauskopieren. Dies geht aus einem separaten editor sofern dieser synchronisiert ist, also das selbe RTFProps Objekt verwendet.

    wenn ich weiß was mit synchronisiert / das selbe RTFProps Objekt verwendet gemeint ist.

    Ciao

    Stefan

    Hallo,

    um verschiedenste "vorgefertigte" Tabellenzeilen (Materialpositionszeile, Textzeile, Titelsummenzeile etc.) schnell einfügen zu können, sind diese per SaveToString zwischengespeichert.

    Ich erhoffe mir dadurch einen schnelleren Tabellenaufbau.

    Grundsätzlich funktioniert folgendes:

    Das sieht erst mal optisch korrekt aus, hat aber einen Haken:

    Die letzten Spalten enthalten Berechnungsanweisungen ('left(1)+previous(1)' )

    Diese sind in den kopierten Zeilen auch vorhanden ([wpShowParCalcNames, wpShowParCalcCommands]) doch in den Zellen steht "ERR" ab den neu eingefügten Zeilen bis zum Tabellenende.

    Auf diese Berechnungen möchte ich nicht verzichten, die sind rasant schnell bei Tabellenänderungen, selbst bei 3000 Zeilen :-)))

    Aber warum geht die Berechnung kaputt?

    Irgendwas habe ich dabei übersehen?

    Ciao

    Stefan

    Hallo,

    ich schon wieder ;-)

    Mit

    Code
    cell.ASet(WPAT_VertAlignment, 2)

    möchte ich Text (hier den Gesamtpreis) in einer Tabellenzelle unten anordnen.

    Das funktioniert auch, solange die betreffende Tabellenzeile mit (mehrzeiligem Text in einer anderen Spalte) nicht über einen Seitenwechsel reicht.

    Sobald die Zeile über einen Seitenwechsel geht, springt der Preis nach oben in der Zelle.

    Habe ich eine Einstellung übersehen?

    Der hier mal gepostete Trick

    Code
    WPRichText.rtfdata._ResizeTableRowsAfterReformat := true;

    bringt keine Besserung...

    Ciao

    Stefan

    Zitat

    Sie können also in jeder Ihrer Tabellenreihen die aktuelle Summe abspeichern, ähnlich einem laufenden Kontostand auf einem Bankauszug.

    danke, das wäre natürlich auch eine Idee, da muss ich mal drüber nachdenken!

    Dann müssten z.B. bei Änderung in Zeile 23 aber alle nachfolgenden Zeilen entsprechend aktualisiert werden, was bei 250 Seiten a' 40 Tabellenzeilen dauern kann...

    Ich denke über einen Thread im Hintergrund nach, der die Seitensummen berechnet und die Summen dann dem TextObjectPaint zur Verfügung stellt.

    Vor der Ausgabe oder dem Druck muss ich mal sehen ob das machbar ist...
    Im Prinzip sollen die Seitenüberträge ständig aktuell sein, d.h. bei jedem Tastendruck könnte ja eine Zeile höher werden oder sich ein Einzelpreis (und damit der Gesamtpreis) ändern.

    Ein TextObjectPaint wird aber nur gefeuert, wenn das entsprechende Objekt in den "Sichtbereich kommt", bzw. die Seite gedruckt wird, richtig?

    Ciao

    Stefan

    Hallo,

    zum Ermitteln der Seite zu einer Tabellenzeile funktioniert AppendTextObject('PAGE') hervorragend, ich hänge es an die erste Zelle einer Tabellenzeile an.

    Nun gibt es aber ein kleines Problem, wo ich hoffe, eine Lösung zu bekommen:

    Eine Tabellenzelle kann mehrzeiligen Text enthalten (z.B. den Text zur Position der Rechnung), die letzte Tabellenzelle enthält den Gesamtpreis.


    Dieser ist aber, vom Anwender gewünscht, unten in der Zelle angeordnet.

    Wenn diese Tabellenzeile nun über den Seitenwechsel geht, stehen z.B. 3 Zeilen Text auf Seite 3 und weitere 2 Zeilen auf Seite 4.

    Der Gesamtpreis steht auch auf Seite 4, über AppendTextObject('PAGE') aber bekomme ich den Beginn der Zelle (also Seite 3).

    Gibt es eine einfache Abfragemöglichkeit, ob die betreffende Zelle oder Zeile über einen Seitenwechsel geht?

    Danke

    Ciao
    Stefan

    Die Schleife liefert doch aber (nach einem Reformat) für alle 4 Zeilen die gleichen 106, obwohl rein optisch die oberste und unterste Zeile nur eine ganz geringe Höhe haben im Gegensatz zu den beiden mittleren Zeilen mit Text!

    Mache ich den Text in der Schriftart riesig, dann haben die beiden schmalen Zeilen 106 und die mit Text 1200...

    Ich verstehe irgendwie das Verhalten der Höhenbestimmung nicht!

    Ich habe noch ein wenig herumgespielt:

    Ich habe der schmalen Zeile oben eine andere Schriftart zugewiesen, sie enthält weiterhin keine Texte...

    Jetzt wird aus den 106 122!

    Wenn ich auf eine Zelle in Zeile 2 oder 3 in den Text klicke, hat dieser laut Toolbar keine Schriftart und keine Schriftgröße!

    Nach Einstellung von Schriftart und Größe ändert sich die ausgelesene Höhe der Zeile von 106 auf eine andere Höhe...

    Irgendwas läuft schief?

    Ciao

    Stefan

    Hallo,

    ich erzeuge eine Tabelle ungefähr so:

    Dabei entsteht die gewünschte Tabelle mit 2 normalen Zeilen in der Mitte sowie 2 schmalen Zeilen oben und unten.

    Zur Positionierung im Header benötige ich nun die (Gesamt)-Höhe dieser Tabelle.

    Table.Height gibt mir 424 zurück, durchlaufe ich alle Zeilen per Schleife

    Code
    WPRichText1.ReformatAll(false, true);
    WPRichText1.Repaint;
    h:=table.Height();  //<-- 424
    for i := 0 to 3 do
      h:=Table.rows[i].Height(); //<-- jede Zeile 106

    bekomme ich für jede Zeile 106, was beides nicht stimmen kann!

    Wie ermittle ich korrekt die Höhe dieser Tabelle?

    Danke

    Ciao

    Stefan

    Hallo,

    während der Dokumentbearbeitung muss ich entscheiden, ob ich z.B. eine Übertragszeile (Summe der Einzelpositionen bis zum Seitenende) anzeigen möchte.

    Ich dachte an den OnGetSpecialText Event, aber der wird nur einmalig gefeuert wenn eine neue Seite entsteht.

    Ich muss aber beim Hinzufügen oder Ändern einer Einzelposition alle Seiten des Dokuments entweder neue Übertragszeilen anzeigen oder bestehende mit dem neuen Wert befüllen.

    Wie kann man das am effektivsten lösen?

    Ciao

    Stefan

    eine Tabelle im Ausgangsdokument mit

    Code
    tbl := WPRichText1.FindTable('Tabelle 2');
    tablestring := tbl.SaveToString(false, 'WPT');

    wegspeichern und im neuen Dokument an Cursorposition mit

    Code
    WPRichText2.LoadFromString(tablestring, 'WPT', false);

    einfügen dürfte aber keine Probleme bereiten, oder?

    Dann muss ich nur dafür sorgen, dass falls der Cursor aktuell in einer Tabelle steht, dieser ans Ende der Tabelle verschoben wird um danach einzufügen

    Code
    while WPRichText2.ActiveParagraph.ParentTable <> nil do
          WPRichText2.CPMoveNext;

    spricht etwas gegen diese Vorgehensweise?

    Ciao

    Stefan

    Hallo,

    wie im Thread

    5000 Tabellen erzeugen - Wie Performance und Layout verbessern

    möchte ich nun mehrere kleine Tabellen in einen Text einfügen.

    Anstelle der Eigenerzeugung der Zeilen und Spalten dachte ich daran, die Tabelle ihren Inhalt aus einem String lesen zu lassen.

    So wird also die Ursprungstabelle in einen String geschrieben

    Code
    TabString := Grundtabelle.SaveToString(true,'WPT');

    und dann bei der Erzeugung des Dokuments diese Grundtabelle 100 mal eingefügt

    Code
    for i := 1 to 100 do begin
        Table := WPRichText.ActiveParagraph;
        Table := Table.AppendNewTable();
        Table.LoadFromString(TabString, 'WPT');
    end;
    WPRichText.DelayedReformat;

    Scheinbar gehen dabei aber die Zeilenhöhen der Grundtabelle sowie die Textfarbe verloren!

    Die Texteinzüge bleiben erhalten.
    Alle Zeilen der 100 eingefügten Tabellen sind gleich hoch, obwohl die Grundtabelle z.B. Zeile 1 nur minimal hoch ist (wenige Twips)

    Leider hat SaveToString keine Parameter, die das zusätzliche Speichern der Tabellenzeilenhöhen erzwingen würden.

    Was kann ich verbessern damit die Untertabellen mit all ihren Formatierungen, Texteinzügen etc. zwischengespeichert werden?

    Ciao

    Stefan

    Hallo,

    eine vielleicht einfache Frage, aber ich komme nicht weiter:

    WPRichText.FieldAtCP liefert das Textobjekt unter dem Cursor.

    Damit kann ich die Del- oder Backspace-Taste und das Tippen in einem Feld generell verhindern

    Ich möchte nun im OnKeyPress auch verhindern, dass mit Backspace ein Feld von hinten her gelöscht wird.

    Steht der Cursor aber direkt hinter dem Feld, ist FieldAtCP = nil :-(

    Wie ermittelt man ob der Cursor direkt hinter einem Feld steht?

    Ciao

    Stefan

    Das WPRichText war leer als ich mit

    Code
    WPRichtext.InputString(' ');  // <--- das ist jetzt neu
    txtobj := WPRichtext.Memo.RTFData.TextObjects.Insert
        (WPLoadObjectFromFile(WPRichtext.Memo.RTFData, FileName), 2000, 2000); 

    das Bild eingefügt habe.

    Jetzt kommt als erstes ein Leerzeichen ins RichText und dann das Bild und schon funktioniert das Laden aus dem Stream!

    Danke für den Hinweis!

    Ciao

    Stefan

    Hallo,

    ich schreibe den Inhalt eines kleinen WPRichText in einen Stream und speichere den Stream extern ab.

    Code
    WPRichtext.SaveToStream(myStream, 'WPT');

    Der Stream beinhaltet formatierten Text, hat aber auch ggf. Bilder enthalten.

    Nun erzeuge ich eine Textbox im Header eines leeren WPRichText:

    Texte erscheinen wie gewünscht in der Textbox, die ggf. enthaltenen Bilder nicht, was ist da falsch an meiner Vorgehensweise?

    Ciao

    Stefan