AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Clipboard Paste Prüfung

Ein Thema von zeras · begonnen am 7. Feb 2020 · letzter Beitrag vom 10. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2   
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.540 Beiträge
 
Delphi 11 Alexandria
 
#1

Clipboard Paste Prüfung

  Alt 7. Feb 2020, 18:44
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:
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;
oder so
Delphi-Quellcode:
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;
Ist bestimmt ganz einfach und ich übersehe etwas.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.653 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Clipboard Paste Prüfung

  Alt 7. Feb 2020, 23:04
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 7. Feb 2020 um 23:30 Uhr)
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
48 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Clipboard Paste Prüfung

  Alt 7. Feb 2020, 23:17
Also im KeyUp funktioniert der Code (Dein Beispiel 2) bei mir.

VG ZYL
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Clipboard Paste Prüfung

  Alt 8. Feb 2020, 16:27
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
Danke für den Tipp. Ich habe das nun mit der Abfrage
  if (Shift = [ssCtrl]) and (Key=ord('V')) then begin ins KeyDown eingebaut. Nun scheint es zu gehen. Will nochmal alle Konstellationen durchprobieren.
Anfangs hatte ich ein MaskEdit drin. Da war dann schon alles fertig. Aber meine Kollegen wollten eine Box mit Auswahl.


Also im KeyUp funktioniert der Code (Dein Beispiel 2) bei mir.

VG ZYL
Warum das jetzt geht? War wohl gestern nicht mein Tag. Habe es, wie oben beschrieben, ins KeyDown geschrieben. Aber in KeyUp sollte es genauso gehen.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras ( 8. Feb 2020 um 16:35 Uhr)
  Mit Zitat antworten Zitat
Alt 8. Feb 2020, 17:33     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.633 Beiträge
 
Delphi 5 Professional
 
#5

AW: Clipboard Paste Prüfung

  Alt 8. Feb 2020, 18:54
Und was ist mit Shift+Einfg und dem Einfügen per Kontextmenü?

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Clipboard Paste Prüfung

  Alt 8. Feb 2020, 19:22
Sollte man die Valitätsprüfung dann nicht besser ins OnChange oder bei Verlassen des Edits machen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.653 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Clipboard Paste Prüfung

  Alt 8. Feb 2020, 23:35
Sollte man die Valitätsprüfung dann nicht besser ins OnChange oder bei Verlassen des Edits machen?
Joar, direkt was Falsches reinschreiben oder über andere Wege reinkopieren und schon ist die Prüfung umgangen.
Das gute alte Shift+Einfg kennen viele alte Hasen noch, oder wie wäre es mit WM_COPY?


ins KeyDown geschrieben. Aber in KeyUp sollte es genauso gehen.
Nein, entweder man sperrt immer beide Seiten und fügt seine Aktion in einer der Seiten ein, das geht fast immer.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 8. Feb 2020 um 23:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Clipboard Paste Prüfung

  Alt 9. Feb 2020, 00:05
Wieso ist dann die Prüfung umgangen? OnChange wird doch auch beim Reinkopieren ausgelöst?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.653 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Clipboard Paste Prüfung

  Alt 9. Feb 2020, 00:07
Die ursprüngliche Prüfung, da in einer der vielen Zugangswege (Strg+V)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Clipboard Paste Prüfung

  Alt 9. Feb 2020, 01:19
Na ja. Gut. Dann verschiebt sich die Prüfung eben im Code.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 9. Feb 2020 um 05:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf