Delphi XE10 VertScrollBox 問題 |
答題得分者是:pcplayer99
|
heart75047
一般會員 發表:9 回覆:13 積分:19 註冊:2010-05-20 發送簡訊給我 |
使用VertScrollBox 想做到Line一樣的功能
移到最上層時再去讀取前一分頁的資料 研究了一下LINE 發現他是 移到最上層 重新讀取資料後 將ScrollBar "移到中間" 其中重新讀取資料的範圍 以及要移動的座標我已經算好了 偵測儀到最上層的事件解決了 控制VertScrollBox Scroll到我指定的座標 也解決了 於是將"控制ScrollBar到指定座標"的程式碼 放在 "偵測儀到最上層的事件"裡 正常運行 但是 如果再加上"刷新VertScrollBox內容" 的話 "控制ScrollBar"的程式碼就會失效 研究了一下 他不是失效 而是 會在刷新好幾次 然後還是回到最上層 應該跟"刷新VertScrollBox內容"有關 以下是已經簡化過很多的程式碼 unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation, FMX.Layouts; type TForm1 = class(TForm) VertScrollBox1: TVertScrollBox; Panel1: TPanel; Button1: TButton; procedure Button1Click(Sender: TObject); procedure VertScrollBox1ViewportPositionChange(Sender: TObject; const [Ref] OldViewportPosition, NewViewportPosition: TPointF; const ContentSizeChanged: Boolean); private procedure MsgRefresh; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin MsgRefresh; VertScrollBox1.ViewportPosition:=PointF(0,1000); //到最底端 end; procedure TForm1.MsgRefresh; //產生測試訊息 var i:integer; b:TButton; begin VertScrollBox1.OnViewportPositionChange:=nil; for I := VertScrollBox1.Content.ControlsCount -1 downto 0 do VertScrollBox1.Content.Controls[i].DisposeOf; for I := 0 to 19 do begin b:=TButton.Create(Self); with b do begin Parent:=VertScrollBox1; Position.Y:=50*i; Height:=40; Text:='TestMsg' inttostr(i); end; end; VertScrollBox1.OnViewportPositionChange:= VertScrollBox1ViewportPositionChange; end; procedure TForm1.VertScrollBox1ViewportPositionChange(Sender: TObject; const [Ref] OldViewportPosition, NewViewportPosition: TPointF; const ContentSizeChanged: Boolean); begin if VertScrollBox1.ViewportPosition.Y=0 then //如果移動到最頂端 begin //MsgRefresh; //這行拿掉 就正常 如果重新產生內容 就不正常 //VertScrollBox1.RealignContent; VertScrollBox1.ViewportPosition:=PointF(0,500); //移動到指定做標 //Abort; //下Abort就正常 但是如果在手機上面RUN 之前做的動作都不會做 end; end; end. 編輯記錄
heart75047 重新編輯於 2016-01-10 12:37:05, 註解 無‧
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |