elvin
一般會員

 發表:3 回覆:2 積分:1 註冊:2004-03-23
發送簡訊給我
|
請問各位
如何使RichEdit的V-Scrollbar可以拖拉至使文件中的最後一行為FirstVisibleLine
|
m8815010
版主
   
 發表:99 回覆:372 積分:289 註冊:2003-11-13
發送簡訊給我
|
引言:
請問各位
如何使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
發送簡訊給我
|
m8815010你好: 謝謝你的回答
我之前也是用類似的做法,可是仍覺有缺點,我是想說是不是有方法可以達到同C Builder中code edit的scrollbar一樣的功能
|
m8815010
版主
   
 發表:99 回覆:372 積分:289 註冊:2003-11-13
發送簡訊給我
|
引言:
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
發送簡訊給我
|
m8815010你好: 謝謝你的解答,我會試著去做做看
|