![]() |
OnKeyDown: Tastendruck abbrechen
Ich habe in meinem Editor zu dem Zweck der HTML-encodierung die Möglichkeit eingebaut, dass Sonderzeichen automatisch codiert werden können. D.h. wenn man auf ö drückt, erscheint direkt ö Das ist in einem onkeydown-event. Das funktioniert auch soweit, aber das ö kommt hinter dem codierten Umlaut trotzdem. Ich habe probiert key einfach 0 (null) zuzuweisen, aber das hat nichts geändert...
Also, was muss ich machen? |
Re: OnKeyDown: Tastendruck abbrechen
Delphi-Quellcode:
So (oder so ähnlich) sollte es gehen. Zeig doch mal etwas Code, wie es bei dir aussieht.
procedure TForm1.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if key = 'ö' then begin //füge Sonderzeichencode ein key := #0; end; end; |
Re: OnKeyDown: Tastendruck abbrechen
So (oder so ähnlich) sollte es gehen. Zeig doch mal etwas Code, wie es bei dir aussieht.[/quote]
Ok, wenn du willst. alleridngs ist es bei mir niocht so einfach wie in deinem Beispiel. Denn der User soll einstellen können, welche Zeichen ecodiert werden sollen und diese werden in einem array aufbewahrt. Naja, key ist außerdem vom Typ word und nicht char:
Delphi-Quellcode:
Mir fällt auf, das record nicht fett hervorgehoben wird. Direkt mal in der DP-Fragen sparte meckern ;-)
//der Variablentyp:
THotKeyItem =record Taste: TShortCut; gridLine: TStrings; //fungiert als Objektzeiger auf Ein Stringgrid end; //globale Variable: var umlautliste: array of THotKeyItem; //gloabel Konstanten: const AUSGABE =1; TEXTTASTE =0; //die onkeydown-procedure: procedure TEditorForm.SynEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var tastenkombi :TShortcut; i:integer; begin if confForm.CheckBox2.Checked then //das ist nur ob tastenencoding aktiviert ist. begin tastenkombi :=ShortCut(Key, Shift); for i:=0 to length(umlautliste)-1 do with umlautliste[i] do if taste =tastenkombi then begin Synedit1.SelText :=gridLine[AUSGABE]; key :=0; exit; end; end; end; |
Re: OnKeyDown: Tastendruck abbrechen
*hochschieb*
bitte einer erklären! |
Re: OnKeyDown: Tastendruck abbrechen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir mal eine kleine unoptimierte Demo zusammengeklickert.
Und das ist das Ergebnis. |
Re: OnKeyDown: Tastendruck abbrechen
Hi.
@yankee: Nimm anstatt des Arrays ein set of char... Da kannst du ganz einfach mit in prüfen und mit Include/Exclude einfügen/rauslöschen ;-) Mal ein Beispiel, wie man kein Zeichen 2x direkt hintereinander eingeben kann... ;-)
Delphi-Quellcode:
var
s : set of char; function IsOkay(c : char) : boolean; begin if c in s then begin Exclude(s, c); return false; end else if not (c in s) then begin Include(s, c); return true; end; end; |
Re: OnKeyDown: Tastendruck abbrechen
[OT]Ja, so ein gemisch aus Pascal und C# hat was für sich ;)[/OT]
|
Re: OnKeyDown: Tastendruck abbrechen
Aber ihr verwendet alle onkeypress und ich onkeydown. Und mit onkeypress komme ich an Strg, Shift undso doch nicht darn, oder?
Und ich will dem User das ja nicht vorschreiben. In einem PHP- HTML -JavaScript-gemischten qt kann es ja auch interessanter sein, wenn man sich die Sonderzeichen auf Strg + ö legt oder sowas. Naja, ich habe es jetzt jedenfalls so gelöst:
Delphi-Quellcode:
Nicht wirklich elegant, aber es funktioniert.
Synedit1.SelText :=gridLine[AUSGABE]+' '; //der Umlaut + ein Leerzeichen
key :=VK_BACK; //Backspace (entfernt das Leerzeichen wieder.) exit; EDIT: @Waldteufel: Ich habe jetzt den Zusammenhang zu meiner Frage nicht so richtig verstanden... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz