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

TMEMO 做輸出, 如何讓它捲動顯示剛add 的字串呢

答題得分者是:pedro
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-06-15 14:42:00 IP:122.116.xxx.xxx 訂閱
我把 Tmemo 做記錄的輸出,
利用
Form1.Memo1.Lines.BeginUpdate;
Form1.Memo1.Lines.Add(msg);
Form1.Memo1.Lines.EndUpdate;

但剛加進的記錄無法使scrollbar 跟著往下捲動..

要怎麼做才能做到
1. scrollbar跟著捲動
2. 不要耗費太大量的cpu time
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-06-15 15:05:21 IP:60.250.xxx.xxx 未訂閱
   Memo.SelStart := Length(Memo.Lines.Text);

你有爬文嗎
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-06-15 15:20:15 IP:60.248.xxx.xxx 未訂閱
Hi

看似容易,一下子跳入回文,仔細想來,也並不是那麼容易!

問問使用BeginUpdate和EndUpdate用意是?

如果把這2個敍述拿掉,其實Memo的ScrollBar就會自已捲動.

procedure TForm1.Button1Click(Sender: TObject);
var
i:longint;
begin
for i:=0 to 100000 do
begin
// Memo1.Lines.BeginUpdate;
Memo1.Lines.Add(IntToStr(i));
Application.ProcessMessages;
// Memo1.SelStart:=Length(Memo1.Text)-10;
// Memo1.Lines.EndUpdate;
end;
end;
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-06-15 15:21:12 IP:122.116.xxx.xxx 訂閱
謝謝你提供的方式, 但沒有作用耶, 還是 Tmemo 有什麼屬性要設定的嗎? (我這邊環境是 D6)

請問你有試過這個方法嗎?


Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-06-15 15:29:51 IP:122.116.xxx.xxx 訂閱
pedro 大說得沒錯,
因為是multi threading 的記錄都要輸出到 memo,
所以才用到 beginupdate, endupdate. (一般情況的卻srollbar 會跟著一直往下捲動)
所以是個 begin, end 造成memo的游標位置歸到原點囉..

在 multi threading 集中outpu記錄到一個memo 的情況,
pedro 大有什麼好建議可以做呢?
criticalsection (不用beginupdate, endupdate)?
只用 beginupdate endupdate?
還是有別的方式呢?
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-06-15 15:56:50 IP:60.248.xxx.xxx 未訂閱
試看看這樣有沒有用?

procedure TForm1.Button1Click(Sender: TObject);
var
i:longint;
begin
for i:=0 to 100000 do
begin
Memo1.Lines.BeginUpdate;
Memo1.Lines.Add(IntToStr(i));
Memo1.Lines.EndUpdate;
Application.ProcessMessages;
SendMessage(Memo1.Handle, EM_SCROLLCARET, 0, 0);
end;
end;
編輯記錄
pedro 重新編輯於 2011-06-15 01:59:38, 註解 無‧
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-06-15 16:11:59 IP:122.116.xxx.xxx 訂閱
感謝pedro 大, 這方法可行.

另請教一個問題, 有人跟我一樣覺得memo這樣一行行加記錄進去,
它所耗的cpu time 還不算低嗎? 我是覺得事情看起來簡單, cpu time 卻不是很輕量的,
是因為可視化元件本生就比較操cpu 嗎?
系統時間:2017-12-12 14:16:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!