如何响应TRichEdit的滚动?(100分)

  • 主题发起人 主题发起人 yixin
  • 开始时间 开始时间
Y

yixin

Unregistered / Unconfirmed
GUEST, unregistred user!

想要在RichEdit翻页或是上下移动一行的时候进行一些处理,应该怎么进行呢?

 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
OldWinProc: TWndMethod;
procedure NewWinProc(var Message: TMessage);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.NewWinProc(var Message: TMessage);
begin
case Message.Msg of
WM_HSCROLL:
begin
caption := caption + 'WM_HSCROLL';

end;
WM_VSCROLL:
begin
caption := caption + 'WM_VSCROLL';

end;
end; //end of case
OldWinProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
OldWinProc := RichEdit1.WindowProc;
RichEdit1.WindowProc := NewWinProc;
end;

end.
 

谢谢,我试了试,这种情况只能处理通过点滚动条造成的滚动,如果是按PageDown
或者PageUp键该怎样处理呢?
如果是调用 SendMessage(RTF.Handle, EM_SCROLLCARET, 0, 0);来进行滚动呢?

 
在RichEdit的OnKeyDown中处理
 

判断是否是PageDown或者PageUp键对吗?怎么判断呢?
另外,如果拷贝来了一大段文字导致翻页,这样的问题又怎么解决呢?

 
其实你自己试一下就知道了。

procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
33: caption := 'page down'; //Page Down
34: caption := 'page up';
VK_DOWN: caption := 'down'; //向下的箭头
VK_UP: caption := 'up';
end;
end;
 

如果拷贝来了一大段文字导致翻页,我该怎么在这样的情况下进行一些处理呢?

 
后退
顶部