Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   RichEdit Schutz mit SelAttributes.Protected wieder aufheben (https://www.delphipraxis.net/171081-richedit-schutz-mit-selattributes-protected-wieder-aufheben.html)

Popov 19. Okt 2012 05:58

RichEdit Schutz mit SelAttributes.Protected wieder aufheben
 
Ich bearbeite im TRichEdit einen Text automatisch, wobei einige Bereiche nicht behandelt werden dürfen. Der einfachste Weg das zu verhindern ist die Bereiche mit
Delphi-Quellcode:
SelAttributes.Protected := True;
zu schützen. Soweit klappt alles auch wunderbar.

Als letzte Aktion sollen alle Schutzbereiche wieder gelöst werden. Nur einfach alles markieren und es wieder auf False stellen geht nicht. Oder ich mache etwas falsch. Nutze ich dazu die Prozedur OnProtectChange und stelle dort AllowChange dementsprechend, ist alles kein Problem. Aber ich würde das am liebsten ohne OnProtectChange regeln, da ich alles gerne in einer einzigen Funktion vereinigt hätte. Ansonsten muß ich es anders lösen.

Gibt es noch eine andere mir nicht bekannte Methode?

Bummi 19. Okt 2012 06:59

AW: RichEdit Schutz mit SelAttributes.Protected wieder aufheben
 
Sinn oder Unsinn zu beurteilen überlasse ich Dir, nur ein proof of concept

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,richedit;

type
  TRichedit=Class(ComCtrls.TRichedit)
  private
    FAllowOneUnProtection: Boolean;
  published
        procedure CNNotify(var Message: TWMNotifyRE); message CN_NOTIFY;
        Property AllowOneUnProtection:Boolean read FAllowOneUnProtection write FAllowOneUnProtection;
  End;

  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Lock(RichEdit: TRichEdit);

begin
  with RichEdit do
  begin
    AllowOneUnProtection := false;
    SelAttributes.Protected := true;
  end;
end;

procedure UnLock(RichEdit: TRichEdit);

begin
  with RichEdit do
  begin
    AllowOneUnProtection := true;
    SelAttributes.Protected := false;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Lock(RichEdit1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  UnLock(RichEdit1);
end;

{ TRichedit }

procedure TRichedit.CNNotify(var Message: TWMNotifyRE);
begin
inherited;
  if AllowOneUnProtection then
    begin
      with Message do
        case NMHdr.code of
          EN_PROTECTED:
            with ENProtected.chrg do Result := 0;
        end;
      AllowOneUnProtection := false;
    end;

end;

end.

Popov 19. Okt 2012 22:29

AW: RichEdit Schutz mit SelAttributes.Protected wieder aufheben
 
Eine sehr interessante Methode eine Komponente zu erweitern. Nicht das es mir neu ist, macht man mit dem Formular auch täglich, aber etwas das ich mal über Komponenten wusste und irgendwo im Aktenberg meines Kopfes abgelegt habe.

Aber man davon abgesehen, dass ich optimalerweise eine Möglichkeit suche es Teil einer Funktion zu sein, scheint D7 Probleme mit dem Beispiel zu haben. Ich muß mal gucken ob es mir gelingt es umzuschreiben. Ungeachtet dessen ist die Idee nicht schlecht. Trotzdem habe ich gehofft lediglich etwas übersehen zu haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz