Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RichEdit runterscrollen (https://www.delphipraxis.net/6068-richedit-runterscrollen.html)

S - tefano 28. Jun 2003 12:46


RichEdit runterscrollen
 
Hi,

ich habe ein RichEdit auf meiner Form, in das ich ankommende Texte reinschreibe. Dabei wird zwar der Text eingefügt, aber danach steht der Cursor im RichEdit auf dem ersten Zeichen des Textes.
Hab dann mal zum Probieren Postmessage benutze, wobei ich zuerst ein VK_CONTROL mit WM_KEYDOWN, danach dasselbe mit VK_END und danach beides mit WM_KEYUP an das Handle des Richedits sende. Aber irgendwie springt der Cursor dann nur an das Ende der jeweiligen Zeile.
Als Übergangslösung hab ich mir ne Schleife gemacht, die dem RichEdit so oft ein VK_DOWN (Pfeil nach Unten) schickt wie es Zeilen hat, und danach ein VK_END schicke um ans Ende der letzten Zeile zu kommen.
Aber das muss doch auch irgendwie so gehen, dass ich einfach Strg + Ende simuliere, damit ich nur eine Message abschicken muss...
Weiß einer wie das geht?

Bis dann,

S - tefano

sakura 28. Jun 2003 12:52

Beim Memo geht es recht einfach mit
Delphi-Quellcode:
Memo1.ScrollBy(0, MaxInt);
...:cat:...

S - tefano 28. Jun 2003 13:28

Hm, ne, beim RichEdit klappts leider nicht.

Aber ich könnt ja mal die Überschrift ändern...

Christian Seehase 28. Jun 2003 13:59

Moin Stefano,

TRichEdit ist von TCustomMemo abgeleitet und kennt ScrollBy.
(zumindest bei mir).

Ansonsten könntest Du Dir ja auch mal EM_SCROLL bzw. WM_VSCROLL ansehen.

Das sinnvollste wäre aber wohl eigentlich, was Du beschrieben hast, also die Simulation von VK_CONTROL/VK_END.

Du musst nur daran denken die Reihenfolge einzuhalten, also
  1. WM_KEYDOWN mit VK_CONTROL
  2. WM_KEYDOWN mit VK_END
  3. WM_KEYUP mit VK_END
  4. WM_KEYUP mit VK_CONTROL

Daniel B 28. Jun 2003 14:09

Moin Christian,
Zitat:

Zitat von Christian Seehase
TRichEdit ist von TCustomMemo abgeleitet und kennt ScrollBy.
(zumindest bei mir).

ScrollBy gibt es schon beim Grid. Aber mit 0, MaxInt geht schonmal nichts. Jedenfalls beim Grid.

Grüsse, Daniel :hi:

Christian Seehase 28. Jun 2003 14:22

Moin Daniel,

ist schon lustig.
Ich hab's mal eben ausprobiert.
Bei einem Memo funktioniert es auch nicht ;-)
Das Caret wird verschoben, aber der angezeigte Ausschnitt des Controls nicht.

Aber so geht's (getestet)

Delphi-Quellcode:
  SendMessage(RichEdit1.Handle,WM_KEYDOWN,VK_CONTROL,0);
  SendMessage(RichEdit1.Handle,WM_KEYDOWN,VK_END,0);
  SendMessage(RichEdit1.Handle,WM_KEYUP,VK_END,0);
  SendMessage(RichEdit1.Handle,WM_KEYUP,VK_CONTROL,0);

S - tefano 28. Jun 2003 14:44

@Chris
Genau so hab ichs auch gemacht (nur mit Postmessage statt Sendmessage). Passiert das gleiche wie bei mir. Das Strg wird dann irgendwie nicht erkannt, das Richedit reagiert nur auf die Message für VK_END.

Christian Seehase 28. Jun 2003 14:46

Moin Stefano,

probier's mal mit SendMessage.

Postmessge wartet nicht bis die Message verarbeitet ist. Vielleicht geht dadurch etwas durcheinander.

S - tefano 28. Jun 2003 15:59

Hm, dann hab ich wohl vergessen das klar genug rauszustellen.
Hab mal stumpfer Weise deinen Code per Copy/Paste bei mir eingefügt.

Zitat:

Passiert das gleiche wie bei mir.
Damit meinte ich, dass ich es schon ausprobiert habe. Naja, läuft bei mir jedenfalls merkwürdigerweise nicht. :?

phXql 11. Mär 2004 21:33

Re: RichEdit runterscrollen
 
so nach langem suchen hab ichs endlich gefunden.

also erst die SelStart setzen:
Delphi-Quellcode:
RichEdit1.SelStart := RichEdit1.GetTextLen();
und dann das:
Delphi-Quellcode:
SendMessage(RichEdit1.handle, EM_SCROLLCARET,0,0);


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz