Entwickler-Ecke
Sonstiges (Delphi) - ursprüngliche Funktion einer Taste löschen
Konna - Fr 22.04.05 20:18
Titel: ursprüngliche Funktion einer Taste löschen
Hi
Wie kann ich die ursprüngliche Funktion einer Taste löschen, z.B. dass wenn man auf Space drückt kein Leerzeichen kommt, sondern etwas anderes passiert (was dann zum Beispiel mit einem onkeydown-ereignis zu realisieren wäre)?
Tobias1 - Fr 22.04.05 20:20
Vielleicht ginge es mit Tastatureingabe abfangen und Tastendruck simulieren.
Konna - Fr 22.04.05 21:45
wie macht man das?
Blackheart - Fr 22.04.05 22:05
zb So
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); var Sonderzeichen:Boolean; begin if Sonderzeichen=true then begin if key = 'ä' then begin Memo1.Text:=Memo1.Text+'ä'; key:=#0; Memo1.SelStart:=Length(Memo1.Text); end ; end. |
Konna - Sa 23.04.05 13:44
Danke!
Ich hatte erst ein keydown-ereignis, weil ich nicht wusste wie ich RETURN da abfangen kann. Jetzt hab ichs aber rausgefunden (if key=#13).
Konna - Sa 23.04.05 14:20
och menno! jetzt funktioniert das mit den pfeiltasten nicht mehr!!! wie krieg ich das nu hin?
die nummern währen doch eig #37 für links und #39 für rechts, aber es passiert nur das, was immer passiert wenn man links oder rechts drückt :-(
Heiko - Sa 23.04.05 14:28
In welcher Prozedur fängst du die Pfeiltasten ab? In der OnKeyDown- oder OnKeyUp-Prozedur?
Es kann sein das die Pfeiltasten nicht mehr funktionieren, da du Key:=#0 davor schon aufgerufen hast.
Konna - Sa 23.04.05 15:13
Okay nochmal alles der reihe nach:
erst hatte ich folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If key=VK_left then Edit1.SetFocus else if key=VK_right then Edit3.SetFocus else if key=vk_return then Button1Click(sender); end; |
aber return verursachte immer einen sound, weil das normalerweise im edit nicht geht. dann hab ich irgendwann geschnallt, dass ich da ein key:=#0 einbauen soll, aber das funzt net bei keydown oder keyup, weil der da meckert, dass #0 kein char ist, also hab ich das in ein keypress umgebaut:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: char); begin If key=#37 then Edit1.SetFocus else if key=#39 then Edit3.SetFocus else if key=#13 then begin Buuton1Click(sender); key:=#0; end ; end; |
Jetzt funktioniert Return wunderbar, ABER jetzt macht er bei den Pfeiltasten nur noch das, was bei einer Pfeiltaste immer passiert.
Ich steig da irgendwie net mehr ganz durch... :?
Jetzt wüsst ich gerne mal, was ich machen muss, damit das alles funzt...
Heiko - Sa 23.04.05 19:54
Was sind #37 und #39 für Tasten bei dir? Bei mir im Tafelwerk steht, dass #37=% und #39=' ist. Um herauszubekommen welche Zahl welche Taste ist, musst du mal nach dem ASCII-Code ausschau halten. Denn findest du auch bei meinem ersten Download [url=
http://www.delphi-forum.de/viewtopic.php?t=40322&postdays=0&postorder=asc&start=20]hier[/hier].
Aber das er #0 nicht kennt, ist kein wunder, da #0 nur bei OnKeyPress-Ereignis gibt.
Dein Quelltext müsste dementsprechend so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of VK_left: Edit1.SetFocus; VK_right: Edit3.SetFocus; vk_return: begin key:=0; Button1Click(sender); end end; |
Konna - Sa 23.04.05 21:25
danke, aber das hatte ich schonmal! das problem ist allerdings, dass das, was die taste normalerweise tut immernoch macht!
Lannes - Sa 23.04.05 23:26
Hallo,
in den zuvor aufgeführten Codes wird nur bei VK_RETURN die Variable Key auf 0 gesetzt.
Mit folgendem Code geht es so wie Du es möchtest.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of VK_LEFT: Edit1.SetFocus; VK_RIGHT: Edit3.SetFocus; VK_RETURN: Button1Click(sender); end; if Key in [VK_LEFT,VK_RIGHT,VK_RETURN] then Key := 0; end; |
Konna - So 24.04.05 12:20
Ich glaub ich bin langsam völlig blöd, auf jeden fall habe ich rausgefunden, dass ich sowieso zwei proceduren brauch, weil return, escape und backsapce im keydown eh nicht abgefangen werden können (davon mal abgesehen hats bei den anderen bei mir auch nicht geklappt :( ). Die Cursorpfeile wiederum haben keine Nummer im Keypress => keypress für return - keydown für die pfeile.
Trotzdem großen Dank an alle, die mir versucht ham zu helfen (ham se eig ja auch, ich weiß nu, dass es so net geht)
Heiko - So 24.04.05 12:41
Konna hat folgendes geschrieben: |
| Ich glaub ich bin langsam völlig blöd, auf jeden fall habe ich rausgefunden, dass ich sowieso zwei proceduren brauch, weil return, escape und backsapce im keydown eh nicht abgefangen werden können (davon mal abgesehen hats bei den anderen bei mir auch nicht geklappt :( ). |
??
Bist du zu dumm (sry, muss mal gesagt werden) oder kommst du nicht mit der Delphi-Hilfe nicht klar?
Backspace=VK_BACK
Escape=vk_Escape
Return=vk_Return
Das könntest du dir auch selber herleiten, da wie du siehst deine geforderten Tasten nur ein vk_ davor gresetzt bekommen!
hansa - So 24.04.05 17:51
Es nützt ja nichts, wenn Du nicht liest, was andere schreiben. 8) Genau das mit den "2 Prozeduren", den Funktionstasten usw. steht in dem Link drin.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!