Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Caret Position im Richedit beim Tastendrücken PageUP/Down
ardely - Do 28.02.13 11:18
Titel: Caret Position im Richedit beim Tastendrücken PageUP/Down
Guten Tag
Wenn ich der vertikaler scrollbar eines Richedit bewegen, nach unten oder nach oben, das Caret Position bleibt im Text, also der Text bewegt sich mit dem Caret.
Aber wenn ich die Taste Page (up/down) drücke das Caret bleibt immer sichtlich, bewegt sich nicht mit dem Text.
Gibt es eine Möglichkeit dass der Caret am Text Position bleibt beim Tastendrücken Page-Up / Page-Down !
Danke für Ihren Vorschlag
bummi - Do 28.02.13 11:59
Ich hoffe ich habe die Anforderung richtig verstanden...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key in [VK_PRIOR,VK_Next] then begin if key=VK_PRIOR then PostMessage(Richedit1.Handle,WM_VScroll,SB_PAGEUP,0) else if key=VK_Next then PostMessage(Richedit1.Handle,WM_VScroll,SB_PAGEDOWN,0);
key := 0; end;
end; |
ardely - Do 28.02.13 12:31
Super, Danke für dein gutes Beispiel es klappt tadellos.
WasWeißDennIch - Do 28.02.13 12:58
*Hüstel*
in auf Word anzuwenden ist gewagt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of VK_PRIOR: PostMessage(Richedit1.Handle,WM_VScroll,SB_PAGEUP,0); VK_Next: PostMessage(Richedit1.Handle,WM_VScroll,SB_PAGEDOWN,0); else Exit; end; key := 0; end; |
Wen das Exit stört, der kann auch das Nullen in einen begin-end-Block für die beiden Fälle schreiben,
bummi - Do 28.02.13 13:17
@WasWeißDennIch , so problematisch wie Du sehe ich es nicht...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var i:Word; begin for I := 0 to High(Word) do if i in [VK_PRIOR,VK_Next] then memo1.lines.add(IntToStr(i))
end; |
WasWeißDennIch - Do 28.02.13 13:55
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var i, j: word; begin i := 300; j := 300; if i in [100, 200, j] then ShowMessage('Gefunden'); end; |
Wer da die Bereichsprüfung nicht aktiviert hat, sucht sich den Wolf.
bummi - Do 28.02.13 14:19
Ist schon klar, aber mein Set war ja gültig ...
WasWeißDennIch - Do 28.02.13 14:23
Auch klar, sonst hätte der Compiler das bereits bemängelt, da er es bei Konstanten bereits zur Compiletime bemerken kann. Trotzdem würde ich so etwas nach Möglichkeit vermeiden, da man sonst Gefahr läuft, Fehler wie in meinem Beispiel zu machen. Ganz abgesehen davon muss ich bei der case-Abfrage nur einmal vergleichen, aber das ist eher nebensächlich.
Narses - Do 28.02.13 18:27
Moin!
WasWeißDennIch hat folgendes geschrieben : |
Ganz abgesehen davon muss ich bei der case-Abfrage nur einmal vergleichen, aber das ist eher nebensächlich. |
Und falsch. ;) Wird erst richtig, wenn du ein "minimal" vor dem "einmal" einfügst. Wenn du einen Case suchst, der nicht in der Liste ist, musst du für alle Cases einen Vergleich "ausgeben". :idea:
cu
Narses
WasWeißDennIch - Do 28.02.13 18:48
Meine Güte, lasst uns ein paar Erbsen zählen und anschließend ein paar Haare spalten. Was ich meinte, war:
Delphi-Quelltext
1: 2:
| if Key in [Menge] then if Key = SomeKey then |
im Gegensatz zum case.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!