Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2482
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 06.09.21 15:13 
Hallo!

Aus irgendeinem Grund funktionieren in einigen TEdit's meines Projektes die Tastenkombinationen Strg+V, Strg+X etc. nicht. Es gibt aber ein Form mit 2 TEdit's, wo das sehr wohl klappt, ebenso klappt es immer in TMemos.
In keiner Unit gibt es irgendwo Code, der die gedrückten Tasten auf 0 oder #0 oder sonstwas setzt. Auch gibt es nirgendwo Code, der if (Key = Ord('V')) and (ssCtrl in Shift) etc. prüft oder das dann verändert.

Im OnKeyDown wird ssCtrl erkannt, sobald ich jedoch eine andere Taste (eben V, X, etc.) drücke, erhalte ich nur noch den Wert von ssCtrl, also 17, die Taste wird einfach ignoriert. Drücke ich also zB. Ctrl+X, erhalte ich trotzdem nur 17.
Im OnKeyUp werden solche Tastenkombinationen erkannt.

In einem neuen Projekt tritt das nicht auf.

Sollten TEdit's nicht standardmässig auf solche Tastenkombinationen ansprechen?

Ich komme einfach nicht drauf, was das verursacht.

//Edit: Grossbuchstaben werden erkannt, nur Kleinbuchstaben nicht!


Moderiert von user profile iconTh69: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 06.09.2021 um 16:56

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19073
Erhaltene Danke: 1702

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.09.21 21:58 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
//Edit: Grossbuchstaben werden erkannt, nur Kleinbuchstaben nicht!
Dir ist aber schon klar, dass du immer Großbuchstaben bekommst, oder? Der Unterschied zwischen Groß- und Kleinschreibung ist, ob ssShift in Shift drin ist, oder nicht.

Hast du dir einmal ein Memo hingelegt und ausgegeben was du bekommst?

Wenn du z.B. den Großbuchstaben A schreibst, bekommst du:
ausblenden Quelltext
1:
2:
3:
4:
Shift down
Taste A down
Taste A up
Shift up


Oder bei einem Kleinbuchstaben a:
ausblenden Quelltext
1:
2:
Taste A down
Taste A up


Ja, ein TEdit sollte standardmäßig mit diesen Tastenkombinationen ausschneiden, einfügen usw.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2482
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 07.09.21 08:22 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
//Edit: Grossbuchstaben werden erkannt, nur Kleinbuchstaben nicht!
Dir ist aber schon klar, dass du immer Großbuchstaben bekommst, oder? Der Unterschied zwischen Groß- und Kleinschreibung ist, ob ssShift in Shift drin ist, oder nicht.
Ja, das weiss ich.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ja, ein TEdit sollte standardmäßig mit diesen Tastenkombinationen ausschneiden, einfügen usw.
Tut es aber nicht, und ich habe keine Ahnung, wieso!

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
//Edit: Grossbuchstaben werden erkannt, nur Kleinbuchstaben nicht!
Damit meinte ich, dass es nur funktioniert, wenn ich Strg+Shift+Buchstabe drücke.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19073
Erhaltene Danke: 1702

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 07.09.21 10:27 
Funktioniert es denn, wenn du das Formular in ein neues Projekt einbindest?

Ohne Quelltext mit der Möglichkeit das nachzuvollziehen und zu debuggen, lässt sich dazu kaum etwas sagen.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2482
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 07.09.21 11:35 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Funktioniert es denn, wenn du das Formular in ein neues Projekt einbindest?
Muss ich erst mal testen, wenn das nicht allzu viele Änderungen erfordert.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ohne Quelltext mit der Möglichkeit das nachzuvollziehen und zu debuggen, lässt sich dazu kaum etwas sagen.
Das ist es ja: Da ist nichts Auffälliges oder Besonderes im Quelltext. Und in einem der Formulare des Projekts funktioniert es, aber auch da ist nichts Ungewöhnliches. Aber ich "forsche" witer!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19073
Erhaltene Danke: 1702

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 07.09.21 13:29 
Wenn du direktere Hilfe brauchst, bräuchte ich mehr Handfestes, z.B. auch per PN, wenn du etwas nicht hier im Forum veröffentlichen möchtest.
Dann würde ich lediglich das Ergebnis hier reinschreiben.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2482
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 07.09.21 13:34 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du direktere Hilfe brauchst, bräuchte ich mehr Handfestes, z.B. auch per PN, wenn du etwas nicht hier im Forum veröffentlichen möchtest.
Dann würde ich lediglich das Ergebnis hier reinschreiben.
Es gibt da nichts, was es in anderen Projekten nicht auch gibt! Ich wüsste nicht mal, was da der relevante Code sein könnte, weil ich nicht weiss, aus welcher Ecke der Bug kommt. Weder im OnKeyDown noch im OnKeyPress ist was Besonderes drin. Nichts, was irgendwas mit den Tastenwerten macht. Und an den eingebundenen Units liegt's auch nicht. Allerdings frage ich an einer Stelle ab, welche Taste gedrückt wurde, aber auch, wenn ich das auskommentiere, bleibt der Effekt bestehen.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19073
Erhaltene Danke: 1702

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 07.09.21 13:41 
Hast du vielleicht KeyPreview am Formular aktiviert und dort Ereignisse zugewiesen?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4528
Erhaltene Danke: 996

