![]() |
Problem beim OnKeyDown
Hallo,
ich möchte Eingaben in einem TWPRichText (von WPTools) verhindern, wenn der Cursor an einer bestimmten Stelle steht. Hierfür habe ich
Delphi-Quellcode:
Bei "normalen" Zeichen funktioniert es, beim Enter drücken sehe ich beim Debuggen ebenfalls dass Key zu #0 wird, das Enter aber wird trotzdem ausgeführt und ich habe einen unerwünschten Zeilenumbruch im Text!
var
f1, f2: integer; //Feldgrenzen s1, s2: integer; //Selektionsgrenzen begin // wenn ein Feld vorhanden ist und die Markierung im Feld steht darf nicht getippt werden if FeldInhalt = '' then exit; f1 := Pos(FeldInhalt, RTFRichtext.text); f2 := f1 + length(FeldInhalt); s1 := RTFRichtext.SelStart+1; s2 := s1 + RTFRichtext.SelLength; // Selektionsanfang im Feld? if (s1 > f1) then if (s1 < f2) then Key := #0; // SelektionsEnde im Feld? if (s2 > f1) then if (s2 < f2) then Key := #0; Was kann man tun? Ciao Stefan |
AW: Problem beim OnKeyDown
Ich kenne TWPRichText nicht, nehme aber an, dass das im Wesentlichen wie ein TRichEdit funktioniert.
Bei mir ist es so: Wenn im OnKeyDown Key=0 gesetzt wird, werden Enter, Cursortasten etc. unterdrückt, "normale" Tasten nicht. Wenn im OnKeyPress Key=#0 gesetzt wird, ist es genau umgekehrt, d.h. "normale" Tasten werden unterdrückt, Enter etc. nicht. Da Du Key=#0 setzt, nehme ich an, dass Dein Code im OnKeyPress steht und nicht im OnKeyDown wie der Titel des Threads suggeriert. Was mir sonst noch auffiel: Du prüfst nicht, ob Feldinhalt überhaupt im Text enthalten ist. Wenn das Pos(Feldinhalt,RichEdit.Text) 0 ergibt, sollte eine Exit erfolgen. Ich habe Zweifel ob die mit Pos(,,,) und SelStart ermittelten Positionen korrespondieren. Bei RichEdit.Text werden Zeilenumbrüche als #13 #10 dargestellt also 2 Zeichen. Bei SelStart scheint es so zu sein, dass Zeilenumbrüche als ein Zeichen behandelt werden. Das führt dazu, dass die mit Pos(Feldinhalt,RichEdit.Text) ermittelte Position von der mit RichEdit.SelStart ermittelten Position abweicht, und zwar um die Anzahl der Zeilenumbrüche vor der Fundstelle. (Das ganze natürlich nur wenn der Cursor an der Fundstelle steht). |
AW: Problem beim OnKeyDown
Danke, danke, danke!
Das mit dem key := #0 stimmt, ich hatte OnKeyDown und OnKeyPress beide probiert, jeweils aber nur das eine oder andere! Wenn ich beide Events entsprechend behandle funktioniert das Sperren der Tasten einwandfrei! Was die SelStart und SelLength betrifft, da bin ich auch schon drauf gestoßen, wenn der Feldinhalt Zeilenumbrüche enthält. Bei Feldinhalt = 'Hallo' + sLinebreak + 'Du' hat der Feldinhalt #13#10 als Umbruch aber Sellength ist 1 Zeichen zu kurz! Ciao Stefan |
AW: Problem beim OnKeyDown
Zitat:
Wenn du da Handled=True setzt, dann wirkt das auf alle Tasten.
Delphi-Quellcode:
procedure TMain.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
const NoCareKeys=[VK_Up,VK_Down,VK_Left,VK_Right,VK_Prior,VK_Next,VK_Insert, VK_Home,VK_End,VK_Shift,VK_Control,VK_Menu]; var Key:TShortCut; Shift:TShiftState; begin if ActiveControl<>reTest then Exit; Key:=Msg.CharCode; if Key in NoCareKeys then Exit; // Tasten, die den Text nicht verändern, ignorieren Shift:=[ssShift,ssCtrl,ssAlt]*KeyDataToShiftState(Msg.KeyData); // Und hier die Prüfung, ob Tastendruck unterdrückt werden soll. // Wenn die Taste unterdrückt werden soll, Handled:=True setzen. end; |
AW: Problem beim OnKeyDown
schau Dir doch mal das Project EditFields.dpr
in den Demos von WPTools an.... |
AW: Problem beim OnKeyDown
Liste der Anhänge anzeigen (Anzahl: 1)
wollte ich eben machen, aber folgende Fehlermeldung (Anhang)
Ciao Stefan |
AW: Problem beim OnKeyDown
Na dann schau Dir die Fehlermeldung mal genau an.......
|
AW: Problem beim OnKeyDown
Da scheinen mehrere Fehler in den Dateinamen zu sein, prüf' das doch mal mit NotePad (oder sonst 'nem Editor).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz