• ベストアンサー

StringGridの使用方法について

C++BuilderでStringGridを使用しているのですが、StringGridのサイズが、表示範囲より大きくなった時、例えば10行で表示画面より大きくなる場合、 1行目のデータが消えて2行目~11行目のデータが表示されると思いますが、このような時に表示されている先頭の行番号を取得方法を教えてください。 今回の場合だと、2と取得できる方法です。 後StringGridの指定行の固定も出来るのでしょうか? (エクセルのウィンドウ枠の固定みたいなもの)

質問者が選んだベストアンサー

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.1

TStringGrid::TopRowで取得できます。同様TStringGrid::LeftColもあります。 >指定行の固定 実装された機能としては出来ません。 自前でコーディングすれば可能でしょうが、めんどくさそうです。

Simanohito
質問者

お礼

ご連絡ありがとうございます。 無事に教えて頂いた内容で出来ることができました。 StringGridの指定行の固定については面倒ということなので 違う方法を考えることにします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • BCB:StringGridでgoEditingを操作すると不思議な動きをする

    C++ Builder5で不思議な動きをしています。 StringGridで、OptionにgoEditingを操作し、修正不可のセットをしました。 StringGrid1->Options = StringGrid1->Options >> goEditing; その後、StringGridのどこかのセルをクリックして、そのセルをスクロールバー で隠したり表示したりすると、修正不可セット直前にカーソルのあったセルの 内容が現れてきます。 具体例を示すと、1行3列目にカーソルのある状態で、修正不可にセットします。 次に、5行5列目をクリックした後、スクロールバーでこのセルを見えない様に StringGridをスクロールします。 再度、5行5列目が見えるようにスクロールを戻すと、1行3列目に入っていた 内容(文字)が表示されているのです。 この時、別のセルをクリックすると、5行5列目には本来の内容(文字)が表示 されて来ます。 別のセルをクリックすると、正しい内容に戻りますので、表示だけの問題だと 思うのですが、不思議で困った現象です。 なんとか、これを回避する方法はないでしょうか?

  • DelphiのStringGridについて

    StringGridにFixedColsやFixedRowsというのがありますが、これを1以上に設定して、この固定された行を選択した時にイベントが起こるようにしたいのですが、OnClickイベントだと選択できる(Fixでない)行を選択しないと発生しないようです。 これに対応するイベントはありますか? あるいは他に対処法はあるでしょうか?

  • BCBのStringGridでデータ修正の許可制御をしたい

    Borland C++ Builder5 を使っています。 StringGridにデータを表示するのですが、そのデータの修正を許可する場合と 許可しない場合を動的(プログラム実行中)に切替したいと思っています。 (StringGridにキー入力が出来るようにしたり、出来ないようにしたりしたい、 という意味です。 ただし、マウスのクリックと、矢印キーでの移動は常に出来るようにしたいと 考えています。) OptionのgoEditing をセットしたり外したりすれば良いのでは、と考えたので すが、そのやり方が分かりません。 もしかしたらC++の基礎的な部分かも知れませんが、どなたかご指導をお願い します。

  • StringGridの内容をクリップボードにCOPYしたい

    Borland C++ Builder 5 を使っています。 StringGridの内容をクリップボードにCOPYするプログラムを作っています。 Excelに貼り付けるのが目的なので、Tab区切りのデータにしています。 下に示したソースで実現できましたが、非常に遅いのです。 100行とか200行ならアッという間なのですが、2,000行、3,000行となるとかなり待たされます。 時間を食っているのは(2)の部分のようです。 もう少しスマートに、短時間でCOPYしたいのですが、方法はないものでしょうか? ◆ソースの解説 StringGridの21列分を、行数だけクリップボードにCOPYします。 (1) StringGridの各行、各列をLOOPしてセルに格納されている文字列長の合計を求めます。 Tab区切りにするため、各セルごと1バイト加算します。 また、各行ごと改行を入れるため、これも1バイト加算します。 (2) 合計容量が計算できたら、メモリーを動的確保し、もう一度LOOPをしながら、文字列をCOPYします。 セルごとにTab、行ごとに改行も追加します。 (3) 最後にクリップボードをクリアしてCOPYします。 int cnt = StringGrid1->RowCount; int size = 0; //StringGridのサイズ(文字長)をカウントする ------ (1) for(i=0;i<cnt;i++){ for(k=0;k<21;k++){ size += strlen(StringGrid1->Cells[k][i].c_str()) + 1; } size++; } //メモリーを確保して、StringGridをCOPYする -------- (2) cb = new char[size]; strcpy(cb,""); for(i=0;i<cnt;i++){ for(k=0;k<21;k++){ strcat(cb,StringGrid1->Cells[k][i].c_str()); strcat(cb,"\t"); //Tab区切りの文字列にする } strcat(cb,"\n"); } Clipboard()->Clear(); // -------- (3) Clipboard()->AsText = cb; なお、サイズがintに収まるかというチェックとか、メモリーの解放をする、といったことも必要ですが、記述を省略しました。

  • C++Builderでエクセルファイルのデータを取得する方法について

    現在、C++Builderでエクセルで保存されたファイルの内容から必要なデータを 読み込みたいのですが方法が全くわかりません。 やり方を教えて頂けないでしょうか? 例えば、エクセルのA1の場所にある文字(数字)をStringGridに表示させたりしたいです。 後、複数のシートに分かれたエクセルのファイルのデータをシート毎にデータを取得する方法など宜しくお願い致します。

  • スクロールバーの幅

    Borland C++ Builder6でプログラムを作成しています。StringGridで行を増やしていくとスクロールバーが出てきますが、このスクロールバーの幅を取得することは可能なのでしょうか。可能ならば、どうすればいいのでしょうか。

  • Excel2007での行、列の同時固定について

    2003での解説はあるのですが、2007では単純に枠の固定を選択する項目がなく、行または列どちらかの選択肢しかないのですが。 表示タブのウインドウ枠の固定、以外からの操作方法はありますか? これだと、先頭行と先頭列どちらか一方しかなく、任意の行、列の固定はできないことになりますが・・・。 2003として使用することも出来るらしい、という説もあるのですが、2003に変更しないとムリでしょうか。

  • エクセル並べ替え

    エクセルでの「並べ替え」である部分を範囲指定をして、「データー範囲の先頭行」が最近になって常に「タイトル行(R)」になります。 、「データー範囲の先頭行」を常に「データ(W)」にしたいのですが出来ますでしょうか? 又、何か設定がありますでしょうか? よろしくお願いします。

  • WORD2003の差し込み印刷について

    WORD2003の差し込み印刷について 1.エクセルデータを差し込み用データにしてしようとしています。 その差し込み用データはエクセルのワークシートのA1から作成しておかないといけないのですか? 表の上にタイトルや空白行があるといけないのでしょうか? 2.差し込みデータを指定時、「先頭行をタイトル行として指定する」というところにチェックつける・つけないの指定がありますが、つけてもつけなくても同じなのですが、何の意味があるのでしょうか? 差し込み用のデータにタイトル行があってもなくても、この「先頭行をタイトル行として指定する」にチェックをつけてもつけなくても、差し込みデータとして対象になるのは同じ範囲です。 よろしくお願いいたします<m(__)m>

  • StringGridで選択した箇所の文字色を変更するには

    C++Builderにてプログラミングをしてるのですが、わからないことがあり質問させていただきました。 内容は、以下の通りです。 StringGridに文字を入力したあと、入力した文字をマウスにて範囲指定し ボタンを押下する事で選択した範囲の文字色を変更したいのですがどうしたらいいのでしょうか? したい事は、エクセルやワードで選択範囲の文字色を変えて表示している機能を作成したいとがんがえております。 よろしくお願い致します。