2011-07-20 20 views
2

String Gridの自動スクロールを作成するには?Delphi:String Gridの自動スクロール

「行」または「TopRow」というプロパティは、文字列グリッドが非表示(たとえば、非表示のフレーム)の場合、セルが選択されていない場合は役に立ちません。表示する場合は、セルが選択され、「行」/「TopRow」が機能します。

は試してみてください。デザイン時。文字列グリッド:100行、visible:= falseボタンのクリックで:StringGrid1.Row:= 99; StringGrid1.Visible:= true文字列グリッドの場合、 "visible"をtrueに戻します。違いをご覧ください。

ありがとうございます!私は次のコードをしようとすると

+2

ちょうど興味がありますが、なぜ表示されない場合は自動スクロールする必要がありますか? – CloudyMarble

+0

フレームを切り替える - フレームとその上の文字列グリッド - >表示 - >スクロールが一番上にあります。私は底に必要です。 – maxfax

答えて

1

コールHandleNeeded

StringGrid1.HandleNeeded; 
StringGrid1.Row := 99; 

// later 
StringGrid1.Visible := True; 


最初は目に見えない、文字列のグリッドウィンドウがまだ作成されていません。 rowを設定するとプロパティは設定されますが、存在しないウィンドウはスクロールできません。

+0

正確に! "HandleNeeded"とは何ですか? – maxfax

+0

WinControlのハンドルはウィンドウハンドルです。ウィンドウハンドルを持つために、VCLはコントロールのウィンドウを作成する必要があります。 –

+0

バグ!!! Before "StringGrid1.Row:= 99"私は列の幅を変更します。 "HandleNeeded"を使用する場合、グリッド線は一度に古い位置と新しい位置を持ちます。テキストが間違って表示されます。 – maxfax

0

は、すべての3例、目に見える、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 

はあなたが何を意味するということですか?文字列のグリッドが前に示したことがない場合 rowを設定する前に

+0

を試してください。デザイン時。文字列グリッド:100行、visible:= falseボタンのクリックで:StringGrid1.Row:= 99; StringGrid1.Visible:= trueそして、文字列グリッドの "visible"をtrueに戻します。違いを見てください。 – maxfax

+0

あなたはそのようにしようとしましたか? – maxfax