線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1429
推到 Plurk!
推到 Facebook!

TMemo和TRichEdit如何控制输入的行数

尚未結案
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-05 11:14:54 IP:218.5.xxx.xxx 未訂閱
我希望在TRichEdit中控制只允许用户输入指定行数,如8行,该怎么实现?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-05 11:31:23 IP:61.222.xxx.xxx 未訂閱
因該是可以這樣做! 1.在 OnChange Event 中,加入判斷 若 if RichEdit1.Lines.Count>最大行數 則刪除。 2.或者接管 OnKeyDown 處理,如 Enter 鍵等 大概是這樣吧! PS.不過,我都是用笨方法。建立 8個 Tedit 在KeyPress 互通。 如方向鍵,就會移動到上一個或下一個物件。。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-05 12:36:23 IP:202.39.xxx.xxx 未訂閱
依 wameng 大大的辦法(用一個 TStringList):
var
  sl: TStringList;    procedure TForm1.FormCreate(Sender: TObject);
begin
  sl := TStringList.Create;
end;    procedure TForm1.FormDestroy(Sender: TObject);
begin
  sl.Free;
end;    procedure TForm1.Memo1Change(Sender: TObject);
var
  iStart: integer;
begin
  if Memo1.Lines.Count > 8 then
  begin 
    iStart := Memo1.SelStart;
    Memo1.Lines.Assign(sl);
    Memo1.SelStart := iStart;
  end
  else
    sl.Assign(Memo1.Lines);
end;
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-05 14:29:57 IP:218.5.xxx.xxx 未訂閱
hagar兄的办法达到了我的目的,但总有些不尽人意,如果输满8行,再想往下输入是不允许了,但又多跳出一个空行,按理没什么关系,只是我的RichEdit只需要8行的高度,多跳一行就造成滚动;另外这时如将按某个键将第一行输满,不会自动换行,结果也是跳到了最后一行(第9行),并且出现闪烁. 不过还是要谢谢hagar. 其他大大有没有好方法也介绍介绍.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-05 14:56:59 IP:202.39.xxx.xxx 未訂閱
var
  sl: TStringList;
  iPriorSelStart: integer;    procedure TForm1.FormCreate(Sender: TObject);
begin
  sl := TStringList.Create;
end;    procedure TForm1.FormDestroy(Sender: TObject);
begin
  sl.Free;
end;    procedure TForm1.Memo1Change(Sender: TObject);
begin
  if Memo1.Lines.Count > 8 then
  begin 
    Memo1.Lines.Assign(sl);
    Memo1.SelStart := iPriorSelStart;
  end
  else
  begin
    iPriorSelStart := Memo1.SelStart;
    sl.Assign(Memo1.Lines);
  end;
end;    procedure TForm1.Memo1Enter(Sender: TObject);
begin
  iPriorSelStart := Memo1.SelStart;
end;    procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    Key := #0;
end;
可以把 TRichEdit.ScrollBars 設為 ssNone 就不要出現 Scrollbar 另外您說其中第一行輸滿, 不會自動換行是什麼意思? 是說游標自動跳到第二行嗎? 如果是的話, 您得自己計算輸入了幾個字算滿 滿了的話游標再跳到下一行 游標跳的方式參考: http://delphi.ktop.com.tw/topic.php?topic_id=18641
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-08 09:25:24 IP:218.5.xxx.xxx 未訂閱
看来得加些控制才能达到预想的效果.谢谢hagar
系統時間:2024-06-28 19:24:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!