Autor |
Beitrag |
trm
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Mo 22.03.10 15:35
Hi.
Ich habe mal wieder eine ganz eigenartige Frage.
Hat sich jemand schonmal die Mühe gemacht und ALLE sichtbaren Zeichen aus einem verfügbaren Zeichensatz gefiltert ?
Hintergrund ist: ich möchte in einem OnKeyDown auf Tastatureingaben testen. Dies möchte ich aber nur, wenn wirklich sichtbare (a-z, 0-9, A-Z, *+-?/($%§$ .....) eingegeben werden. Kann mir hier jemand bitte helfen, dass ich keins auslasse?
Oder umgekehrt, hat jemand eine komplette Liste aller Zeichen, welche NICHT sichtbar sind (#08,#10,#13 ...)?
Danke + liebe Grüße
~Mathias
Edit:
Das sind Zeichen als Dezimalwert, welche ich herausgefiltert habe, die per Tasten zugänglich sind und in keiner Weise abgebildet werden:
[9, 16..20, 27, 33..40, 45, 46, 91, 93, 144, 145, 112..123]
9 = Tabulator
27 = Escape
112..123 = F1 bis F12
Gibt es noch mehr dieser Art, die per Tastatur drückbar sind ?
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.03.10 16:39
Vergiss es, Unicode hat pro Plane 65 536 Zeichen, und es gibt 17 Planes. Sammle da mal alle sichtbaren / unsichtbaren Zeichen
Besser wäre es doch, zu testen ob das Zeichen eine Breite größer null hat, oder? Probier mal Canvas.TextWidth(EingegebenesZeichen) > 0
Grüße,
Yogu
|
|
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Mo 22.03.10 16:42
Dafür gibt es ein Ereignis das nennt sich onKeyPress. Vergleiche einmal was bei einem onKeyDown, onKeyPress und onKeyUp herauskommt.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.03.10 17:18
martin300 hat folgendes geschrieben : | Dafür gibt es ein Ereignis das nennt sich onKeyPress. Vergleiche einmal was bei einem onKeyDown, onKeyPress und onKeyUp herauskommt. |
OnKeyPress wird auch ausgelöst, wenn die Enter- oder Backspace-Taste gedrückt wurde, und das ist offenbar nicht erwünscht. Also müsste man da noch eine Kontrolle machen.
Prinzipiell kann man aber sagen, dass alle Zeichen ab Code 32 sichtbar sind. Das bezieht sich aber auf die Werte von OnKeyPress, nicht OnKeyDown. Du solltest aber berücksichtigen, dass das Einfügen aus der Zwischenablage das Ereignis nicht korrekt auslöst (ich weiß ja nicht, was die Absicht hinter deiner Frage ist).
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Mo 22.03.10 17:58
Danke für Eure Antworten.
Ich glaube, ich muss meine Frage umformulieren.
"Kann mir jemand sagen, welche Tastendrücke am Keyboard für ein String-Eingabefeld nicht relevant sind?"
Ich denke, dies trifft eher auf mein Problem zu.
In den OnKey-Ereignissen werden nicht nur "sichtbare" Zeichen behandelt, auch die Cursortasten werden z.B. verarbeitet.
Ich benötige ein Ereignis, bei dem ich festlegen kann, ob die Taste ein Zeichen im Sinn von Textverarbeitung beinhaltet, um zu erkennen, ob sich etwas geändert hat.
Leider benötige ich dies auch nicht für einzelne TEdit-Felder, sondern für ein TStringGrid. Aber die OnKey-Ereignisse sind ja gleich. Deshalb bezog sich meine Frage auf ein TEdit.
Die Problematik bezieht sich auf ein Eingabesystem in eine Datenbank, wobei die DB auf einem Server liegt, der nur ein 10Mbit-Anschluss hat. Deswegen, um Zeit zu sparen, habe ich eine Erkennung in die Grid-Änderung bei Tastendruck eingebaut. Dadurch kann man schneller arbeiten ohne eine Zwangsspeicherung vollziehen zu müssen, wenn ich nix geändert hat. (komische Formulierung)
Yogu, Deine Idee hatte ich auch schon im Kopf, aber das ist mir persönlich (ohne Dich angreifen zu wollen) keine guter Programmierstil
Enter und Backspace benötige ich, ebenso die Entf - Taste (#46).
Im Moment prüfe ich auf diese Dezimal-String-Zeichen:
Delphi-Quelltext 1: 2:
| if not Changed_Array[n] then Changed_Array[n]:= not (Key in [9, 16..20, 27, 33..40, 45, 91, 93, 144, 145, 112..123]); |
Changed_Array ist ein Boolean-Array, welches sich im OnKeyDown-Ereignis je nach dem StringGrid zuweisen lässt.
Wer noch Werte oder Tastaturcodes hat, die ich ausklammern kann - immer her damit
Danke und Gruß
~Mathias
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.03.10 18:30
trm hat folgendes geschrieben : | Ich benötige ein Ereignis, bei dem ich festlegen kann, ob die Taste ein Zeichen im Sinn von Textverarbeitung beinhaltet, um zu erkennen, ob sich etwas geändert hat. |
Wie wär's mit OnChange? Das wird immer dann aufgerufen, wenn sich etwas geändert hat - also genau das, was du brauchst
trm hat folgendes geschrieben : | Yogu, Deine Idee hatte ich auch schon im Kopf, aber das ist mir persönlich (ohne Dich angreifen zu wollen) keine guter Programmierstil
Enter und Backspace benötige ich, ebenso die Entf - Taste (#46). |
Stimmt, es bräuchte zu viel Rechnerleistung, als für diesen Zweck gerechtfertigt wäre. Aber es war bisher die einzige Antwort, die deine Ursprungsfrage direkt beantwortet hat:
trm hat folgendes geschrieben : | Hat jemand eine komplette Liste aller Zeichen, welche NICHT sichtbar sind? |
Ein nicht-sichtbares Zeichen hat schlicht und ergreifend keine Länge (denn Leerzeichen waren nach deiner Definition ja auch sichtbar).
Grüße,
Yogu
|
|
Xearox
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Mo 22.03.10 18:40
ich glaube, er meint, alle Zeichen, die nicht auf der Tastatur vorhanden sind.
Also wenn ich das so richtig verstanden hab.
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Mo 22.03.10 23:50
Huhu
Danke für die weiteren Tipps. Ich glaube, so wie ich es im Moment nutze, ist es recht brauchbar.
Wie wär's mit OnChange? -> gibts nicht für StringGrid
@Xearox: eher ja 
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Di 23.03.10 12:08
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Mi 24.03.10 01:46
Hi.
Delphi-Quelltext 1:
| procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string); |
Dort gibt es keinen Wert der aktuell gedrückten Taste.
Die Cursortasten werden auch als Tastatureingaben erkannt, obwohl KEIN Text geändert wurde.
Daher ist dies hier leider wirklich sinnlos.
Danke für Deinen Tipp
Viele Grüße
~Mathias
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
|