Memo/RichEdit 问题
怎么在Memo/RichEdit左边显示行号?(如ConTxt/utralEdit) 问题点数:100、回复次数:10Top
1 楼lxpbuaa(桂枝香在故国晚秋)回复于 2002-05-26 09:16:55 得分 10
procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
begin
for I := 1 to Memo1.Lines.Count do
0A begin
Memo1.Lines.Strings[I-1] := IntToStr(I) + #9 + Memo1.Lines.Strings[I-1];
0A end;
end;
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
I.Desire := '加不加分随你';
—————————————————————————————————
Top
2 楼willingsilly()回复于 2002-05-26 09:22:17 得分 0
这样搞,编辑时那不就乱了!
可能我没说清楚,我的意思是在Memo/RichEdit的left处显示,但不含在Text字符串属性里(像滚动条一样)Top
3 楼winglion(铁石)回复于 2002-05-26 09:46:04 得分 10
就是, willingsilly(偷溜) 你自己也清楚,可以用一个panel或什么地放在
memo左边,行号自己写上。Top
4 楼willingsilly()回复于 2002-05-26 09:51:51 得分 0
试过,高度搞不准,且捕捉不到滚动条的滚动消息(是了,怎么得到?),怎么改变行号?Top
5 楼outer2000(天外流星)回复于 2002-05-26 10:02:01 得分 10
有个偷懒的办法,可以在MEMO左边放一个LISTBOX,只要把字体等设的和MEMO一样就可以在里面写行号了,高度一致。Top
6 楼willingsilly()回复于 2002-05-26 10:24:24 得分 0
真高!!
又怎么捕捉滚动条的滚动消息?Top
7 楼eulb(执子之手,与子偕老)回复于 2002-05-26 10:36:19 得分 10
捕获滚动消息:
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;Top
8 楼willingsilly()回复于 2002-05-26 10:50:39 得分 0
谢了,下次结分Top
9 楼willingsilly()回复于 2002-06-03 17:17:56 得分 0
捕获滚动消息:
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
没用啊!捉不到!Top
10 楼agui(阿贵: 高级图形用户界面)回复于 2002-06-04 11:20:36 得分 60
是的,用
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
捕捉不到Memo的消息,只能捕捉到Form的滚动消息。
可以利用TControl.WindowProc(参考Delphi帮助)捕捉:
TForm1 = class(TForm)
...
private
FOldWinProc: TWndMethod;
procedure NewWinProc(var Msg: TMessage);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldWinProc := Memo1.WindowProc; // 保存原来的消息处理方法
Memo1.WindowProc := NewWinProc; // 用新的代替
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Memo1.WindowProc := FOldWinProc; // 还原消息处理方法
end;
procedure TForm1.NewWinProc(var Msg: TMessage);
begin
FOldWinProc( Msg ); // 选择原来的处理
// 判断是否滚动消息
if Msg.Msg=WM_VSCROLL then
begin
// 进行你的动作,如:ListBox.Perform( Msg.Msg, Msg.WParam, Msg.LParam );
end;
end;
Top




