Autor Beitrag
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Sa 08.10.05 19:40 
Kann man irgendwie das Einfügen von Texten in einem Edit abfangen? Also wenn der Benutzter z.B. rechtklick :arrow: Einfügen macht oder Strg+V, denn ich will verhindern, das so ganz bestimmte Zeichen in den Edit gelangen.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 08.10.05 19:56 
Hallo,

mit dem Ereignis OnChange in Verbindung mit OnEnter.
So verhindere ich falsche Eingaben, egal wie sie ins Edit-Feld kommen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
//... 
  sUndo : String
//... 
procedure TForm1.Edit1Change(Sender: TObject); 
var PosCur : Integer; 
    s : string
    i : Integer; 
const MAX = 999
      MIN = 200
begin 
  try 
    s := Edit1.Text; 
    if s = '' then 
      exit; 
    PosCur := Edit1.SelStart;//falls Fehler, merken 
    i := StrToInt(s);//Wenn Fehler dann >> except 
    //Wenn 
    if (s[1] = '-'or 
       (i > MAX) or 
       ((Length(s) = 3and (i < MIN)) then 
      raise Exception.Create('');//Exception auslösen >> except 
    sUndo := Edit1.Text; 
    except 
      showmessage('Nur Werte zwischen '+IntToStr(MIN)+' und '+IntToStr(MAX)+' erlaubt!'); 
      Edit1.Text := sUndo;//Edit zurücksetzen 
      if Length(s) > Length(sUndo) then 
        PosCur := PosCur-1
    end
  Edit1.SelStart := PosCur;//Cursor an alte Position setzen 
end

procedure TForm1.Edit1Enter(Sender: TObject); 
begin 
  sUndo := Edit1.Text;//wird in OnChange benötigt 
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Heiko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 09.10.05 10:21 
Das mit dem OnChange bringt mir nix. Denn ich will das reinkopieren von < unterbinden, aber nicht das einfügen von <blabla>. Und im Edit ist ohne das kopieren alles richtig.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 09.10.05 12:04 
user profile iconHeiko hat folgendes geschrieben:
Also wenn der Benutzter z.B. rechtklick Einfügen macht oder Strg+V, denn ich will verhindern, das so ganz bestimmte Zeichen in den Edit gelangen.

Dazu musst du die Windows Nachricht WM_PASTE abfangen und auswerten.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TForm1 = class(TForm)
  ...
  private
    { Private-Deklarationen }
    FEdit1WindowProc: TWndMethod;
    procedure Edit1WndProc(var Message: TMessage);
  ...
  end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FEdit1WindowProc := Edit1.WindowProc;
  Edit1.WindowProc := Edit1WndProc;
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Edit1.WindowProc := FEdit1WindowProc;
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Edit1WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_PASTE then
  begin
    // Mit Clipboard.AsText kommst an den Inhalt der Zwischenablage
  end else
    FEdit1WindowProc(Message);
end;

_________________
Ciao, Sprint.