- 1 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 03:39:51 ]
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 C++Builder使いが優しくコメントを返しますが、 お礼はC++Builderの布教と初心者の救済をお願いします。 Borland Home Page www.borland.co.jp/ <過去スレ> くだすれC++Builder(超初心者用) pc8.2ch.net/test/read.cgi/tech/1117225464/l50 くだすれC++Builder(超初心者用)その2 pc10.2ch.net/test/read.cgi/tech/1144308804/l50 <兄弟スレ> くだすれDelphi(超初心者用)その39 pc10.2ch.net/test/read.cgi/tech/1169386914/l50
- 496 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:17:55 ]
- TStringGrid を継承したクラスを作ろうとしたら、「型名が必要」というエラーがでてしまいました。
新規作成→アプリケーション から、ヘッダファイルでとりあえず、classの宣言をしただけなんですが 「Unit1.h」 : #include <Forms.hpp> //--------------------------------------------------------------------------- typedef class TMyStringGrid : public TStringGrid { // ← ここんとこで 「[C++ エラー] Unit1.h(12): E2303 型名が必要」 と怒られます private: public: __fastcall TMyStringGrid(TComponent* Owner); }TMyStringGrid; //--------------------------------------------------------------------------- class TForm1 : public TForm : 「TStringGrid」 を「TForm」や「TCheckBox」に変更すれば、問題なくコンパイルされるので 「タイプミスか?」と何度もチェックしてみたのですが、、、 環境は BCB6pro、cb6_upd4_pro修正パッチ適用済、WinXP pro SP2 です。ご指導の程、よろしくお願いいたします <(_ _)>
- 497 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:28:29 ]
- >>496
まずはVCLリファレンスの読み方でも勉強しようか TStringGrid ユニット Grids 結論から言うと宣言されてない型から継承したクラスをどうやって作るのかと。
- 498 名前:496 mailto:sage [2008/05/07(水) 13:33:21 ]
- すんません、自己解決しました。
#include <Grids.hpp> これが必要だったみたいです (^^;;;; ども、お騒がせでした
- 499 名前:496 mailto:sage [2008/05/07(水) 13:36:14 ]
- >>497
あ、すいません、前後してしまいました いや、なんかそこらへんのクラスに必要なヘッダってのは最初っから インクルードされてるもんだと思ってました (^^;;;; ありがとうございました <(_ _)>
- 500 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:38:16 ]
- >>499
パレットからフォームにコンポーネント置けば勝手にヘッダファイルが追加されるけど、ソース上でのみ宣言だと手動でヘッダincludeしないとダメだお ついでにtypedefはいらん気もするけど。
- 501 名前:496 mailto:sage [2008/05/07(水) 14:09:51 ]
- >>500
なるほど、そういう仕組みでしたか。 typedef しとかないと、宣言のときに一々 class xxxx って 頭にclassをつけなきゃいけなくなると思っていたのですが、 あれ?typedef しなくても、「 class 」って記述抜きで通っちゃいました なんでだろう???? 色々とありがとうございました <(_ _)>
- 502 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 10:21:49 ]
- そして、ドナドナ
- 503 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 06:35:46 ]
- unixのソースをPC上に移植したいと考えています。
・別階層に同名のファイルやフォルダって作れますか?( ・一気にサブフォルダを含めてプロジェクトに作成する事はできますか? (一つずつ、フォルダを掘って作成しないといけませんか?ドロップできなくて..)
- 504 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:04:01 ]
- コンポーネントのアンインストール方法
コンポーネントを試作中なのですが コンポーネントをインストールした状態でのテストをしてみたいと考えています。 (オブジェクトインスペクタがどんな感じになるかとか。。。) ということで 1.テストコンポーネントのインストール 2.コンポーネントのテスト 3.テストコンポーネントのアンインストール 4.コンポーネントの手直し という手順を繰り返したいのですが 3.をどうやってやったらよいのかがわかりません bcb6proです。 ご指導の程よろしくお願いします <(_ _)>
- 505 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:12:20 ]
- パッケージのインストールのダイアログで該当パッケージのチェックボックスを外すでいいんじゃないの?
てかアンインストールしなくてもテスト>手直し>コンポのビルド>インストールで問題ない。
- 506 名前:504 mailto:sage [2008/05/09(金) 17:55:26 ]
- >>505
なるほど!それでやってみます ありがとうございました <(_ _)>
- 507 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:08:30 ]
- 複数のフォームで同一の関数を使うにはどうしたらよいのでしょうか?
ヘッダファイルのpublicに入れるだけではダメですよね? ソフトはBCB6.0Proです。 よろしくお願いします。
- 508 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:35:37 ]
- 入門書嫁としか
- 509 名前:507 mailto:sage [2008/05/10(土) 00:51:44 ]
- 調べたところ、以下の本が良い、とのことで注文してみましたが・・・載っていますでしょうか?
田舎なので本屋に置いてないので、見てから買うことが出来ないため、来るまでわからないんです。 www.amazon.co.jp/C%2B%2BBuilder6-%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E6%B4%BB%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89- %E5%AE%9F%E8%B7%B5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%88Vol-2%E3%80%89%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%8 3%8B%E3%83%83%E3%82%AF%E7%B7%A8-%E7%94%B0%E4%B8%AD-%E5%92%8C%E6%98%8E/dp/4877830626/ref=sr_1_22?ie=UTF8&s=books&qid=1210348178&sr=1-22
- 510 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 13:26:42 ]
- とりあえず関数の宣言が書いてあるヘッダファイルを
全部のフォームのソースにインクルードしときゃいいんじゃね?
- 511 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 13:59:05 ]
- 派生コンポーネントでのプロパティのオーバーライド
アクセッサの再利用について。 bcb6.0pro / WinXP SP2 pro 例えば、TEdit を継承して TMyEdit というコンポーネントを作成し、 そこで、BorderStyle プロパティをオーバーライドして BorderStyle を変更するときに、サイズも一緒に変化させるようにしたい場合、 新規の writeアクセッサ の中で従来のアクセッサを再利用することは出来ないもんでしょうか? つまり // QMyEdit.h //--------------------------------------------------------------------------- class PACKAGE TMyEdit : public TEdit { private: void __fastcall SetMyBorderStyle(TBorderStyle BorderStyle); // Myアクセッサ宣言 TBorderStyle FBorderStyle; // ここで再宣言?しないと // 「'FBorderStyle' は 'TMyEdit' のメンバーではない」 と怒られる protected: public: __fastcall TMyEdit(TComponent* Owner); __published: __property TBorderStyle BorderStyle = // プロパティオーバーライド {read=FBorderStyle, write=SetMyBorderStyle, // ←ここのwriteを拡張したい default=bsSingle}; }; //---------------------------------------------------------------------------
- 512 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 14:01:05 ]
- // QMyEdit.cpp
//--------------------------------------------------------------------------- void __fastcall TMyEdit::SetMyBorderStyle(TBorderStyle BorderStyle) // Myアクセッサ実装 { if(BorderStyle != FBorderStyle) if(BorderStyle == bsSingle) this->Width += 10; // なんだかんだで else this->Width -= 10; // ぐちゃぐちゃやってから TCustomEdit::SetBorderStyle(BorderStyle); // 基底のアクセッサを呼び出す } //--------------------------------------------------------------------------- と、こんな感じのソースなのですが [C++ エラー] QMyEdit.cpp(39): E2247 '_fastcall TCustomEdit::SetBorderStyle(const TBorderStyle)' はアクセスできない と怒られてしまいます。 っていうかよく考えたら、元々こいつらはprivateで宣言されてるはずなので 当たり前っつっちゃ、当たり前なんですが、なんとかして SetBorderStyle ってのを 再利用できないものでしょうか? それともやっぱり、ゴリゴリと一から実装し直さないと駄目なのものなのでしょうか? よろしくお願い致します <(_ _)>
- 513 名前:507 mailto:sage [2008/05/10(土) 15:49:09 ]
- >>510
それはやっているんですけど、動かないので・・・。 メインのフォームに書かれている関数なので、そのヘッダファイルは他のフォームでもインクルードしているのですが、 未定義の関数として見られてしまうんです。
- 514 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:40:20 ]
- TEdit から継承されたBorderStyleに値を突っ込めばええだけだろ。
- 515 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:51:18 ]
- >>513
メインフォームのメンバ関数として定義してりゃそりゃ見つからんだろ。 普通の関数にしないと。
- 516 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:26:48 ]
- >>514
なるほどっ!! // this->BorderStyle = FBorderStyle; // ←これじゃBorderStyleが変わるわけがない TEdit::BorderStyle = FBorderStyle; // ←こっちでバッチリ!! オーバーライドされる前のやつってのも、こうすれば使えるんっすね!! ありがとうございましたぁーーーーっ!!!
- 517 名前:507 mailto:sage [2008/05/10(土) 18:55:18 ]
- >>515
あー、そゆことですか ありがとうございました
- 518 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:38:35 ]
- >>517
C++Builderの入門書じゃなくてC/C++そのものの入門書読むことをすすめとく。 STLもvectorくらいは最低覚えとけ。
- 519 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:48:44 ]
- プロパティエディターを登録しようとしても「'__classid' には VCL 形式のクラス型が必要」となってしまう。
enum TMyEnum {meA = 3, meB = 6, …… }; という型のプロパティを、オブジェクトインスペクタでプルダウンリストから選択して設定できるようにしたい。 ということで、プロパティエディターに TEnumProperty を使って登録しようと思ったのですが、ヘルプを参考に #include <DesignEditors.hpp> namespace Tenumproperty { void __fastcall PACKAGE Register() { RegisterPropertyEditor(__typeinfo(TMyEnum), 0L, "", __classid(TEnumProperty)); } } とやっても、 [C++ エラー] BinEdit.cpp(52): E2242 '__classid' には VCL 形式のクラス型が必要 というエラーが出て通りません。 インクルードするヘッダを <VCLEditors.hpp> と取り替えたり、両方記述してみたり、 あるいは、「Designeditors::TEnumProperty」としてみたりとか色々と試行錯誤してみましたが駄目でした。 class DELPHICLASS TEnumProperty; class PASCALIMPLEMENTATION TEnumProperty : public TOrdinalProperty というのは「VCL 形式のクラス型」ではないのでしょうか? ご指導の程、よろしくお願いいたします。 <(_ _)>
- 520 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:46:19 ]
- すみません。RegisterPropertyEditor のヘルプをよく読んでいませんでした。
エラーが出ていたのは、__classid(TEnumProperty) ではなく、__typeinfo(TMyEnum) の方でした。 TMyEnum はクラスではないので、 PTypeInfo TypeInfo; PPropInfo PropInfo = GetPropInfo(__typeinfo(TForm), "BorderStyle"); if (PropInfo) TypeInfo = *(PropInfo->PropType); という具合にしないといけないようですが、GetPropInfo がよくわかりません。 ヘルプを見ても引数が void のものしかありませんし、 Win32API の方で GetProp というのが該当する様ですが、こちらに変えてもうまくゆきませんでした。 enum型の型情報ポインタってのは、いったいどうやったら取得できるのでしょうか (´;ω;`)
- 521 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:02:40 ]
- ヘルプに記載はありませんでしたが、
extern PACKAGE PPropInfo __fastcall GetPropInfo(PTypeInfo TypeInfo, const AnsiString PropName)/* overload */; こんな関数がオーバーライドされているようでした。 コンポーネント本体のヘッダ、ソースと同じパッケージに突っ込むことで なんとかこれで「TMyEnum型の型情報ポインタ」とやらを取得できているっぽいです。 これで、プロパティエディタを登録できたはず! と思いきや、全然反映されていません(´;ω;`) 素のTEnumPropertyじゃ駄目なのかと、継承クラスを作ってもみましたが、やっぱりだめ Designintf::TPropertyAttributes __fastcall TAlignmentProperty::GetAttributes(void){ return TPropertyAttributes() << paValueList << paRevertable; } AnsiString __fastcall TAlignmentProperty::GetValue() { int iValue = GetOrdValue(); switch(iValue) { 〜中略〜 default : return AnsiString("dtUnknown"); } } void __fastcall TAlignmentProperty::SetValue(const AnsiString asValue) { if(asValue == AnsiString("dtLeftTop") ) SetOrdValue(DT_LEFT + DT_TOP + DT_SINGLELINE + DT_NOCLIP); else SetOrdValue(NULL); } TEnumPropertyを継承したときのオーバーライドってこれで合ってますでしょうか よろしくお願いします <(_ _)>
- 522 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:06:01 ]
- 動的にフォームを出したいのですが、
TfmOption *fmOption = new TfmOption(this); fmOption->ShowModal(); delete fmOption; どうもうごきません。 それとモーダルもしたくないのですが、 普通にメインウィンドウと同等のウィンドウとしたいのです。 オプションで初期にはロードしたくありません
- 523 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 07:43:32 ]
- >>522
TForm::Visibleをチェック。 新規作成したフォームはデフォルト値がfalseになってる。
- 524 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 10:04:48 ]
- ShowModal();すると、自動的にVisible=trueに設定されるから
Visible=trueは必要ないハズ。 >>522は基本的にOKだと思う。 動かないとは、表示されないという意味なのだろうか。 モーダルにしたくないなら、 fmOption->Show();
- 525 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:42:51 ]
- //---------------------------------------------------------------------------
void __fastcall Tform1::Button1Click(TObject *Sender) { *fmOption = new TfmOption(this); fmOption->Show(); } //--------------------------------------------------------------------------- void __fastcall Tform1::Button2Click(TObject *Sender) { delete fmOption; } //--------------------------------------------------------------------------- //ヘッダ private: // ユーザー宣言 TfmOption *fmOption ; まず、*fmOptionの*すらわからずやってます。 やりたいことは、オプションのコンポーネントがおおすきるので、 fmOptionの起動に時間がかかります。 それで、exe起動時に起動画面をだし、その間にオプションを出すよていです。 自動生成フォームとして提供したら起動画面がオプションがロードされた後 出てきて意味がないのです。 で、メインフォームのprivate変数にオプション保持用の変数をもって、 ロードしたいのですが、簡単そうでむずかしくて・・・。
- 526 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:43:57 ]
- ネット見てもShowModalしか出てこなくて。
- 527 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 19:21:12 ]
- で?
- 528 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 01:06:04 ]
- つかC/C++の基本だけでも勉強しないとにっちもさっちもいかなんじゃないかな。
その気がないならDelphiのほうがまだましだと思う。
- 529 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 17:06:13 ]
- >>525も低脳だが、
>>528の方がもっと低脳 の件について
- 530 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 19:49:26 ]
- なんでー?
- 531 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 19:58:38 ]
- >525
ヒント:ヘルプ
- 532 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 17:59:51 ]
- >>529
× の件 ○ な件
- 533 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:07:55 ]
- ものすごく素朴な質問なんですがエディットボックスがあるとして
buf[0]の値が255であるとき Edit->Text.printf("%02X",buf[0]); ヘキサの[FF]と表示されるようにしたいのですが、やはり AnsiString ss.printf("%02X",buf[0]); Edit->Text = ss; のように代入するしか方法はないのでしょうか?先人の方教えて 頂けませんか?
- 534 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:25:01 ]
- Edit->Text = AnsiString().sprintf("%02X", buf[0]);
- 535 名前:533 mailto:sage [2008/05/20(火) 18:45:00 ]
- >>534
教えて頂きありがとうございます。長い間のモヤモヤがとれて すっきりしました。
- 536 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:39:56 ]
- char[100]とかで配列持ってて、
AnsiStringで受け取った入力を、char[80]から入れたいんだけど、どすればいいんすか?
- 537 名前:536 mailto:sage [2008/05/20(火) 19:41:10 ]
- 連投すんません
入力されるブツは、日本語ダス
- 538 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:58:30 ]
- >>536
strcpy
- 539 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:22:05 ]
- エディトボックス入力(日本語を想定)のAnsiStringの文字列長ってどうやって調べるの?
- 540 名前:デフォルトの名無しさん [2008/05/22(木) 21:03:52 ]
- すいませんが教えてください。
BDS2006にて VCLフォームアプリケーションを新規作成する。 TExcelApplicationをフォームに貼り付ける。 コンパイルすると [リンカ エラー] Error: 未解決の外部参照 '__fastcall System::Variant::operator =(wchar_t *)' が C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\BCBOFFICEXP.LIB|Excel_XP_srvr.cpp から参照されました というエラーが出ます。 このエラーの解決方法がわかりません。 なにかをincludeしなければならないのでしょうか。
- 541 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:09:34 ]
- ちなみに、BCB5で同じことをすると、
Excel_XP・・・となっている部分が Excel_2K・・・となり 問題なくコンパイルは通ります。
- 542 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:12:15 ]
- >>540
ヘッダじゃなくてライブラリファイルが抜けてるっぽいね。リンカエラーだから。
- 543 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:29:09 ]
- imageコンポーネントでTColor型で絵を描いていきたいんだが、
BMP形式で保存すると32bitになりますよね? そこで、PixcelFormat で pf24bitを指定すると、なぜか書けないんです。 そこで、あえて32bitを指定してもなぜか書けずに特に指定せずに image->picture->〜 = (TColor)0xffffff だと書ける。 ただ、保存するのは24bitのBMPにしたいんだが、ググると ColorToRGBという関数があるみたいなんですが、 これの使い方教えて貰えませんか?ヘルプ見ても、いまいちわからなくて。 また、この関数使うのより簡単に24bitBMPへ保存できる良い方法が有れば伝授してください
- 544 名前:543 mailto:sage [2008/05/26(月) 23:01:57 ]
- すいません。
環境は、Builder 2006です。
- 545 名前:543 mailto:sage [2008/05/27(火) 19:08:00 ]
- 自己レス
Canvasに書いてから、pf24bitを指定する事で書けました。 どうやら順番があったようです
- 546 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:40:21 ]
- bcb2007を使っています。
dll内にフォームを用意したいのですが うまくいきません Form1=new TForm1(this);Form1->ShowModal();delete Form1; うまく呼び出す方法はあるのでしょうか?
- 547 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:17:59 ]
- C++Builder6.0でマルチスレッドのプログラムを作っています。
フォームにボタンとラベルを各1個配置し、ボタンをクリックする度に ラベルに表示される数字が+1されるようにしてあります。 以下のコードで普通に実行するぶんには動くのですが、(※)の箇所で ブレークを掛けてステップ実行を2回くらいやって再実行すると フリーズ(と思うほど長時間固まる)してしまいます。 なぜなのか教えて頂けないでしょうか。 void __fastcall TAppThread::Execute(void) { int cnt; cnt = 0; count = 0; while ( 1 ) { cnt++; //(※) cnt--; cnt++; Synchronize( Update ); Suspend(); } } void __fastcall TAppThread::Update() { Form1->Label1->Caption = IntToStr( ++count ); } void __fastcall TForm1::Button1Click(TObject *Sender) { if ( appThread ) appThread->Resume(); }
- 548 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:43:57 ]
- builder6.0を使っている初心者です。
恐縮ですが質問させてください。 プログラム上で動的にコンポーネント(TPanel)を配置しています。 そのコンポーネントにOnDragDropとOnDragOverイベントを取得させて 動作させたいのですがやり方がよく分からずうまくいきません。 初歩的な質問で申し訳ありませんが教えて頂けないでしょうか。 よろしくお願いします。
- 549 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 08:15:26 ]
- 抽象的すぎて意味わからんがな(´・ω・`)
- 550 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:23:37 ]
- C++Builder6 をつかっています。
だんだんプロジェクトが大きくなってくると、デバッガのインスペクトとかで表示される値が むちゃくちゃになってきます。回避方法ってないものでしょうか?
- 551 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:26:58 ]
- >デバッガのインスペクトとかで表示される値が むちゃくちゃになってきます。
それは無い。
- 552 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:24:59 ]
- そんな変数無ぇって言われる事はあるな
- 553 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:26:56 ]
- それはプロジェクトの大小じゃなくて、
コンパイラの最適化の結果。
- 554 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:32:53 ]
- そこは置いといて、変になることがあるってことよ
- 555 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:52:05 ]
- BCB6では変にならないお。
プロジェクトにファイルを追加した直後は、ブレークポイントで止まらなくなるけど。 ブレークポイントで止まった後は変数が変になることはない。
- 556 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:13:29 ]
- 全然関係ないけど、うちのBCB6は
struct Hoge : vector<int> {}; Hoge hoge; try { string a; if (a.empty()) throw exception(); Test test; } catch (...) { } これのTest(何のクラスでもいい)のデストラクタがなぜか呼ばれるんだけど、 再現する人いるかな。
- 557 名前:550 mailto:sage [2008/06/17(火) 12:37:45 ]
- ごめん、うちのバージョンは5だった・・・。
コンパイラの最適化OFFで、 if(Instance != NULL) { Instance->Data = 3; } とかやって、Instance->Data にブレークポイントを設定したとする。 それで、Instance の値を見ると NULL になってることがある。 プログラム自体はちゃんと動くんだけど、デバッガが、グダグダになることがある。 ダイレクトXアプリってのもあるのかなぁ? あと、これは仕様だと思うんだけど、いつのまにか、TOpenDialog で マイコンピュータを開くと、なにも表示されなくなった。
- 558 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:39:14 ]
- >>557
多分、6にうpするとそんなことない。
- 559 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:49:03 ]
- >>558
6ってもう買えないよね?
- 560 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:53:02 ]
- あー、新規なら買えるのか。スレ汚しスマヌ。
- 561 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:40:40 ]
- コードガードにバグがある6を今更買うの?
- 562 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:42:46 ]
- 5ならコードガード無いんじゃね?
ま、5と6使った自分なら、間違いなく6を選ぶ。
- 563 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:07:53 ]
- 5にもコードガードついてるよ。5のコードガードのバグは気づかなかった。
BDS2006 はもってるんだけど、なんかこれもバギーらしいな。 思い切って、2008 がでるまで待とうかとも思ってるんだけどね。 9月ぐらい? printf デバッグとかもう嫌だよ・・・。
- 564 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:40:32 ]
- デバッガで変数が正しく表示されなくなったら
パソコンを再起動 これ常識。 これで回復する。 自分のプログラムで、どっかぶち壊しまくってるんだよ。
- 565 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:45:00 ]
- 9xじゃあるまいし
- 566 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:52:20 ]
- 9xなら暴走して落ちるんだよ。
自分で自分のDSをぶちこわしているから変数がヘンになる。
- 567 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:11:35 ]
- 今時アプリがどんだけメモリ空間壊したって、PCの再起動なんて必要ないだろw
DSとか言ってるから古い人ぽいけど。
- 568 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:47:06 ]
- じゃあFSとか言えば納得するのか
- 569 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:13:34 ]
- メモリ空間を壊すって事は、Builder の場合、
デバッガ、コードガード、OS、の3つをすり抜けないと無理なんだけど、 そう言う事って出来るの?セキュリティホールみたいな物か?
- 570 名前:548 mailto:sage [2008/06/18(水) 02:27:24 ]
- すみません。説明不足でした。
void __fastcall TForm1::N1Click(TObject *Sender) { TTabSheet* tb; TScrollBox* sbox; TPanel* panel; TButton* bt; tb = new TTabSheet(PageControl1); tb->PageControl = PageControl1; sbox = new TScrollBox(tb); sbox->Parent = tb; ... panel = new TPanel(sbox); panel->Parent = sbox; ... bt = new TButton(panel); bt->Parent = panel; ... bt->DragMode = dmAutomatic; } こんな感じでPageControlに新しいタブを作成し、その中にTScrollBox、 更にその中にTPanel、更にその中にTButtonを配置させています。 やりたいことは、この新しく配置したTPanel上のTButtonをマウスドラッグで 移動できるようにしたいのですがその方法がよく分からないということです。 回りくどい説明で申し訳ありません。
- 571 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:39:03 ]
- ボタンをドラッグってどんな操作を想定してるの?ボタンはクリックするものなのに。
- 572 名前:548 mailto:sage [2008/06/18(水) 12:05:40 ]
- >>571
マウスの操作でボタンの座標位置を変更できるようにしたいです。 「自分で追加したボタンを自分の配置したい位置につまんで移動できる」 と言った方がわかりやすいかもです・・・。 OnDragDropイベントではなくOnMouseMoveイベントを使えばもっときれいにできるのかもしれないんですが、 ここではとりあえず「ドラッグで移動して配置する」という操作だけを目的としていたので イベントとして使いやすいと感じたDragDropを使用しています。
- 573 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:48:51 ]
- いや、だから、ボタンをつまもうとしたらクリックになっちゃうでしょ。
でクリックしようとしたときにちょっとした操作ミスでドラッグで移動になる、と。 そんな自己満足なUIは考え直せって。
- 574 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:07:01 ]
- そんなのレイアウトモード←→通常モードみたいな感じで切り替えれば済む問題でないの
- 575 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:39:38 ]
- もちろんそれでもOKだと思うが。
で所望の動作はWM_NCHITTESTでHT_CAPTIONってのがお手軽。
- 576 名前:548 mailto:sage [2008/06/20(金) 02:47:20 ]
- >>573-575
ボタンクリックとドラッグ混同の操作ミス等、言われてみたらその通りだと感じました。 アドバイス含め、対処できるように組み直したいと思います。 移動についてはさせることができました。 アドバイス、ご指摘ありがとうございました。
- 577 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:57:40 ]
- >>576
うちも VCL 以外で近いことを以前やったことあるけど、 そのときの実装は何ピクセル以上ドラッグするとドラッグ開始、 っていうふうにしてた。
- 578 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:30:23 ]
- 古いプロジェクトをコンパイルすると
-Hr スイッチにより vcl4.h を vcl.h の代わりにインクルードします っていうメッセージが出るんだけど、このスイッチって何処に記載されてるの? 古いプロジェクトの移行って面倒だね・・・。
- 579 名前:デフォルトの名無しさん [2008/06/30(月) 16:46:20 ]
- Vi$taにBCB6をインスコできますか?
- 580 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 04:50:20 ]
- V$sta捨てれ
- 581 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 09:39:37 ]
- 正直、そうしたいんですが、出来上がったexeのVi$ta検証に必要。
ところで、Vi$taってなぜかXPとマルチブートできませんよね?
- 582 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 09:50:06 ]
- っリムーバブルフレーム
- 583 名前:デフォルトの名無しさん [2008/07/01(火) 19:26:51 ]
- >>579
Vistaの動作検証だけなら開発は2000かXPで。 視覚スタイルは.manifest同梱で対応可。 Vistaアイコン(PNG圧縮256px)はIcoFxで可能。 res作成はVista対応SDKのrc.exeで可能。
- 584 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 19:49:26 ]
- 2000だとVistaなSDKがインスコできない罠が(;゙゚'ω゚'):
- 585 名前:デフォルトの名無しさん [2008/07/01(火) 22:49:40 ]
- >>583
そうなのか・・・XPに入れてexeとdllだけ2000にコピーしたから気付かなかったわ。
- 586 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 08:57:02 ]
- >>583
ビジュアルスタイル対応は、Theme Manager 使った方がいいのでは。
- 587 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:52:10 ]
- Windows XPでTurbo C++を使っているのですが、
TButtonのCaptionの色を変えるのに、次のようなコードでは変わりませんでした。 void __fastcall TForm1::Button1Click(TObject *Sender) { if (Button1->Caption == "blue") { Button1->Caption = "red"; Button1->Font->Color = clRed; } else { Button1->Caption = "blue"; Button1->Font->Color = clBlue; } } どうしたらいいんでしょうか? アドバイスよろしくお願いします。
- 588 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:56:41 ]
- TButtonのキャプションの文字色は変更できません。これはWindowsの仕様です。
もし文字色をシステムに従わないようにしたいのであれば、オーナドローでどうぞ。
- 589 名前:587 mailto:sage [2008/07/04(金) 23:06:41 ]
- >>588 迅速な回答ありがとうございます
- 590 名前:デフォルトの名無しさん [2008/07/06(日) 01:08:29 ]
- void __fastcall TfrmMain::Button1Click(TObject *Sender)
{ char *aaa; aaa = "jpg"; if(aaa == "jpg")Button1->Caption = "jpg"; } C言語の基本的なことだとはわかっているのですが・・・ これがtrueにならない理由って何でしょう? 基本的すぎるのか、文字列でググっても出てこないのはなぜー
- 591 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 01:18:27 ]
- >>590
void __fastcall TForm1::Button1Click(TObject *Sender) { char* aaa; char* bbb; aaa = "jpg"; bbb = "jpg"; ShowMessage(AnsiString().sprintf("aaa=%08X bbb=%08X", aaa, bbb)); }
- 592 名前:デフォルトの名無しさん [2008/07/06(日) 03:08:06 ]
- メモリ壊しまくりんぐ
- 593 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 04:34:54 ]
- リリースビルドならtrueになりそう
- 594 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 05:21:36 ]
- char* の大きさは4byteだから、 3文字突っ込むとちょうど4byte使用するから
メモリは壊れないのではないのか。
- 595 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 05:24:50 ]
- operator ==(const char*, const char*) {}
ができないのを今初めて知った(´・ω・`)
- 596 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 13:57:48 ]
- >>590
if ( strcmp( aaa,"jpg" )==0 ) とすればええんでないの? "jpg"ってすると、メモリのどっかに確保された4バイト('j','p','g',0)のアドレスを示す。 aaaに格納された"jpg"のアドレスと、ifで比較している"jpg"のアドレスが違うからfalseになる。
|

|