Einzelnen Beitrag anzeigen

Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: SelChange Notifier für TEdit

  Alt 1. Nov 2011, 11:11
so, jetzt nochmal etwas sauberer, sollte man aber in eine eigene Komponente packen
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TEdit=Class(StdCtrls.TEdit)
  private
    FReentranceProhibit:Boolean;
    FOnSelChange:TNotifyEvent;
    FoldSelLength,FOldSelStart:Integer;
    public
    procedure DefaultHandler(var Message); override;
    published
    Property OnSelChange:TNotifyEvent read FOnSelChange write FOnSelChange;
  End;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public

    procedure MySelchange(Sender: TObject);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TEdit.DefaultHandler(var Message);
begin
  inherited;
      if FReentranceProhibit then exit
      else
        begin
          FReentranceProhibit := true;
          try
          if Assigned(FOnSelChange) and ((FOldSelStart<>SelStart) or (FOldSelLEngth<>SelLength)) then
            begin
            FOnSelChange(Self);
            end;
          finally
          FReentranceProhibit := false;
          end;
        end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Edit1.OnSelChange := MySelchange;
   Edit2.OnSelChange := MySelchange;
end;

procedure TForm1.MySelchange(Sender: TObject);
begin
  Caption := Tedit(Sender).Name+'-' + IntToStr(TEdit(Sender).SelLength) +'-' + IntToStr(TEdit(Sender).SelStart) ;
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 1. Nov 2011 um 12:06 Uhr) Grund: try finally fehlte
  Mit Zitat antworten Zitat