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

RichEdit Scrollbar isssue

尚未結案
elvin
一般會員


發表:3
回覆:2
積分:1
註冊:2004-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-31 13:34:53 IP:61.66.xxx.xxx 未訂閱
請問各位 如何使RichEdit的V-Scrollbar可以拖拉至使文件中的最後一行為FirstVisibleLine
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-31 15:36:19 IP:61.63.xxx.xxx 未訂閱
引言: 請問各位 如何使RichEdit的V-Scrollbar可以拖拉至使文件中的最後一行為FirstVisibleLine
elvin你好: 直接暴力強迫讓最後一行為 class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { int FstVsbLn=SendMessage(RichEdit1->Handle,EM_GETFIRSTVISIBLELINE,0,0); <--偵測目前的第一可見行數 if (FstVsbLn 1==RichEdit1->Lines->Count) <--如果已經是最後一行在FirstVisibleLine ,則不做 return; SendMessage(RichEdit1->Handle,EM_LINESCROLL,0,-(RichEdit1->Lines->Count)); <--先捲回第一行 SendMessage(RichEdit1->Handle,EM_LINESCROLL,0,RichEdit1->Lines->Count-1); <--再捲至最後一行 } 這樣做可以在一個button click事件下達成目的,但是如果你硬要把這功能加入Scroll Bar中,讓Scroll Bar在拖拉中使文件中的最後一行為FirstVisibleLine就應該會狗工(台語)很多了,所以要看你是否要這樣再說了!
elvin
一般會員


發表:3
回覆:2
積分:1
註冊:2004-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-31 18:15:33 IP:61.66.xxx.xxx 未訂閱
m8815010你好: 謝謝你的回答 我之前也是用類似的做法,可是仍覺有缺點,我是想說是不是有方法可以達到同C Builder中code edit的scrollbar一樣的功能
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-01 12:08:05 IP:61.63.xxx.xxx 未訂閱
引言: m8815010你好: 謝謝你的回答 我之前也是用類似的做法,可是仍覺有缺點,我是想說是不是有方法可以達到同C Builder中code edit的scrollbar一樣的功能
elvin你好: 嗯,我瞭解你想要的功能!但我查不道這些 class="code"> In Unit.h ~~~ class TForm1 : public TForm { __published: // IDE-managed Components TRichEdit *RichEdit1; private: // User declarations void __fastcall REWndProc(TMessage&); TWndMethod OldREWndProc; public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall ScrllLineMove(int LineNum); }; ~~~ In Unit.cpp //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { OldREWndProc=RichEdit1->WindowProc; RichEdit1->WindowProc=REWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::REWndProc(TMessage& Message) { if (Message.Msg==WM_VSCROLL) { int ScrllInfo=LOWORD(Message.WParam); int FstVsblLn; if (ScrllInfo==SB_LINEDOWN) { <--這是按"▼"鍵時做的事 Form1->Caption="SB_LINEDOWN"; FstVsblLn=SendMessage(RichEdit1->Handle,EM_GETFIRSTVISIBLELINE,0,0); if (FstVsblLnLines->Count-1) { Form1->ScrllLineMove(FstVsblLn 1); } return; } if (ScrllInfo==SB_LINEUP) { <--這是按"▲"鍵時做的事 Form1->Caption="SB_LINEUP"; FstVsblLn=SendMessage(RichEdit1->Handle,EM_GETFIRSTVISIBLELINE,0,0); Form1->ScrllLineMove(FstVsblLn-1); return; } if (ScrllInfo==SB_THUMBTRACK) { <--這個是你要再寫下去的 Form1->Caption="SB_THUMBTRACK"; } if (ScrllInfo==SB_THUMBPOSITION) { <--這個是你要再寫下去的 Form1->Caption="SB_THUMBPOSITION"; } } OldREWndProc(Message); } //--------------------------------------------------------------------------- void __fastcall TForm1::ScrllLineMove(int LineNum) { SendMessage(RichEdit1->Handle,EM_LINESCROLL,0,-(RichEdit1->Lines->Count)); SendMessage(RichEdit1->Handle,EM_LINESCROLL,0,LineNum); } 注意事項 1. 這範例的精神是自行做拖拽Scroll Bar的效果(應該是全部),也就是把原來的攔掉,加入自已寫的 2. 這範例只有寫Scroll Bar "▲"、"▼" 這兩顆鍵的效果(見下圖說明),另外直接拖拽Scroll Bar的長條柱的話還沒寫,我沒那麼多時間,留給你了!要攔的訊息就是上面例子中我預留的! >>,而不是上述的了,也還沒寫! < src="http://delphi.ktop.com.tw/download/upload\47243_123.jpg"> 發表人 - m8815010 於 2004/04/01 12:25:58
elvin
一般會員


發表:3
回覆:2
積分:1
註冊:2004-03-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-01 14:17:29 IP:61.66.xxx.xxx 未訂閱
m8815010你好: 謝謝你的解答,我會試著去做做看
系統時間:2024-06-24 21:26:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!