ベストアンサー StringGridでの文字入力制限 2005/01/14 10:17 C++BuilderでStringGridで、GoEditingプロパティをtrueに設定してセルの内容を編集するときに、数字のみ受付可能にするにはどうしたらいいでしょうか?よろしくお願いします。 みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー KoHal ベストアンサー率60% (110/181) 2005/01/14 23:04 回答No.2 TStringGrid::OnGetEditMaskイベントが使えます。 仮に(1, 1)~(10,10)までのセルで入力を0~9999までの整数に制限したいのなら、 void __fastcall TForm1::StringGrid1GetEditMask(TObject *Sender, int ACol, int ARow, AnsiString &Value) { if ( ACol >=1 && ACol <= 10 && ARow >=1 && ARow <= 10 ) Value = "9999;0"; } マスク文字列の詳細はヘルプでTEditMaskを検索参照してください。 かなり細かい指定が可能です。 質問者 お礼 2005/01/18 14:42 お返事遅くなり申し訳ありません。 早速その方法でやってみたら問題解決しました。 本当にありがとうございました。 これからもBuilderが使いこなせるように頑張りたいともいます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) kmb01 ベストアンサー率45% (63/138) 2005/01/14 18:38 回答No.1 StringGridにはチェック機能がないようなので、 1、OnSelectCellとOnExitにチェックするコードを書く 2、OnSetEditTextで1文字入力されるたびにチェックする のどちらかだと思います。 あと自分はやったことがないですが、 3、StringGridを継承して新しいクラスを作る 4、TDBGridを使う という方法もあるらしいです。 質問者 お礼 2005/01/15 23:20 回答ありがとうございました。一度その方法でやってみます! まだまだ初心者なのでこれから努力してがんばりたいです。 ありがとうございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連する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列目には本来の内容(文字)が表示 されて来ます。 別のセルをクリックすると、正しい内容に戻りますので、表示だけの問題だと 思うのですが、不思議で困った現象です。 なんとか、これを回避する方法はないでしょうか? delphi6 StringGrid セルの位取り delphi6 StringGrid セルの位取り セルの値(数字)を右寄せ、位取りさせて表示させたいのですが、きれいに並びません。 A:='00,123,456,789' B:='00,000,123,456' にすると、きれいに並びますが、 A:='___123,456,789' B:='_________123,456' と、0を空白にすると並びがずれます。 右寄せにするプロパティはないでしょうか? QNo.258234に似た質問がありましたが、もっと簡単にできないでしょうか? 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に収まるかというチェックとか、メモリーの解放をする、といったことも必要ですが、記述を省略しました。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム BCBのStringGridでデータ修正の許可制御をしたい Borland C++ Builder5 を使っています。 StringGridにデータを表示するのですが、そのデータの修正を許可する場合と 許可しない場合を動的(プログラム実行中)に切替したいと思っています。 (StringGridにキー入力が出来るようにしたり、出来ないようにしたりしたい、 という意味です。 ただし、マウスのクリックと、矢印キーでの移動は常に出来るようにしたいと 考えています。) OptionのgoEditing をセットしたり外したりすれば良いのでは、と考えたので すが、そのやり方が分かりません。 もしかしたらC++の基礎的な部分かも知れませんが、どなたかご指導をお願い します。 C++Builderでエクセルファイルのデータを取得する方法について 現在、C++Builderでエクセルで保存されたファイルの内容から必要なデータを 読み込みたいのですが方法が全くわかりません。 やり方を教えて頂けないでしょうか? 例えば、エクセルのA1の場所にある文字(数字)をStringGridに表示させたりしたいです。 後、複数のシートに分かれたエクセルのファイルのデータをシート毎にデータを取得する方法など宜しくお願い致します。 EXCELで文字入力 「A1」に数字、「B1」に文字、「C1」に数字、「D1」にまた文字を入力するような表の場合、セルを移動しただけで、かな入力になるような自動設定はどうしたらよいのでしょうか? セルに入力制限をかけたい EXCELVBAで、 ユーザがエクセルのセルに入力するときに (1)このセル(A1)は半角数字8文字、 (2)このセル(C5)は一つ上のセルが空欄のときは入力できない、 のような制限をかけたいと思いますが、 可能でしょうか。 宜しくお願い致します。 C++Builder 6 でドラッグ&ドロップ通知を C++Builder 6 のEditBoxでドラッグ&ドロップ通知を受け取るのはどのプロパティをtrueにしたらいいのでしょうか? 宜しくお願いいたします。 Delphi6 ループ中にキー入力 Delphi 6 です。 for next などのループの中で、stringgridのセルをEnterキーで選択させたい時、選択されるまで(キーが押されるまで)処理を進めたくない方法は、どうするんでしょうか? flg:=false; for i:=1 to 100 do begin ~諸々の処理で flg:=true; ~ if flg=true then x[i]:= stringgridの選択されたRow番号(はじめからフォーカスされている番号でなく) ~諸々の処理で flg:=false; ~ end; StringGridで選択した箇所の文字色を変更するには C++Builderにてプログラミングをしてるのですが、わからないことがあり質問させていただきました。 内容は、以下の通りです。 StringGridに文字を入力したあと、入力した文字をマウスにて範囲指定し ボタンを押下する事で選択した範囲の文字色を変更したいのですがどうしたらいいのでしょうか? したい事は、エクセルやワードで選択範囲の文字色を変えて表示している機能を作成したいとがんがえております。 よろしくお願い致します。 スクロールバーの幅 Borland C++ Builder6でプログラムを作成しています。StringGridで行を増やしていくとスクロールバーが出てきますが、このスクロールバーの幅を取得することは可能なのでしょうか。可能ならば、どうすればいいのでしょうか。 セル表示 DelphiのStringGridの一つのセル内に 123 456 789 と1~9の数字を表示したいのですが、可能でしょうか。 欲張りですが 1 3 56 7 などのように、全部ではなく1~9の数字の幾つかを表示 できればと思います。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 表入力で・・・ セルA>セルBの場合はセルBの数字が、A<Bの場合はAの数字がセルCに反映されるように設定する方法を教えて下さい。 エクセル_特定範囲のセルの入力制限 エクセルについて教えてください。 範囲指定したセルのパターンや罫線の変更はOKだが、削除・編集はできないようにする(削除・編集しようとすると禁止のメッセージが出る) という規則を付けたいのですが、シートの保護、マクロ等いろいろ試しましたがうまくいきません。 『ロック解除&シートの保護』だと罫線変更まで出来なくなってしまいます。 マクロは初心者です。こんなの↓を見つけてきましたが、セルごとの指定で範囲指定できません。また複数セルを選択してDeleteするとDeleteできてしまいます。 Const cnsRANGE_C1 = "$E$2" ' ここで指定する If Target.Address = cnsRANGE_C1 Then MsgBox "このセルの値は、変更・削除できません" Application.EnableEvents = False Application.Undo Application.EnableEvents = True どうぞよろしくお願い致します。 エクセルの文字入力について エクセル97です。セルに数字3000と入力すると、 3***と表示される。なぜ? 正しく入力できるようにする設定を教えて下さい。 エクセルの文字入力ボックスがありません 現在エクセル2003を利用しております 通常エクセルの指定のセルに文字を入力すると エクセルのウィンドウ上部にある入力ボックスに同じ内容の文字が出て (ツールバー内) それを編集することによってエクセルのセルの文字を編集できますが 僕のエクセルではこの文字入力ボックスが ウィンドウ上部に出てきません どのように設定すればこのような文字入力ボックスが出てくるようになるのでしょうか? 表計算ソフトカルクで列の下に有る文字が入力される 簡単な集計表を作成しております。 最近次の様な事が起こる状態になってしまいました。 解決策のご教示をお願いします。 セルA1からセルC1の1行目には1から3の数字、セルA8に「15m」B8に「30m」C8に「45m」、A9に「5月」B9に「6月」C9に「7月」と入力された表は有ります。A2からC7のセルは空欄で格子枠の表示設定です。 この表のセルA2からセルA7に数字の「1」を入力しようとすると「15m」(セルA8の文字)が、数字の「5」を入力しよとすると「5月」(セルA9の文字)が入力される様になってしまいました。1と5以外の数字は正しくそのまま入力する事ができます。 B列、C列とも同じ状態で入力しようとするセルの下方に記入されている文字が読み込まれてしまっているようです。表を作成した当初はこんな事はなかったので誤った操作をしたものと思いますが解決の方法がありましたらご教示お願い致します。 StringGridの使用方法について C++BuilderでStringGridを使用しているのですが、StringGridのサイズが、表示範囲より大きくなった時、例えば10行で表示画面より大きくなる場合、 1行目のデータが消えて2行目~11行目のデータが表示されると思いますが、このような時に表示されている先頭の行番号を取得方法を教えてください。 今回の場合だと、2と取得できる方法です。 後StringGridの指定行の固定も出来るのでしょうか? (エクセルのウィンドウ枠の固定みたいなもの) Excelの文字列検索関数について Excel2007で、あるセルに入っている英単語が、別のセル範囲(複数セル)に入っている英文の中にあるかどうか、を調べたいのですが、関数を使って実現できるでしょうか? たとえば、 A1に"This is a pen." A2に"That is a desk" という英文があり、 B1に"bat", B2に"pen"を入れたとします。 この場合、A1~A2に"bat"は存在しないのでC1には"FALSE"が、 A1~A2に"pen"は存在するのでC2には"TRUE"が自動的に入るようにしたいのです。 (TRUE - FALSE でなくても、数字などでもかまいません) FIND関数は単一セルの中の文字列しか検索できないし、 MATCH関数はセル内容が同一でないと結果が出ないのでそのままでは使えません。 何かいい方法はないでしょうか。 エクセル IF関数について C1セルに結果を求めたく、例えば下記のように A1セルがTRUEだったときにC1セルに0(数字)と結果が出る。 A1セルがFALSEで、B1セルが0(数字)だったときにC1セルに1(数字)と結果が出る。 A1セルがFALSEで、B1セルが0(数字)よりも大きい数字だったときにC1セルに2(数字)と結果が出る。 のような場合、C1セルに入れる式を教えてください。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
お返事遅くなり申し訳ありません。 早速その方法でやってみたら問題解決しました。 本当にありがとうございました。 これからもBuilderが使いこなせるように頑張りたいともいます。