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

このQ&Aのポイント
  • Borland C++ Builder5を使用して、StringGridでデータ修正の許可制御をしたいです。
  • StringGridに表示されるデータの修正をプログラム実行中に動的に切り替えたいと思っています。
  • マウスのクリックと矢印キーでの移動は常にできるようにしたいです。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
回答No.1

>OptionのgoEditing をセットしたり外したりすれば良いのでは、と考えたので すが、そのやり方が分かりません。 //セット StringGrid1->Options<<goEditing; //外す StringGrid1->Options=StringGrid1->Options >> goEditing; これでやってますが いけませんか?

Han1344
質問者

お礼

ありがとうございました。 狙い通りの動きになりました。 とても助かりました。

関連する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列目には本来の内容(文字)が表示 されて来ます。 別のセルをクリックすると、正しい内容に戻りますので、表示だけの問題だと 思うのですが、不思議で困った現象です。 なんとか、これを回避する方法はないでしょうか?

  • スクロールバーの幅

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

  • 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に収まるかというチェックとか、メモリーの解放をする、といったことも必要ですが、記述を省略しました。

  • BCBで配列の要素数(0)の場合

    OS:Windows XP Pro Borland C++ Builder Pro v5.0 配列の要素数を取得したいのですが(要素数が0の場合も含む) どのようにしたらよいかわかりません。 どなたか、ご存知でしたらご教授願います。

  • StringGridの使用方法について

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

  • LARGEARDDRESSAWAREオプション

    VC++のリンカオプションにLARGEARDDRESSAWAREというオプションがありますがBorland C++Builder5又は6にはないのでしょうか? また、このオプションをつけて作成したアプリケーションを有効にするためにはWindowsをどのように起動すればよいのでしょうか? どうか宜しくお願いします。

  • BCB5 日本語の1バイト目のチェック

    Borland C++ Builder5 を使っています。 日本語の1バイト目(または2バイト目)のチェックをしたいと考えています。 nthctype()関数を使えば良さそうなのですが、jstring.hをincludeしても、リンカエラーとなってしまいます。 他に何をincludeしたら良いのでしょうか? あるいは、nthctype()関数にこだわらず、1バイト目の判定が出来る方法があったらご指導いただければ幸いです。 要は、ある文字が、日本語の1バイト目であるか、2バイト目であるか、それ以外であるかが分かればOKです。 なお、文字はS-JISで作成されています。

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

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

  • C# DataGridView内での制御について

    初めて投稿します。 C#のwindowsアプリを開発しています。 開発ツールはVS2010を使用しています。 datagridview内の制御について困っているので 知恵を貸してください。 datagridviewのEditModeをEditOnEnterに設定し、常に入力モードにしています。 また、CellValidatingを使用し、各セルの必須チェックなどのエラーチェックを おこなっています。 Enterキー押下でCellValidatingイベントが発生し、エラーチェックを行う ことには問題ないのですが、矢印キーやマウスでのセル移動時にも、 CellValidatingイベントが発生します。 矢印キーやマウスでの操作の場合はCellValidatingイベントを発生させずに したいのですが、どうすればよいのでしょうか? 知っている方がいれば、知恵を貸してください。

  • 文字の色の変更

     Borland C++ Builderを使っています。 Memoコンポーネントに、文字列を読み込んでいて、その中の一文字をマウスでクリックした時、その一文字だけの色を変えたいのですが、どうしたらよいのでしょうか? 教えてください。お願いします。