Beiträge von skoschke

    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

    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

    Vielen Dank, funktioniert!

    Einen letzten Wunsch hätte ich noch:

    Im Textbox-Beispiel muss man doppelt klicken damit man die Textbox editieren kann.

    Den relevanten Code habe ich schon ins OnClick verlegt, aber es ist immer noch so dass man erst mal auf die Textbox klicken muss, dann erscheint die Umrandung mit den Anfassern und erst bei einem erneuten Klick geht es zu editieren.

    Ich hätte am liebsten, dass beim ersten Muusedown auf die Textbox der gepunktete Rahmen und der Editmodus erscheint.

    Ist das machbar?

    Ciao

    Stefan

    Aus dem Beispiel angepasster Code funktioniert, ich bekomme die Textboxen in die Header.

    Ein kleines Problem bleibt:

    Code
    textobj.Relx := 0;
    textobj.RelY := 0;

    setzt die Textbox an den linken Rand, aber nicht an den oberen!

    Ich muss noch "irgendeinen Rand" abziehen, aber wie?

    Ciao

    Stefan

    Hallo,

    beim Klick in eine Tabelle wird der OnChangeSelection-Event gefeuert, ich kann dann bestimmen in welcher Zeile / Spalte ich mich befinde.

    Beim Ändern der Cursorposition mit den Cursortasten gibt es keinen OnChangeSelection-Event?

    Ist das mit einer der WPRichText-Propertys änderbar?

    Ciao

    Stefan

    Hallo

    folgender Code erzeugt eine Textbox im OnMeasureTextPage, wenn die Seite neu ist (was ich mir merke) :

    erzeuge ich den Text im Dokument langsam einzeln und lass dem WPRichText dazwischen Zeit, wird auf jeder neuen Seite oben die Textbox dargestellt.

    Erzeuge ich aber viel Text über mehrere Seiten per Code, sind die Textboxen unsichtbar, auch wenn man im Dokument scrollt.
    Erst wenn man irgendwo ins Dokument hineinklickt werden sie sichtbar!

    Ich habe WPRichText.Repaint, WPRichText.Refresh, WPRichText.Memo.Repaint, WPRichText.Memo.Refresh nach der Texterzeugung probiert, alles ohne Wirkung!

    Gibt es noch einen Trick?

    Ciao

    Stefan

    Mit folgender Procedure erzeuge ich Textboxen:

    in den Editmode der Box komme ich per

    Code
    procedure TCSKWPTDokument.WPRichTextTextObjectClick(Sender: TWPCustomRtfEdit;
      pobj: TWPTextObj; obj: TWPObject; var Ignore: boolean);
    begin
      if obj <> nil then
        obj.Edit;
    end;

    Nun aber habe ich das Problem, wenn ich mit der Maus darin Textteile markieren möchte (um sie z.B. fett zu machen) ist die Maus so etwa um die x-Position der Box versetzt!

    Ein Klick auf den Text erzeugt dann einen Cursor 2cm weiter rechts, wenn die Box 2cm Abstand zum Linken Seitenrand hat!

    Mit gedrückter Maustaste dann Textbereiche markieren ist ebenfalls um diesen Betrag versetzt!

    Habe ich da noch eine Einstelloption übersehen?

    Ciao

    Stefan

    Hallo,

    in einer Tabelle sind mehrere Tabellenzeilen, welche jeweils einen mehrzeiligen Text enthalten.

    DontBreakTableRows ist nicht gesetzt (warum schreib ich später) und jetzt passiert folgendes:

    Wenn eine solche Tabellenzeile über einen Seitenwechsel reicht und ich zeichne einen Rahmen um diese Zeile, ist dieser Rahmen unten auf der Folgeseite genau um die Anzahl Zeilen die der Tabellenheader hat, zu tief!

    Es sieht dann optisch aus als ob der Rahmen noch Zeilen der nachfolgenden Tabellenzeile umfasst!

    Jetzt könnte man DontBreakTableRows einsetzen damit eine Tabellenzeile nie einen Seitenwechsel beinhaltet, das funktioniert aber nicht weil, wenn die erste Tabellenzeile nicht auf die erste Seite passt (viel Text) diese dann erst auf der Folgeseite beginnt!

    Wie kann ich diesen Darstellungsfehler mit zu tief angezeigtem Rahmen umgehen?

    Wenn die Erklärung unverständlich war, kann ich auch ein Beispieldokument zur Verfügung stellen...

    Ciao

    Stefan

    Ich war gerade mal auf der Downloadseite, dort liegt immer noch die WPTOOLS 8 vom 3.11.2017...

    Wann ist denn mit der erweiterten Version zu rechnen?

    Und wenn an den Textboxen etwas gemacht wird, wäre es dann auch möglich, die Border-Einstellungen auch auf "no Borders" einstellbar zu machen?

    Ciao

    Stefan

    Hallo,

    dank Patch funktioniert nun die Anzeige der Textboxen, aber editieren darin kann ich nicht :-(

    Bei einem Klick auf die Textbox erscheinen die beiden gepunkteten Headerlinien und der Cursor steht darin...

    Wie kann der Anwender nun den Text in der Box ggf. editieren?

    Ciao

    Stefan

    Nein, es soll kein Formulareditor sein, sondern z.B. Rechnungen anzeigen.

    Auf der ersten Seite steht zum Beispiel der Adressblock, die Rechnungsnummer, Projektnummer etc. und die sollen mit einem eigens entwickelten Formulardesigner frei positionierbar sein, deswegen die Inputtextboxen frei positionierbar .

    Alle Folgeseiten enthalten dann z.B. im Header die Seitennummer, das Datum etc. deren Position auch vom Anwender im Designer festgelegt wurde.

    Der "echte Textbereich" besteht nur aus einer einzigen Tabelle, welche dann aber auch mal 50 Seiten umfassen kann.

    Die Positionierung der Textboxen funktioniert ja auch, aber nicht gelöst ist das Problem dass ihr Inhalt beim Erreichen einer neuen Seite verlorengeht!

    Bei folgendem Code, hier sind Images anstelle der Textboxen, geht deren Inhalt nicht verloren!

    Wie kann ich erreichen, dass in folgendem Code, wenn er als ersten im leeren WPRichText1 die Boxen erzeugt, dann beim Füllen des Textes der Inhalt der Textboxen beim Erreichen der zweiten Seite nicht verschwindet?

    Bei wpraOnFirstPage passiert das nicht, bei wpraOnEvenPages passiert das Gleiche, die ersten Textboxen sind korrekt, wächst der Text über mehrere Seiten und die Header werden "wiederholt" verschwindet der Inhalt der Textboxen!

    Code
      RTFDataBlock := WPRichText1.HeaderFooter.Get(wpIsHeader, wpraOnAllPages , '');
      WPRichText1.ActiveText := RTFDataBlock;
      WPRichText1.InputTextbox('', 2000, 300, true).RelY := 300;
      WPRichText1.InputString('Diese Box steht im Header');
      WPRichText1.ActiveText := RTFDataBlock;
      WPRichText1.InputTextbox('', 2000, 300, true).RelY := 2000;
      WPRichText1.InputString('Diese Box steht auch im Header');
      WPRichText1.ActiveText := WPRichText1.BodyText;

    Wenn möglich oder notwendig erstelle ich auch mal ein Miniprojekt was das demonstriert, kann ich das hier irgendwie hochladen?

    Ciao

    Stefan

    Danke, aber so weit war ich anhand der Beispiele im Manual auch schon.

    Das Problem dabei:

    Ich nehme obigen Code (aber mal mit wpraOnAllPages), die Textboxen erscheinen auf der ersten Seite.

    Jetzt klicke ich in den Text und halte Enter fest, es werden massenhaft neue Zeilen hinzugefügt.

    Sobald die zweite Seite erreicht ist, sind die Textboxen zwar auch auf Seite 2 vorhanden aber auf allen (auch der ersten Seite) jetzt leer!

    Ein weiteres Problem:

    RelY := 0 bringt die Textbox nicht an den oberen Seitenrand!

    RelX := 0 wirkt wie erwartet.

    Aber das Hauptproblem ist, warum verschwinden die Texte sobald die zweite Seite erreicht wird?

    Und warum werden sie mit wplayLayout und anderen Layouteinstellungen gar nicht angezeigt, nur mit wplayFullLayout, was ich später für den Anwender nicht haben möchte?

    Ciao

    Stefan

    Ja, ich hatte erst ein ReformatAll am Ende der Schleife, es erscheint nur die Textbox auf der letzten Seite, dann ein ReformatAll direkt nach dem Erzeugen der Textboxen, also in jedem Schleifendurchlauf, das gleiche Ergebnis!

    Witzig ist eben, wenn ich per Mausklick den Text (besser die Tabelle) zeilenweise erweitere, wird beim Erreichen einer neuen Seite korrekt WPRichTextMeasureTextPage und darin die Textboxerzeugung aufgerufen und alle Folgeseiten haben die gewünschte Textbox.

    Erweitere ich die Tabelle per Schleife wird auch jeweils das WPRichTextMeasureTextPage aufgerufen und auch die Textboxen erzeugt, nur sind sie am Ende der Schleife bis auf die der letzten Seite nicht mehr vorhanden!

    Hat WPRichTextMeasureTextPage da irgendwelche "Nebenwirkungen"?

    Zitat

    Man müsste also eine feste neue Seite mit inputString(#12) erstellen und in den neuen Absatz dann die Textbox einfügen.

    Geht nicht, das Dokument besteht eigentlich nur aus einer einzigen Tabelle!

    Zitat

    Ich würde die Textboxen in spezielle Header texte einfügen und die Header dann für einzelne Seiten aktivieren

    Gibt es dafür bitte ein paar Zeilen Beispielcode?

    Ciao

    Stefan