Win10
C#, C++ (VS 2015/17/19)
BeitragVerfasst: Di 07.09.21 14:13 
Ich tippe auch darauf, daß einige Eigenschaften der Form bzw. der TextBox unterschiedlich sind.
Oder hast du auf dem bestimmten Formular eine externe (besondere) Komponente, welche Tastendrücke abfängt?

Generell finde ich [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden dafür sehr hilfreich.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2482
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 07.09.21 17:44 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Ich tippe auch darauf, daß einige Eigenschaften der Form bzw. der TextBox unterschiedlich sind.
Oder hast du auf dem bestimmten Formular eine externe (besondere) Komponente, welche Tastendrücke abfängt?
Weder das eine, noch das andere trifft zu!

Ich habe das Problem mittlerweile entdeckt: Es ist das MainMenu und dort die Shortcuts der MenuItems Ausschneiden1, Einfgen1 und Kopieren1, also Ctrl+X, Ctrl+V, Ctrl+C.
Sie verhindern, dass ich Text in TEdits einfügen und daraus kopieren oder ausschneiden kann, auch zwar auch dann, wenn diese MenuItems deaktiviert sind. In TMemos klappt es aber. :eyecrazy:

Ich muss also die ShortCuts immer dann deaktivieren, wenn gerade ein TEdit den Fokus hat, und wiederherstellen, wenn es den Fokus verliert. Seltsam, aber so kann ich das Problem zumindest beheben, wenn auch auf eher unelegante Art. Aber ja, es klappt.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2482
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 07.09.21 18:13 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Hast du vielleicht KeyPreview am Formular aktiviert und dort Ereignisse zugewiesen?
Habe auf diese Frage noch nicht geantwortet: Ja, KeyPreview ist aktiviert, im KeyDown des Formulars sollen Alt+Pfeil links und Alt+Pfeil rechts zum linken bzw. rechten Textfenster (sie sind als Tabs angelegt) springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  {Alt+Pfeil rechts: nächstes (= rechtes) Tab}
  if (ssAlt in Shift) and (Key = VK_RIGHT) then
    if not (JvTabBar1.SelectedTab.GetNextVisible = nilthen
      JvTabBar1.SelectedTab := JvTabBar1.SelectedTab.GetNextVisible;
  {Alt+Pfeil rechts: vorheriges (= linkes) Tab}
  if (ssAlt in Shift) and (Key = VK_LEFT) then
    if not (JvTabBar1.SelectedTab.GetPreviousVisible = nilthen
      JvTabBar1.SelectedTab := JvTabBar1.SelectedTab.GetPreviousVisible;


Im KeyUp frage ich die Taste ab, die aktuell gedrückt wurde und setze des Status (Enabled, Visible) verschiedener Komponenten, anhängig davon, welches Textfenster gerade dargestellt wird:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if not (VirtualKeyCodeToStr(Key, True) = ''then
   {if (Key > 31) and (Key < 127) then  -> s. Prozedur aHLEditorXKeyPress}
    if (Key > 32and (Key < 127then
      GetVirtualKeyCode(Key);

  if JvTabBar1.Tabs.Count > 0 then
  begin
    SetComponentStatus(
      THLEditorX(FindComponent(
        'aHLEditorX'+IntToStr(JvTabBar1.SelectedTab.Tag))));

end;

Sonst gibt's da nichts, was irgendwie den Wert einer gedrückten Taste verändert.

Meine Lösung mit dem Deaktivieren und Aktivieren der ShortCuts erklärt aber nicht, wieso es in einem der Units des Projekts trotzdem funktioniert. Dort stelle ich nichts mit den ShortCuts an, das Fenster wird auch nicht modal angezeigt, es ist ein selbsterstellter Ersetzen-Dialog. Alles sehr merkwürdig.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!