Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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 :P

Besser wäre es doch, zu testen ob das Zeichen eine Breite größer null hat, oder? Probier mal Canvas.TextWidth(EingegebenesZeichen) > 0 :idea:

Grüße,
Yogu
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.03.10 17:18 
user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
if not Changed_Array[n] then
Changed_Array[n]:= not (Key in [916..202733..40459193144145112..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 user profile iconNarses: Delphi-Tags hinzugefügt
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.03.10 18:30 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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 :)

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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:

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Di 23.03.10 12:08 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
Wie wär's mit OnChange? -> gibts nicht für StringGrid ;)


TStringGrid hat aber einige Events für den InplaceEditor, z.B: OnSetEditText.
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 24.03.10 01:46 
Hi.
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt