Autor |
Beitrag |
Detlef Schütz
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 12.06.12 15:49
Ich habe ein kleines Terminalprogramm geschrieben, das Befehle an ein Meßgerät sendet. Zur Eingabe benutze ich TEdit, funktioniert alles prima. Die meisten Befehle sind aber Großbuchstaben, daher habe ich einen (Toggle-)Button CAP(itals) vorgesehen, der CharCase von ecNormal auf ecUpperCase setzt, damit nicht ständig die SHIFT-Taste gedrückt werden muss.
Das funktioniert auch, leider aber nur in eine Richtung; d.h. wenn ich jetzt bei aktivem CAP die SHIFT-Taste betätige, kommt dennoch nur ein Großbuchstabe.
Was muß ich tun, damit - nach Aktivieren von CAP - , die SHIFT-Taste quasi umgekehrt funktioniert? Aus groß wird klein, aus klein wird gross?
Danke für's Nachdenken schon im voraus...
Detlef
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 12.06.12 16:08
Was spricht dagegen, die Caps-Lock-Taste zu drücken? Wenn die aktiviert ist, wird die Funktion der Umschalttaste umgekehrt, sodass man etwa IN DER aRT schreibt.
Edit: zumindest in der Standardkonfiguration ab Windows XP, der Benutzer kann das auch umstellen.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 12.06.12 16:57
Moin und  in der EE!
Was spricht denn dagegen, die Daten, die zum Device rausgehen passend aufzubereiten, anstatt am Eingabeverhalten der Systemumgebung rumzuspielen? Also ein UpperCase() auf den Sendestring z.B.?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Detlef Schütz 
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 12.06.12 21:11
Die CAPS-Lock Taste vertauscht leider auch die Sonderzeichen mit den Ziffern, aus $ wird 4 und umgekehrt.
Die Befehle enthalten aber auch viele Zahlen, z.B. U12345 für ein Upper Limit des Messwertes oder R5 für einen Range, aber eben auch $YNzn11 für die Eingabe der Schaltgruppe eines Transformators.
Tatsächlich geht das nur mit Umkehrung der Taste SHIFT nur für die Buchstaben. Irgendwie muss ich die Zeichen abfangen, bevor sie nach TEdit gelangen und bei gedrückter SHIFT-Taste nur Kleinbuchstaben zulassen, aber statt der sonstigen Zeichen sollen dann dennoch die Ziffern kommen.
Ohne aktive Toggletaste CAP: ohne SHIFT Taste A --> a, 3 --> 3 ,
mit SHIFT Taste A --> A, 3 --> § .
Mit aktiver Toggletaste CAP: ohne SHIFT Taste A --> A, 3 --> 3 ,
mit SHIFT Taste A --> a, 3 --> § .
Mein Programmiervorgänger hat das vor Jahren mit VisualBasic hinbekommen, jetzt muss das Programm erweitert werden, und ich will nicht mit VisualBasic oder ...C anfangen.
Muss doch irgendwie gehen...
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 12.06.12 23:37
Moin!
Detlef Schütz hat folgendes geschrieben : | Muss doch irgendwie gehen... |
Gehen tut fast alles, die Frage ist in der Regel wieviel Aufwand zu betreiben willst...
Detlef Schütz hat folgendes geschrieben : | Die CAPS-Lock Taste vertauscht leider auch die Sonderzeichen mit den Ziffern, aus $ wird 4 und umgekehrt. |
Und das ist im Standard-DE_DE-Tastaturlayout auch völlig normal. Vielleicht solltest du mal das Layout "Deutsch (IBM)" ausprobieren, da sind bei gedrückter CapsLock-Taste trotzdem noch die Ziffern aktiv und nur mit separat gedrückter Shift-Taste erreichbar.
Das eigentlich Problem scheint mir aber doch ganz klar ganz wo anders zu liegen, nämlich im Design der GUI:
Detlef Schütz hat folgendes geschrieben : | Die Befehle enthalten aber auch viele Zahlen, z.B. U12345 für ein Upper Limit des Messwertes oder R5 für einen Range, aber eben auch $YNzn11 für die Eingabe der Schaltgruppe eines Transformators. |
Du willst mir doch nicht erzählen, dass man in deiner Anwendung diese Kommandos (erinnert mich irgendwie an PCL) allen ernstes in ein Editfeld einhämmern muss, oder?  Jemand, der das tun soll, kennt eh die Kommandos, dem kannst du dann auch "zumuten", die im richtigen Charcase zu tippseln...
Detlef Schütz hat folgendes geschrieben : | Irgendwie muss ich die Zeichen abfangen, bevor sie nach TEdit gelangen und bei gedrückter SHIFT-Taste nur Kleinbuchstaben zulassen, aber statt der sonstigen Zeichen sollen dann dennoch die Ziffern kommen. |
Wie wäre es denn mit so einer Art "Makro" für die Befehle, welche man aus einer Liste auswählen kann, ggfs. werden Parameter abgefragt und dann eingefügt.
Insgesamt hört sich das alles sehr merkwürdig an.  Vielleicht erzählst du mal etwas mehr, welchen Zweck das eigentlich hat, dann kann man auch besser helfen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mi 13.06.12 07:13
Ich meine auch, wenn nur Großbuchstaben benötigt werden, ist vor Senden des Edittextes ein Uppercase(TEdit.Text) die einfachste Variante. Was Du dann eingibst, ob klein oder groß, ist dann doch egal. Und die Umlaute/Sonderzeichen (ä,ö,ü,ß) werden sicher eh nicht zugelassen.
Warum mehr Arbeit machen, als nötig.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Detlef Schütz 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mi 13.06.12 09:05
OK,OK, Ihr habt recht, der Aufwand scheint zu gross zu sein. Und es ist in der Tat auch nicht unbedingt erforderlich, es war beim bisherigen Programm halt soooo bequem. Die Kollegen waren es gewohnt, und da es in der Altversion (VisualBasic) ging, hielt ich den Aufwand für gering. Es muss ja auch nicht unbedingt TEdit sein.
Meine Programmiererfahrung erstreckt sich mehr auf Firmware in den Geräten, ohne GUI, ohne Ereignisse (naja fast). Bei Delphi bin ich einfach Anfänger.
Ich werde diese Frage noch eine Woche offen lassen, vielleicht gibt es doch noch eine Idee...
Vielen Dank jedenfalls an alle für die Hinweise und Ratschläge,
Detlef
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 13.06.12 09:25
In OnKeyPress deines Editfelds schreibst du einfach folgendes: Delphi-Quelltext 1: 2:
| if IsCharAlphaNumeric(Key) and CheckBox1.Checked then Key := UpCase(Key); | Fertig.
Wenn dann CheckBox1 angekreuzt ist, wird großgeschrieben, sonst klein.
Und zur Förderung der Ergonomie würde ich im OnClick der CheckBox noch den Fokus wieder auf das Edit setzen: Delphi-Quelltext 1: 2:
| Edit1.SetFocus; Edit1.SelStart := Length(Edit1.Text); |
|
|
Detlef Schütz 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mi 13.06.12 12:59
Das klingt ja schon 'mal sehr gut, danke, aber möchte ja bei CheckBox1.Checked nur dann UpCase haben, wenn die SHIFT-Taste nicht gedrückt ist, das funktioniert; wenn ich die SHIFT-Taste gedrückt halte, sollen jetzt aber Kleinbuchstaben kommen. In diese UND-Verküpfung muss anscheinend noch die Abfrage der SHIFT-Taste hinein, oder? und, sorry, wie?
Detlef
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 13.06.12 13:59
Eigentlich hatte ich gedacht, dass du den Rest alleine hinbekommst, wenn du weißt wie es funktioniert... Delphi-Quelltext 1: 2: 3: 4: 5:
| if IsCharAlphaNumeric(Key) and CheckBox1.Checked then if Key in ['A'..'Z', 'Ä', 'Ö', 'Ü'] then Dec(Key, Ord('A') - Ord('a')) else if Key in ['a'..'z', 'ä', 'ö', 'ü'] then Inc(Key, Ord('A') - Ord('a')); |
|
|
Detlef Schütz 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mi 13.06.12 19:39
Tatsächlich habe ich immer nach einer einfachen Lösung mit direkter Abfrage der Stellung der SHIFT-Taste gesucht. Aber die Lösung von Jaenicke ist natürlich gut, da ich ja ohnehin mich auf die Frage, welcher Zeichentyp da gerade gedrückt wird, hätte einlassen müssen.
Ganz funktioniert hat es zwar nicht, aber so geht es:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char); begin if AllCapital.Checked then begin if Key in ['A'..'Z'] then Key := Chr(Ord(Key) - Ord('A') + Ord('a')) else if Key in ['a'..'z'] then Key := Chr(Ord(Key) + Ord('A') - Ord('a'))
end; end; | Die Umlaute führen zu einer Fehlermeldung, aber die brauche ich auch nicht. Übrigens habe ich nun auch eine Lösung zur Erkennung der Stellung der SHIFT-Taste gefunden:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ssShift in Shift then Form1.Color := clRed; end; |
Ist natürlich nur ein Test um zu sehen, ob das geht.
So ist mein Problem gelöst, und ich bedanke mich recht herzlich bei Allen, speziell natürlich bei 'jaenicke'. Auf das Rücksetzen des Focus wäre ich in der Tat nicht gekommen, nun, ich arbeite mich ein!
Detlef
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
|