![]() |
Clipboard Paste Prüfung
Ich habe eine Combobox und möchte über die Zwischenablage Strg+V Zahlen einfügen.
Das klappt aber nicht so recht, da die Combobox diese Tastenkombination offenbar selber ausführt. Beim Einfügen muss noch geprüft werden, ob das alles Ziffern sind. Alles andere muss gelöscht werden, damit es nicht in die Combobox gelangt.
Delphi-Quellcode:
oder so
procedure TfEnterManu.cbManuListKeyPress(Sender: TObject; var Key: Char);
begin s := ClipBoard.AsText; for i := 1 to length(s) do begin if CharInSet(s[i], ['0'..'9']) then cbManuList.Text := cbManuList.Text + s[i]; end; Key := #0; end;
Delphi-Quellcode:
Ist bestimmt ganz einfach und ich übersehe etwas.
procedure TfEnterManu.cbManuListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var s : String; i : integer; begin if (Shift = [ssCtrl]) and (Key=ord('V')) then begin s := ClipBoard.AsText; for i := 1 to length(s) do begin if CharInSet(s[i], ['0'..'9']) then cbManuList.Text := cbManuList.Text + s[i]; end; end; key := 0; end; |
AW: Clipboard Paste Prüfung
Erstmal mußt du schauen wo/wann Strg+V von der Komponente ausgeführt wird.
> jeweils KeyDown, KeyUp, KeyPress und FormKeyDown, FormKeyUp, FormKeyPress (KeyPreview=True) ein Key=0 rein, einzeln und Kombinationen und schauen wann Strg+V nicht mehr verarbeitet wird (meist reicht KeyDown und/oder KeyUp) Dann hast du erstmal das Sperren und dann würde ich die eigene Bearbeitung an der selben Stelle einfügen, um im System ein einheitliches Verhalten der Komponente zu beizubehalten. Dazu gehört auch wie und vorallem wo man einfügt. Und gerade bei solchen Kompoenten ist es doch irrsinnig die Setter viele Male pro Zeichen aufzurufen.
Delphi-Quellcode:
S := ClipBoard.AsText;
for i := Length(S) downto 1 do if not CharInSet(S, ['0'..'9'] then // ausmisten Delete(S, i); if S <> '' then begin // nur machen, wenn es was zum Machen gibt (hier wegen dem eventuellen Löschen, was man nicht immer machen sollte) Edit.SelText := S; // an aktueller Stelle einfügen und eventuell Selektiertes überscheiben Edit.SelStart := Edit.SelStart + Edit.SelLength; // Cursor hinter das Eingefügte end; Key := 0; // hier mal immer das Standardverhalten aus ... normal schalte ich das nur aus, wenn die eigene Aktion lief, also im IF |
AW: Clipboard Paste Prüfung
Also im KeyUp funktioniert der Code (Dein Beispiel 2) bei mir.
VG ZYL |
AW: Clipboard Paste Prüfung
Zitat:
Delphi-Quellcode:
ins KeyDown eingebaut. Nun scheint es zu gehen. Will nochmal alle Konstellationen durchprobieren.
if (Shift = [ssCtrl]) and (Key=ord('V')) then begin
Anfangs hatte ich ein MaskEdit drin. Da war dann schon alles fertig. Aber meine Kollegen wollten eine Box mit Auswahl. Zitat:
|
AW: Clipboard Paste Prüfung
Und was ist mit Shift+Einfg und dem Einfügen per Kontextmenü?
Grüße Dalai |
AW: Clipboard Paste Prüfung
Sollte man die Valitätsprüfung dann nicht besser ins OnChange oder bei Verlassen des Edits machen?
|
AW: Clipboard Paste Prüfung
Zitat:
Das gute alte Shift+Einfg kennen viele alte Hasen noch, oder wie wäre es mit WM_COPY? :stupid: Zitat:
Das ist es eben, dass Manches beim Drücken reagiert, aber Anderes beim Loslassen. z.B. Buttons per Enter/Leertaste beim runterdrücken, aber über die Maus erst beim Loslassen und das ist je aktion und Komponente mal hier und mal da und auch innerhalb einer Komponente nicht für alle Aktionen gleich. |
AW: Clipboard Paste Prüfung
Wieso ist dann die Prüfung umgangen? OnChange wird doch auch beim Reinkopieren ausgelöst?
|
AW: Clipboard Paste Prüfung
Die ursprüngliche Prüfung, da in einer der vielen Zugangswege (Strg+V) :stupid:
|
AW: Clipboard Paste Prüfung
Na ja. Gut. Dann verschiebt sich die Prüfung eben im Code.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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 by Thomas Breitkreuz