請問在ScrollBox中,拖曳子元件,如何讓指標靠近邊界時,自動移Scrollbar |
缺席
|
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
我在ScrollBox中,放多個子元件,這些元件是予許拖曳的。
元件間,有一些間隔。當在拖曳過程中,想在指標靠近邊界時,自動移Scrollbar,就像在Word中,拖曳字元,當靠近下邊界時,自動移Scrollbar。
請問該如何作呢? 我之前的想法是: procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
//Application.ProcessMessages;
if ((Sender as TControl).Height - Y < 24) and ((Sender as TControl).Height - Y >= 0) then
begin
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position 1;
sleep(50);
end;
Accept := False;
end; 把Application.ProcessMessages; 註解掉,似乎是正常動作。
但會造成在拖曳時,其他子元件不會重畫的現像。
但加上Application.ProcessMessages時,會發生一個記憶體錯誤。 請問該如何解?
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if y < 10 then ScrollBox1.Perform(WM_VSCROLL,SB_LINEUP,0); if y > ScrollBox1.ClientHeight-10 then ScrollBox1.Perform(WM_VSCROLL,SB_LINEDOWN,0); if x < 10 then ScrollBox1.Perform(WM_HSCROLL,SB_LINLEFT,0); if X > ScrollBox1.Clientwidth-10 then ScrollBox1.Perform(WM_HSCROLL,SB_LINERIGHT,0); end;發表人 - ccchen 於 2003/08/08 09:42:15 |
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
|
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
嗯,後來我加了一個Timer,由Timer負責移動ScrollBar...
類似:
在Timer1Timer中……
if FScrollState = ssDwon then
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position 1
else
if FScrollState = ssUp then
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position - 1; 在ScrollBox1DragOver
if ((Sender as TControl).Height - Y < 24) and ((Sender as TControl).Height - Y >= 0) then
Timer1.Enabled := True
else
Timer1.Enabled := False; 目前是合乎我的需求。現在評估這個Timer會不會很吃Resource,如果會的話,要改成ThreadTimer。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |