Beiträge von skoschke

    Danke für die Tips.

    ProtectedProp hatte ich schon, was aber das Löschen oder Überschreiben von Feldern nicht verhindert hat.

    Jetzt weiß ich auch den Grund, ppProtectSelectedTextToo hatte ich nicht gesetzt, nur ppIsInsertpoint und ppIsMergedText.

    Jetzt verhält sich alles wie gewünscht :-)

    Den obigen Codeschnipsel habe ich in meine Sammlung übernommen, vielen Dank dafür.

    Ciao

    Stefan

    Hallo,

    der Event, welcher das Problem verursacht, ist gefunden!

    Im OnKeypress rufe ich eine Funktion

    auf, die falls true key := #0 setzt.

    Damit möchte ich verhindern, dass bei Textmarkierung die ein Feld enthält, dieses durch Tippen gelöscht wird.

    Da in der oben gezeigten Funktion aber die Cursorposition verändert wird, geht die Toolbar-Einstellung verloren.

    Wie prüft man besser ob in einem Stück markierten Text ein Feld enthalten ist, ohne den Cursor zu verschieben?

    Ciao

    Stefan

    Hallo,

    ich erzeuge WPRichtText's per Code und setze dort nach der Erzeugung

    Code
    WPRichtext := TWPRichText.create(FormMain);
    WPRichtext.CurrAttr.FontName := 'Courier New';
    WPRichtext..CurrAttr.Size := 16;
    WPRichtext.WPToolBar := WPToolBar1;

    Wenn ich nun ins RTF klicke steht in der Toolbar wie erwartet Courier New mit 16er Größe.

    Nur wenn ich tippe kommt Schrift in Arial, wenn ich davon Textteile markiere und in der Toolbar die Größe ändere, ändert sich zwar die Schriftgröße aber bleibt bei Arial.

    Was habe ich bei der Erzeugung an Einstellungen übersehen?

    Ciao

    Stefan

    Ich benötige eigentlich nur den Stream eines WPRichText mit bestimmten Schriftformatierungen zur Weiterverwendung.

    Daher erzeuge ich nun nicht mehr die Komponente(mit Panel, Richtext etc.) sondern nur wie vorgeschlagen ein TWPRichText mit CreateDynamic und damit funktioniert es nun wie gewünscht.

    Wenn mal Zeit ist baue ich das wieder zurück und fange mal den Fehler ein...

    Ciao

    Stefan

    Danke, wieder was gelernt...

    Das aber ist nicht der Grund für meinen Laufzeitfehler Bereichsprüfung, der kommt immer noch bei rechtsbündiger Formatierung, egal ob wie oben per CurrAttr oder wenn ich

    Code
    par := RTFRichtext.FirstPar;
    par.ASet(WPAT_Alignment, Integer(paralRight));

    verwende.

    Ciao

    Stefan

    Folgender Codeschnipsel führt zu Fehler bei der Bereichsprüfung wenn rechtsbündig ausgerichtet wird. Linksbündig und zentriert funktioniert.

    Das Richtext wurde dynamisch erzeugt und liegt auf einem ebenfalls dynamisch erzeugten Panel, das Richtext enthält nur ein Wort.

    Was ist an meinem Code falsch bzw. was müsste ich richtigerweise machen?

    Lege ich zur Entwurfszeit ein Richtext auf ein Formular dann funktioniert obiger Code.

    Ciao

    Stefan

    Hallo,

    nach unendlichen Versuchen habe ich eine Lösung:

    im

    Code
    procedure TTextForm.WPRichText1TextObjectMouseUp(Sender: TWPCustomRtfEdit;
      pobj: TWPTextObj; obj: TWPObject; Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer);
    begin
      obj.Edit;
    end;

    stellt sich der Cursor zwar immer noch kurz oben zwischen die beiden gepunkteten Headerzeilen, aber im Mouseup dann ist die Textbox unter der Maus editierbar...

    Dafür muss dann das Allowed := false im LeaveRTFDataBlock wieder weg.

    Ciao

    Stefan

    Ja, irgendwie drehe ich mich im Kreis!

    Eigentlich möchte ich die Textboxen in den Headern, nur lande ich beim Klick auf eine solche zuerst oben im Header zwischen den beiden gepunkteten Zeilen, da soll der Nutzer aber nichts einfügen dürfen

    (siehe Gesperrter Header aber Textobjekte darin bearbeitbar)

    Daher die Idee, die Boxen nun doch auf die Seiten im Body zu platzieren, was ja aber auch nicht so einfach geht (weil teilweise dann doppelt erzeugt)

    Lässt sich für das Problem im obigen Link eine Lösung finden?

    Ciao

    Stefan

    Hallo,

    ich habe beschlossen, Textboxen nicht im Header, sondern im Text anzulegen.

    Im OnGetSpecialText muss ich aber nun herausfinden, ob für die betreffende Seite die Textboxen bereits erzeugt wurden.

    Im Header geht das einfach per

    Code
    if Kind = wpIsHeader then
      begin
        aName := 'HEADER#' + inttostr(pagenr);
        SpecialText := WPRichText1.HeaderFooter.Get(wpIsHeader, wpraNamed, aName);
        if SpecialText.Empty then
        begin
    ...

    wie aber kann ich erkennen, ob auf der Seite im Bodytext etwas vorhanden ist?

    Die Textboxen werden im OnGetSpecialText erzeugt

    Code
        txtObj := WPRichText1.TextObjects.InsertTextBox(3000, 500, RTFData);
        txtObj.PositionMode := wpotPage;    
        txtObj.ExtraProp['Seite'] := pagenr.ToString;

    was funktioniert, aber wenn ich alle TextObjekte durchlaufe

    Code
      WPRichText1.TextObjectsGetList(list, wpobjTextObject, true);
      for i := 0 to list.Count - 1 do
      begin
        if list[i].ExtraProp['Seite'] = 'Seite' + pagenr.tostring then
        begin
          pagevorhanden := true;
          break;
        end;
      end;

    ist die ExtraProp immer leer!

    Was läuft da schief?

    Ciao

    Stefan

    Ich habe ein kleines WPRichtext welches z.B. eine Zeile, dann 3 weitere Zeilen und eine unterste Zeile beinhaltet.

    Das sieht so aus:

    Zeile ganz oben

    1

    2

    3

    unterste Zeile

    Dessen Inhalt speichere ich in einen Stream:

    Code
    var
    Stream:TMemoryStream;
    ...
    WPRichtext1.SaveToStream(Stream, 'WPT');

    Nun erzeuge ich in einem anderen WPRichtext eine Textbox und möchte in diese den Stream laden:

    Als Ergebnis habe ich nun darin stehen:

    Zeile ganz oben1

    2

    3

    unterste Zeile


    Da fehlt also ein Zeilenumbruch oben vor der 1!

    Versuchsweise habe ich beim Stream laden die Option [wploadpar_AsChildrenPar] benutzt, jetzt ist der Text korrekt, aber enthält ganz oben eine neue unerwünschte Leerzeile!

    Es steht da also nun

    Leerzeile

    Zeile ganz oben

    1

    2

    3

    unterste Zeile


    Wie bekomme ich den Originaltext korrekt in meine textbox?

    Ciao

    Stefan

    Hallo,

    ich habe mit

    Code
    procedure TTextForm.WPRichText1LeaveRTFDataBlock(Sender: TObject;
      FromBlock, ToBlock: TWPRTFDataBlock; var Allowed: Boolean);
    begin
      Allowed := ToBlock.Kind <> wpIsHeader;
    end;

    das Tippen im Header verboten.

    Nun aber gibt es im Header auch Textobjekte die teilweise bearbeitbar sein sollen, eingefügt werden sie im OnGetSpecialText

    Gibt es einen Weg die Bearbeitung darin zu erlauben, das Tippen im Header (da erscheinen ja oben die beiden gepunkteten Linien) aber zu unterbinden?

    Ciao

    Stefan

    Zitat

    Am einfachsten wäre es aber dem Textfeld einfach einen grauen Hintergrund zuzuweisen, wie es auch bei normalem text möglich ist.

    Das versuche ich seit Stunden ;-)

    Wie bekomme ich einem Textfeld einen Hintergrund zugewiesen?

    Ich habe es mit Styles versucht, ParentPar.AsetColor (was die gesamte Zeile mit der Nummer gefärbt hat) usw...

    ... und ich möchte es vor Veränderung (löschen, übertippen usw) schützen, was aber auch nicht wie bei MergeFields funktioniert!

    Ciao

    Stefan

    Hallo,

    mit

    Code
    txtObj := RTFRichtext.InputMergeField(fnam, inhalt);

    füge ich ein Mergefield ein, welches im Text grau hinterlegt ist weil so in AutomaticTextAttr festgelegt.

    Ein mit

    Code
    txtObj := RTFRichtext.InputTextField(wpoPageNumber);

    erzeugtes Textfeld mit Seitennummer hat keinen grauen Hintergrund, ich möchte aber dass es optisch genau so aussieht wie das Mergefield!

    OnMailMergeGetText, wo ich Zugriff auf Content hätte, wird für dieses Textfeld nicht gefeuert, gibt es einen Trick?

    Ciao

    Stefan