Autor Beitrag
Detlef Schütz
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
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: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 12.06.12 16:57 
Moin und :welcome: 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.? :idea: :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Detlef Schütz Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 12.06.12 23:37 
Moin!

user profile iconDetlef Schütz hat folgendes geschrieben Zum zitierten Posting springen:
Muss doch irgendwie gehen...
Gehen tut fast alles, die Frage ist in der Regel wieviel Aufwand zu betreiben willst... ;)

user profile iconDetlef Schütz hat folgendes geschrieben Zum zitierten Posting springen:
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. :idea:

Das eigentlich Problem scheint mir aber doch ganz klar ganz wo anders zu liegen, nämlich im Design der GUI: :?
user profile iconDetlef Schütz hat folgendes geschrieben Zum zitierten Posting springen:
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? :shock: Jemand, der das tun soll, kennt eh die Kommandos, dem kannst du dann auch "zumuten", die im richtigen Charcase zu tippseln... :nixweiss:

user profile iconDetlef Schütz hat folgendes geschrieben Zum zitierten Posting springen:
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. :idea:

Insgesamt hört sich das alles sehr merkwürdig an. :gruebel: Vielleicht erzählst du mal etwas mehr, welchen Zweck das eigentlich hat, dann kann man auch besser helfen. :lupe:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 13.06.12 09:25 
In OnKeyPress deines Editfelds schreibst du einfach folgendes:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
  Edit1.SetFocus;
  Edit1.SelStart := Length(Edit1.Text);
Detlef Schütz Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 13.06.12 13:59 
Eigentlich hatte ich gedacht, dass du den Rest alleine hinbekommst, wenn du weißt wie es funktioniert...
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt