Mein Vorschlag dazu wäre noch:
(Natürlich einiges übernommen von APP)
Delphi-Quellcode:
PROCEDURE TForm1.Edit1Exit(Sender: TObject);
VAR
i : Integer;
sTempStr : String;
BEGIN
// beim Verlassen des Controls auf Gültikeit prüfen...
sTempStr := Edit1.Text;
FOR i := 1 TO length(sTempStr) DO
IF NOT (sTempStr[i] IN ['0'..'1']) THEN
Delete(sTempStr, i, 1);
Edit1.Text := sTempStr;
END;
So wird nicht gleich der ganze Edit1.Text gelöscht, sondern nur die ungültigen Zeichen.
Übrigens würde ich das Kontextmenü nicht abschalten, ich finde es jedenfalls immer sehr unpraktisch, wenn ich ein Programm bedienen muss das sowas macht.