自动缩进的问题。(100分)

  • 主题发起人 主题发起人 SuperMMX
  • 开始时间 开始时间
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
我想当输入文字的时候,自动缩进, 也就是,回车后,光标自动
定位到和上一行第一个非控制字符对齐的位置。
我是这样想的,用的是richedit, 在onkeypress中加入:
if Key = #13 then
begin
找到位置;
定位;
end;
不知道有没有简单办法。

附加: 如何在richedit中实现象写字板的那种左边的margin,
又该怎么加上行号?

呵呵,问的太多了。
 
我想应该用textout之类的函数吧,那样margin就可以通过控制输出的坐标实现.
行号设一个变量随时记录就行.

想当然的,没有试验过,不知是否对你有帮助
 
我也想知道怎么做
 
我想,这就应该是比较简单的方法了吧. :-(
用底层一点的方法反而会更麻烦.
 
2)你可以看一看www.vclxx.com上的带原码的控件,
应该有和你的要求相同的,特别是那些带语法显示的。
 
错了,我试了一下,onkeypress 发生后, onchange 发生,
所以,即使在onkeypress中处理了,唉, 没法处理,
是不是应该加一个全程变量记录是否按下 enter, 然后在
onchange 中处理。(苯法子)

还请大家帮忙,margin and linenumber
 
procedure TEditForm.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
Memo1.SelText := #13#10;
Memo1.SelText := ' ';
key := char(0);
end;
end;

Memo可以,那么RichEdit也可以。你是不是没有用Key=char(0);?
 
hehe, 搞定,你的分两步,不好看,
seltext := #13#10 + 若干space.

margin and line number ,, come on ,
 
margin and line number ,

大家快上呀,大虾!
 
呵呵, 搞定了。如下:

1, margin:
var r: TRect;
r 是你要显示字符的范围,不能在范围以外显示,相当于margin.
SendMessage(aRichEdit.Handle, EM_SETRECT, 0, LongInt(@r));

2, LineNumber:
处理 RichEdit 的 WM_PAINT 消息。
procedure TMXRichEdit.WMPaint(var msg: TWMPaint);
var
i, j, k: Integer;
DC: HDC;
Canvas: TCanvas;
s: string;
begin
Inherited;
DC := GetDC(Handle);
Canvas := TCanvas.Create;
Canvas.Handle := DC;
Canvas.font.Assign(Font);
j := SendMessage(Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
for i := j to Lines.Count - 1 do
begin
s := IntToStr(i);
for k := 1 to Length(IntToStr(Lines.Count - 1)) - Length(s) do
Insert('0', s, 1);
Canvas.TextOut(0, -(i - j) * Font.Height, s);
end;
Canvas.Free;
ReleaseDC(Handle, DC);
end;

只要把Canvas 的brush, font, pen 属性和richedit 设的相同效果更好。


其实一直有这个想法,今天试了一下,效果还可以。


那我的分怎么办? 请斑竹把分作为专家分还给我吧。呵呵。
 
cAkk 坛主,给 DreamTiger 一些分, 再把剩下的给我吧,
唉!
 
不管了,放分,
DreamTiger: 40
beat: 15
g622: 15
popeye: 15
waiwai: 15
 
多人接受答案了。
 
后退
顶部