2011-07-20 72 views
2

如何爲字符串網格創建自動滾動?德爾福:字符串網格的自動滾動

如果字符串網格不可見(例如在隱藏幀上),則屬性「行」或「TopRow」不起作用:不選中單元格。如果要顯示它 - 它將被選中,「Row」/「TopRow」將起作用。

試試。在設計時間。一個字符串網格:100行,可見:= false。在按鈕的點擊:StringGrid1.Row:= 99; StringGrid1.Visible:= true。並返回「可見」爲真正的字符串網格。請看看有所不同。

謝謝!

+2

只是好奇,爲什麼需要自動滾動,如果它不可見? – CloudyMarble

+0

切換一個框架 - >框架和一個String Grid - >可見 - >一個滾動在頂部。我需要在底部。 – maxfax

回答

1

呼叫HandleNeeded之前設置row如果字符串電網從來沒有顯示:

StringGrid1.HandleNeeded; 
StringGrid1.Row := 99; 

// later 
StringGrid1.Visible := True; 


最初不可見的,串格窗口尚未創建。設置row會設置屬性,但不能滾動不存在的窗口。

+0

到底!!! 「HandleNeeded」是做什麼的? – maxfax

+0

WinControl的句柄是窗口句柄,讓窗口句柄VCL必須創建控件的窗口。 –

+0

錯誤!在「StringGrid1.Row:= 99」之前,我改變了列的寬度。如果使用「HandleNeeded」,則網格線一次具有舊位置和新位置;文字顯示不正確! – maxfax

0

當我嘗試下面的代碼似乎工作同樣在所有三種情況,可見,unvisiblae和unvisible父:

StringGrid1.TopRow := 5; 
    showmessage(inttostr(StringGrid1.TopRow)); //shows 5 
    StringGrid1.Visible := false; 
    StringGrid1.TopRow := 2; 
    showmessage(inttostr(StringGrid1.TopRow)); //shows 2 
    StringGrid1.Parent.Visible := false; 
    StringGrid1.TopRow := 1; 
    showmessage(inttostr(StringGrid1.TopRow)); //shows 1 

那是什麼意思?

+0

嘗試。在設計時間。一個字符串網格:100行,可見:= false。在按鈕的點擊:StringGrid1.Row:= 99; StringGrid1.Visible:= true。然後在String Grid中返回「visible」爲true。請看差異。 – maxfax

+0

你試過這樣做嗎? – maxfax