Autor |
Beitrag |
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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 Th69: 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
Beiträge: 19289
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.09.21 21:58
galagher hat folgendes geschrieben : | //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:
Quelltext 1: 2: 3: 4:
| Shift down Taste A down Taste A up Shift up |
Oder bei einem Kleinbuchstaben a:
Quelltext 1: 2:
| Taste A down Taste A up |
Ja, ein TEdit sollte standardmäßig mit diesen Tastenkombinationen ausschneiden, einfügen usw.
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 07.09.21 08:22
jaenicke hat folgendes geschrieben : | galagher hat folgendes geschrieben : | //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.
jaenicke hat folgendes geschrieben : | Ja, ein TEdit sollte standardmäßig mit diesen Tastenkombinationen ausschneiden, einfügen usw. |
Tut es aber nicht, und ich habe keine Ahnung, wieso!
galagher hat folgendes geschrieben : | //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
Beiträge: 19289
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 07.09.21 11:35
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19289
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 07.09.21 13:34
jaenicke hat folgendes geschrieben : | 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
Beiträge: 19289
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 07.09.21 13:41
Hast du vielleicht KeyPreview am Formular aktiviert und dort Ereignisse zugewiesen?
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 07.09.21 17:44
Th69 hat folgendes geschrieben : | 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.
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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 07.09.21 18:13
jaenicke hat folgendes geschrieben : | 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if (ssAlt in Shift) and (Key = VK_RIGHT) then if not (JvTabBar1.SelectedTab.GetNextVisible = nil) then JvTabBar1.SelectedTab := JvTabBar1.SelectedTab.GetNextVisible; if (ssAlt in Shift) and (Key = VK_LEFT) then if not (JvTabBar1.SelectedTab.GetPreviousVisible = nil) then 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if not (VirtualKeyCodeToStr(Key, True) = '') then if (Key > 32) and (Key < 127) then 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!
|
|
|