Bearbeitbarkeit von Header/Body/Footer sperren

  • Hallo zusammen,
    ich bin ziemlich neu bei den WPTools und noch etwas überwältigt von der Unmenge an Properties ;-) , darum hier jetzt eine Anfängerfrage:
    Wie kann ich die Bereiche Header, Body und Footer separat vor Bearbeitung schützen? Gibt es spezielle Properties, bzw. gibt es ein Event, wie z.B. OnLeaveRTFDataBlock, nur ohne FromBlock (da ich ja ggf. nicht von einem Block zum anderen wechseln will, sondern von ausserhalb komme), das mich dann nicht in den gewählten Bereich wechseln lässt?
    Für jegliche Hilfe/Codeschnipsel wäre ich sehr dankbar.


    Mit besten Grüßen
    Bastian Neumann

  • Hallo,


    OnLeaveRTFDataBlock ist schon der richtige event, es wird ja auch der "ToBlock" übergeben.


    Um also die Bearbeitung der Footer zu deaktivieren, die Header aber bearbeitbar zu belassen kann man diesen code benutzen:

    Code
    1. procedure TForm1.WPRichText1LeaveRTFDataBlock(Sender: TObject; FromBlock,
    2. ToBlock: TWPRTFDataBlock; var Allowed: Boolean);
    3. begin
    4. Allowed := ToBlock.Kind <> wpIsFooter;
    5. end;
  • Danke für die rasche Antwort. Funktioniert prima, wenn man aus einem Bereich (Header/Body/Footer) in einen anderen wechselt. Allerdings nicht in dem Bereich, in dem man startet (i.A. im Body). Hier wird ja das Event OnLeaveRTFDataBlock nicht ausgelöst, da ich den Bereich nicht verlasse. Also müsste es noch eine andere Möglichkeit geben, den Body als readonly oder etwas analoges zu markieren? Readonly an sich betrifft ja den gesamten Editor, wenn ich das richtig verstanden habe...


    Was mir noch aufgefallen ist: wenn ich im Body eine Grafik eingebunden habe, kann ich trotz der Sperrung über OnLeaveRTFDataBlock (Allowed := ToBlock.Kind <> wpIsBody;) das Bild anklicken, und danach ist, aufgrund des oben erwähnten Nichtauslösen des OnLeaveRTFDataBlock-Events, der gesamte Text im Body editierbar. Ich habe das gleiche auch mit dem Header getestet, hier trat dieser Effekt nicht auf.


    Beste Grüße
    Bastian Neumann

  • Hallo,


    ActiveText ist der Layer in dem der cursor sich gerade befindet. Ich kann mir vorstellen über Programm code bei Bedarf in einen editierbaren Bereich zu wechseln, wenn das erforderlich ist. Generell wird vor Eingaben BeforeChanging aufgerufen - damit kann man ein "Readonly" realisieren, auch des Bodys.


    Julian

  • Danke, genau danach habe ich gesucht.


    BeforeChange(Sender: TObject; var AllowChange: Boolean);
    Über AllowChange kann ich hier regeln, ob geschrieben werden darf oder nicht.


    Ist leider nur kurz in den release notes erwähnt, und ansonsten habe ich keine Dokumentation dazu gefunden.


    Beste Grüße
    Bastian