Andromeda hat geschrieben:aber ich möchte zusätzlich auch noch, dass man mit Strg+V die Zwischenablage einfügen kann. Wie muss ich denn dann den obigen Code ändern, damit das möglich ist?
Dazu bist du im falschen Event. Nutze doch OnKeyDown z.B.:
Code: Alles auswählen
uses ..., LCLType;
...
procedure TFormHaupt.Edit1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
case Key of
VK_0..VK_9, VK_RETURN, VK_BACK, VK_OEM_COMMA: Exit;
VK_V: if Shift = [ssCtrl] then Exit;
end;
Key := 0;
end;
Wobei, wenn du Zahlen eingeben willst, würde sich auch ein Control, was für Zahleneingaben bestimmt ist, wie TMaskEdit, TSpinEdit oder TFloatSpinEdit anbieten.
[EDIT]
Mit Abfrage, ob sich ein Float in der Zwischenablage befindet, könnte die Lösung in etwa so aussehen:
Code: Alles auswählen
uses ..., LCLType, Clipbrd;
...
procedure TFormHaupt.Edit1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
function CanInsertClipboard: Boolean;
var
d: double;
begin
Result := False;
if Clipboard.HasFormat(CF_TEXT) and TryStrToFloat(Clipboard.AsText, d) then begin
Edit1.Text := '';
Result := True;
end;
end;
begin
if Shift = [] then
case Key of
VK_0..VK_9, VK_RETURN, VK_BACK, VK_OEM_COMMA, VK_DELETE, VK_TAB: Exit; //Del, Tab noch eingefügt
end;
if Shift = [ssCtrl] then
case Key of
VK_V: if CanInsertClipboard then Exit;
VK_A, VK_C: Exit; //Markieren, Kopieren
end;
Key := 0;
end;