请教如何在TMemo控件中实现这个功能:在delphi编辑器编辑代码时,按住ALT和鼠标左键时拖动鼠标而选择的那个矩形? ( 积分: 200 )

  • 主题发起人 主题发起人 草原牧歌
  • 开始时间 开始时间

草原牧歌

Unregistered / Unconfirmed
GUEST, unregistred user!
1、在delphi编辑器编辑代码时,可以按住ALT和鼠标左键 并拖动鼠标而选择的那个矩形。
在TMemo中如果不涉及API的话好象不能实现!
在TCustomMemo级实现也可以!

2、在注册表中有REG_MULTI_SZ样的值,鼠标右键单击,选择“修改二进位数据”,弹出
“编辑二进制数值”的对话框,这个对话框中有一个多行文本框,前四个‘0000’是没有
焦点的,光标(Caret)也不会出现在‘0000’之中,并且用鼠标选择其内容时,它的内容是分段的,即只能选择二进制部分或内容。
这个怎么实现?

给出有效思路或代码!
 
1、在delphi编辑器编辑代码时,可以按住ALT和鼠标左键 并拖动鼠标而选择的那个矩形。
在TMemo中如果不涉及API的话好象不能实现!
在TCustomMemo级实现也可以!

2、在注册表中有REG_MULTI_SZ样的值,鼠标右键单击,选择“修改二进位数据”,弹出
“编辑二进制数值”的对话框,这个对话框中有一个多行文本框,前四个‘0000’是没有
焦点的,光标(Caret)也不会出现在‘0000’之中,并且用鼠标选择其内容时,它的内容是分段的,即只能选择二进制部分或内容。
这个怎么实现?

给出有效思路或代码!
 
那些都不是Memo,而是特殊的处理了,摆脱Memo,自己做吧,也有现成的
UltraEdit可以实现块选择功能

老WPS也可以实现(DOS下)
 
1.好像用TMemo搞不定。

2.演示程序
设想:用三个Memo代替一个Memo完成
a.放一个Panel1
b.在Panel1里面放入Panel2,并在Panel2里面放入Memo1
c.在Panel1里面放入Memo2,Memo3
e.控件属性设置
Panel1:
BevelOuter:bvNone
BorerStyle:bsSinle
Panel2:
BevelOuter:bvNone
Enabled:False
Memo2,Memo3:
HideSelection:False
再适当调整Align等属性,使看起来像一个Memo
加入代码
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Text := '0000';
Memo2.Text := '00 00 00 00 00 00 00 00 00 00 00 ';
Memo3.Text := '0000000000';
end;

procedure TForm1.Memo2Click(Sender: TObject);
begin
Memo3.SelStart := Memo2.SelStart div 3;
Memo3.SelLength := Memo2.SelLength div 3;
end;

procedure TForm1.Memo3Click(Sender: TObject);
begin
Memo2.SelStart := Memo3.SelStart * 3;
Memo2.SelLength := Memo3.SelLength * 3;
end;

procedure TForm1.Memo2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Memo3.SelStart := Memo2.SelStart div 3;
Memo3.SelLength := Memo2.SelLength div 3;
end;

procedure TForm1.Memo3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Memo2.SelStart := Memo3.SelStart * 3;
Memo2.SelLength := Memo3.SelLength * 3;
end;
 
我看快捷键表竟然没看到这个,算是学到了,有时候这个功能还是挺有用的。
 
使用windows提供的多行文本类可以实现吗?
1、创建一个(CreatewindowEx)一个多行文本框TMEdit
2、在TMEdit上剪裁一个矩形,并使这个矩形失效(‘0000’无效区的实现),如何做?
3、使光标(Caret)限制在某一区域内(如何做???好象用SendMessage发送一个什么消息)
 
后退
顶部