C++Builder相談室 Part18
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/01(土) 09:41:22【前スレ】
C++Builder相談室 Part17
http://pc11.2ch.net/test/read.cgi/tech/1162918887/
過去スレ・関連サイトは>>2-7あたり。
※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part5
http://pc11.2ch.net/test/read.cgi/tech/1135127048/
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.13
http://pc11.2ch.net/test/read.cgi/tech/1175861395/
※CodeGear(Borland)関連はこちら
【Borland】CodeGearオッチャ その5【(ノ∀`)アチャー】
http://pc11.2ch.net/test/read.cgi/tech/1186333161/
0577デフォルトの名無しさん
2008/03/28(金) 10:58:11別にそれほど
設計を間違えなければ
>実装したフリーorシェアってありますか?
さぁ?
コントロールパネルのスクリーンセーバーのプレビューはそれに近いかも
>情報表示。ユーティリティーなんて実現可能なものでしょうか?
可能かどうかっていうと、可能だろう
0578デフォルトの名無しさん
2008/03/28(金) 11:48:19プラグインというかフロントエンドだけど。
0579デフォルトの名無しさん
2008/03/28(金) 12:01:05InternetOpenとかなんだけどBuilder5でちゃんとコンパイルできてたのに
2007でやるとリンカエラーになる・・・
とおもってヘルプみたらlibファイル変わってるじゃん馬鹿!!
まあファイル名を変えたらちゃんとできたんだけど、ころころ変えるなやなあ
0580デフォルトの名無しさん
2008/03/28(金) 12:10:15Builder5でTPanelのColor変えたら背景色変更してたのに2007じゃ変わらない・・・
これマジでわかんないです、エロい人TPanelの背景色の変え方教えてください
0581デフォルトの名無しさん
2008/03/28(金) 12:10:26BCBクオリティだな
0582デフォルトの名無しさん
2008/03/28(金) 12:30:31一度調査してみます。
情報ありがとうございました。
0583デフォルトの名無しさん
2008/03/28(金) 12:40:140584デフォルトの名無しさん
2008/03/28(金) 13:21:20うへwwwww変わったwっうへうへwwwww
オブジェクトインスペクタで一度Color変更してから実行したら動的に変更してもちゃんと色変わったwwwww
なにこの糞仕様wwwwwwwwwwwwwwwwwwwwww
これ他のコントロールも危険っぽいwwwwwwwwwwww
0585デフォルトの名無しさん
2008/03/28(金) 14:06:090586デフォルトの名無しさん
2008/03/28(金) 17:16:51ParetBackgroundやTransparentかな?
ついでに私も質問・・・
Graphics::TBitmap *bitmap = new Graphics::TBitmap();
bitmap->SetSize(SpeedButton1->Width, SpeedButton1->Height);
bitmap->Canvas->Brush->Color = clRed;
bitmap->Canvas->FillRect(TRect(0, 0, bitmap->Width, bitmap->Height));
SpeedButton1->Glyph = bitmap;
こんな感じでやって見ましたがボタンの色が何一つ変わりません。
どなたか教えてくらさい・・・
0587586
2008/03/28(金) 17:30:13向こうで質問しようと思います。
スレ汚しスンマセン・・・
0588デフォルトの名無しさん
2008/03/28(金) 17:45:40> ビットマップで左下に位置するピクセルはすべて透過になります。
0589デフォルトの名無しさん
2008/03/28(金) 18:51:04いやwwwwwwwwwww>>584ですたよ
5からまんま移植してやってたんだけどね
つかSpeedButtonなら予め用意したビットマップを設計時にあれするとかじゃだめなの?
0590デフォルトの名無しさん
2008/03/28(金) 19:24:27ありがとうございます。
おかげさまで実現できました。
>>589
把握シマスタw
ビットマップは、ボタンのサイズより少し小さく色づけしたいので、今の方法にしようと思います。
0591デフォルトの名無しさん
2008/03/28(金) 23:00:00プロセス間通信についてですが、
WM_COPYDATA と
tp://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=628
共有メモリ
tp://ww4.tiki.ne.jp/~yonyon/programing/bcb/tips/tips-api.htm
を拝見して、動作確認できました。管理者に感謝
前者はウィンドウハンドル、後者は任意のユニークなID
1.使い勝手としては後者が使いやすいのでしょうか?
2.また、前者は受け取り側フォームひとつにつきひとつなのでしょうか?
ところで、複数のデータcharとintが4つくらい送りたい場合、
3.やはり、送信側・受信側も4つのID(後者)が必要なのでしょうか?
ひとつのIDでは複数遅れないのでしょうか?
4.また、それが一般的なのでしょうか?
ちょっと世間一般の意見をお伺いしたくて。よろしくお願いいたします。
0592デフォルトの名無しさん
2008/03/28(金) 23:00:520593デフォルトの名無しさん
2008/03/29(土) 07:33:51共有メモリと言うと普通は[ファイル マッピング]を使う [名前付き共有メモリ]だと思う。
これなら読み書き出来るメモリを共有する事になる。
2番目はアトム(GlobalAddAtom) グローバルアトムなら確かにプロセス間で渡せるけど
これはメモリ共有というイメージではない。
構造体を送りたいという場合、
アトムで送る場合は、構造体をシリアライズ=文字列化して送ればいい
WM_COPYDATAで送るなら構造体のポインタを送ればいい。
文字列を含む場合は、その構造体にインスタンスが完全に含まれるようにする。
ポインタや参照を含む形では駄目。
WM_COPYDATAは1対1の通信に便利だけど1対1でしか使えない。
グローバルアトムを使う場合も、相手の窓ハンドルを使う限りは1対1になる
ファイルマッピングなら、複数で通信出来る。
他にwindowsにはメールスロットというのがある。CreateMailslot して後はファイルと同じようにするだけ
これは同じPC上のプロセスだけではなく別のパソコンにでも送れる。
0594デフォルトの名無しさん
2008/03/29(土) 07:55:272番目は HWND_BROADCAST で全部の窓アプリにメッセージを送ってるから
1対多通信が出来るんだね。
0595デフォルトの名無しさん
2008/03/29(土) 10:31:02受信側が実装しやすいものを精査して
組み込んでみます。感謝。
MyTipsとして残しておきます。
0596デフォルトの名無しさん
2008/03/29(土) 11:10:520597デフォルトの名無しさん
2008/03/31(月) 10:25:49落ち着けw
0598デフォルトの名無しさん
2008/03/31(月) 13:44:410599デフォルトの名無しさん
2008/03/31(月) 14:18:35そのうちSQLQuery->OpenやSQLQuery->ExecSQLでEAccessViolationが出るのですが・・・
これを使う際に何か気をつける点はありますか?
Builder2007です
0600599
2008/03/31(月) 16:13:48updateやinsertならなんぼやっても大丈夫なんですがselectを1回でもするとダメですね。
やっていることは・・・
SQLQuery->SQL->Clear( );
SQLQuery->SQL->Add( "select * from testtable" );
SQLQuery->Open( );
if( !SQLQuery->Eof ){
val = SQLQuery->FieldByName( "VAL" )->AsInteger;
}
なんですが、突っ込むところはありますか?
0601デフォルトの名無しさん
2008/03/31(月) 16:17:52調べなさい。
0602599
2008/03/31(月) 16:40:48知らないならレスするなクズが
0603599
2008/03/31(月) 17:53:23今までの検証結果でわかったことは・・・
1.select文だけ
2.update又はinsert文だけ
1,2は各々なら共に何回やってもOKで
updateやinsertをやってから1回でもselectを行うとエラーになります。
このエラーはソフト終了時にコードガードが
リソースリーク: メモリブロック (0x14DB5B0) が解放されていません。
メモリブロック(0x014DB5B0) [長さ: 64 バイト] は SysGetMem
によって確保されました。
と出るのですが・・・
0604デフォルトの名無しさん
2008/03/31(月) 19:05:48結果的に自分のプログラムが原因じゃなかった。
よく分からないけどUpdateを当ててからか?なんかそれからおかしくなってたのかも。
解決するか分からないけど30万円で情報を提供してやるw
0605599
2008/03/31(月) 19:22:33確かに自分のソースはどう考えてもおかしくないですねこれ。
やってることは単純だし、どちらか片方コメントにしたら全く落ちないし
とりあえず、定期的にinsertを行ってる状態でselectするために
SQLQuery->Open( )でこける(何事もなかったかのように素通りしソフト終了時にエラー)
これをSQLTableにかえてみたんだけどやっぱりエラー(´・ω・`)
0606デフォルトの名無しさん
2008/03/31(月) 20:26:04なんでだろうと、プロジェクトを調べ回ったあげく、とりあえず俺は以下のでリソースリークも半フリーズも直った。
プロジェクトソースの
SetApplicationMainFormOnTaskBar(Application, true);
をコメントアウトしてみて
0607599
2008/03/31(月) 20:29:00コメントにしてもかわりませんでした><
0608デフォルトの名無しさん
2008/03/31(月) 20:31:36まぁ頑張ってくれw
0609599
2008/04/01(火) 10:47:52なんですかこれ?Builder2007のバグですか?
0610デフォルトの名無しさん
2008/04/01(火) 11:12:100611599
2008/04/01(火) 12:20:24馬鹿はレスしないで下さい。うざいです。半年ROMってろクズ
0612599
2008/04/01(火) 14:20:34とりあえず解決しますた
try〜catchは謎だけどSQLQueryはExecuteSQLがあれですた
これ引数省略できるんだけど省略するとコードガードエラーになります(デフォfalse)
問い合わせがパラメータをまったく含まないあれなんでtrueでずっとfkさおf
0613デフォルトの名無しさん
2008/04/01(火) 18:21:480614599
2008/04/01(火) 18:38:24馬鹿はレスしないで下さい。うざいです。半年ROMってろクズ
0615デフォルトの名無しさん
2008/04/02(水) 00:29:40時々オーエスごとフリーズする。
一分後動作しやがる
0616デフォルトの名無しさん
2008/04/02(水) 05:14:43それ以前に、ちゃんとした日本語で的確な説明ができるように訓練しなさい。
0617デフォルトの名無しさん
2008/04/02(水) 07:07:14日頃の行いが悪いとそういうバグだらけのくそな製品をつかまされる。
builder2007に無駄金。
おめでとさん。
0618デフォルトの名無しさん
2008/04/02(水) 21:13:14delphiで下記のコードをBuilderに移したいのですがうまくいきません。
sw : IShellWindows;
Count : Integer;
途中省略
sw := CoShellWindows.Create;
Count := sw.Get_Count;
CoShellWindows* sw=new CoShellWindows();
Shdocvw::IShellWindows* is=sw->Create(NULL);
int Count=sw->Count;
とすると、コンパイラは通るのですが、3行目でEAccessViolationが発生します。
0619デフォルトの名無しさん
2008/04/02(水) 22:33:24んーん、実行F9で実行すると、
下のウインドウでぴこぴこっと
複数行出てきて、さぁ、実行だと言う矢先、
フリーズ。タスクバーのブラウザさえ表示できない。
まぁ、結構むちゃなソース実行しているからかもしれないが。
とりあえず、2007の新規プロジェクト立ち上げ、
いちから構築するつもり。bcb5のソースをそのまま使ったのが
いけないのか?
それに、開発しているPCでは動くのに、ゲストOSでも動くのに、
ノートPCに入れたら、動的可変フォームのTImageがうまく描画できない。
ラベルがいいのかなぁ。
はぁ。ま、どうでもいいか
0620デフォルトの名無しさん
2008/04/02(水) 22:47:08BCB6だとヘッダいじらないとコンパイルすらできないな。
で、コンパイルして実行した結果は問題なかったけど。
Get_Countでも出るの?
0621デフォルトの名無しさん
2008/04/02(水) 22:57:48TShellWindows *sw = new TShellWindows(NULL);
int Count= sw->Count;
でどうよ
0622618
2008/04/02(水) 23:10:54そうですかぁ。BCB6ではOKですか。
こちらの環境は、BDS2006です。
自分は、delphiは全然使ったことがないので
delphi のコードは試していないのですが、ぐぐると同様の霊がいっぱい出るので
delphiでは問題ないのだと思います。
ぐぐっても、Builderでの例が1件もないので、悩んでいます。
BCB6でいけるということは、たぶんちょっとした違いなんでしょうから
もう少し試行錯誤してみます。
0623デフォルトの名無しさん
2008/04/02(水) 23:12:20返してるんだけど、それを生ポインタで受けてる事だな。次の行では既にReleaseされてて無効になってる。
_di_IShellWindows is = ... とでもすればいいはず。
0624618
2008/04/02(水) 23:19:55>>623 その通りでした。
TShellWindows *sw = new TShellWindows(NULL);
あるいは
CoShellWindows* sw=new CoShellWindows();
_di_IShellWindows is=sw->Create(NULL);
とすれば、ちゃんと
Countを取得できました。
どうもありがとうございます。
0625デフォルトの名無しさん
2008/04/04(金) 17:12:27描画したいのですが、どういうやり方をしたらスムーズにスクロールできますか?
0626デフォルトの名無しさん
2008/04/04(金) 17:35:39もしくは、TFrameにTImageをはっておいて、
TFormにはってあるPanelの上に、
実行時にはる。
0627デフォルトの名無しさん
2008/04/04(金) 17:40:27ダブルバッファリング
0629デフォルトの名無しさん
2008/04/07(月) 10:26:52TRect r = PaintBox->BoundsRect;
Canvas->CopyRect( TRect(0, 0, r.right-2, r.bottom-1), Canvas, TRect(1, 0, r.right-1, r.bottom-1) );
0630デフォルトの名無しさん
2008/04/08(火) 18:25:46BoundsRect.Right = Left + Width
BoundsRect.Bottom = Top + Height
というのは大丈夫か?
PaintBoxのOnPaintでもFormのOnPaintでも、Canvasを直接参照すると
FormのCanvasになるというのは大丈夫か?
CopyModeも大丈夫か?
TBitmapに描画して、PaintBoxにコピーした方が良くないか?
PaintBoxは描画するエリアを用意するだけで、描画した内容を保存してくれるわけではないよ。
(PaintBox->OnPaintの中だけが全て)
0631デフォルトの名無しさん
2008/04/08(火) 18:28:26TBitmapからCanvasにアレするようにしました
0632デフォルトの名無しさん
2008/04/09(水) 15:08:52クリックされた時のイベントがほしいのですが記述の仕方がわからないので教えてください
0633デフォルトの名無しさん
2008/04/09(水) 15:27:480634デフォルトの名無しさん
2008/04/11(金) 16:02:33この背景を透過する方法を教えてください
0635デフォルトの名無しさん
2008/04/11(金) 23:16:390636デフォルトの名無しさん
2008/04/14(月) 12:18:45_findfirst、_findnextを使用し、ファイル一覧の取得方法はわかりました。
しかし、カレントディレクトリを開始位置としているようです。
指定フォルダを開始点としたいのですが、カレントディレクトリを変更するにはどうすればいいでしょうか?
0637デフォルトの名無しさん
2008/04/14(月) 12:48:18でも、"C:\\Windows\\*.*"みたいな文字列渡せば、別にどこからでも列挙できるよ?
0638デフォルトの名無しさん
2008/04/14(月) 12:55:39フルパスを渡すのが簡単
0639デフォルトの名無しさん
2008/04/14(月) 13:22:58なるほど、「*.*」と指定してたのが駄目だったみたいです
ありがとうございました
0640デフォルトの名無しさん
2008/04/14(月) 17:24:181万レコードくらい演算してるんですが、演算結果がてきとーに異なるんですよねorz
(今手元にデータがないので結果報告できないんですが、
調べる手段とか手法を今のうちに検討しておきたいんです)
0641デフォルトの名無しさん
2008/04/14(月) 17:51:170642640
2008/04/14(月) 17:53:02CodeGuardしたことありませんorz
0643640
2008/04/14(月) 18:09:04分厚い開発者にもCodeGurad について触れられてないような。。。
0644デフォルトの名無しさん
2008/04/14(月) 18:22:550645640
2008/04/14(月) 18:27:35memcmpでAccess overrun 出まくりなんですが、これ、マズイですか?
0646デフォルトの名無しさん
2008/04/14(月) 18:28:440647デフォルトの名無しさん
2008/04/14(月) 18:29:240648デフォルトの名無しさん
2008/04/14(月) 18:34:080649640
2008/04/14(月) 18:41:18なんていうか、こんな便利なものだったとは>CodeGurard
memcmpのAccess overrun でプログラムのメモリを破壊という道筋は思いつかないんですけど、そんな事あるんですか?
0650640
2008/04/14(月) 18:43:090651デフォルトの名無しさん
2008/04/14(月) 18:45:12それが最大のナゾだな。
0652デフォルトの名無しさん
2008/04/14(月) 18:46:090653デフォルトの名無しさん
2008/04/14(月) 18:48:34エリア外の参照なんて普通にAccessViolationじゃないか
0654640
2008/04/14(月) 18:48:47じゃ、そこ直せばって言われると思うんですが、
実データじゃないとバグ出ないんですよね。
開発マシンじゃ無バグ(現象出てないだけかorz)なんです。
件数多くなれば、memcmpがメモリを破壊する???
0655640
2008/04/14(月) 18:49:41あ、なるほど。
でも、読み出しだけなら無問題じゃないの???
0656640
2008/04/14(月) 18:51:33CodeGuardを使えるようになったのは大収穫でした。
有難うございましたorz
0657デフォルトの名無しさん
2008/04/14(月) 18:52:010658デフォルトの名無しさん
2008/04/14(月) 18:53:020659デフォルトの名無しさん
2008/04/14(月) 19:03:140660デフォルトの名無しさん
2008/04/14(月) 19:24:55m9(^Д^)プギャーーーッ
0661デフォルトの名無しさん
2008/04/15(火) 10:09:57よくウィザード画面てありますよね?
次とか戻るとかの、あれってあたかあも1つのフォームでやってるように見えるのですが
一般的にはどうやってるのでしょうか?
1.同サイズのフォームを用意して次を押されると次のフォームを表示して前のフォームを非表示に
2.PageControlで実行時にタブを非表示にして次を押されると次のタブに移動
これ以外に方法があったら教えてください
0662デフォルトの名無しさん
2008/04/15(火) 10:17:120663デフォルトの名無しさん
2008/04/15(火) 10:45:44すみません。どうやって埋め込むんですか?
0664デフォルトの名無しさん
2008/04/15(火) 11:13:48ボーダーをbsNoneにして
TForm2 *subform = new TForm2(this);
subform->Parent = Panel1; //埋め込みたい位置にパネルなりを配置しておく。
subform->Top = 0;
subform->Left = 0;
subform->Visible = true;
0665デフォルトの名無しさん
2008/04/15(火) 11:29:52なるほど。
んで次や戻るでフォームを動的にnewして埋め込むと
その場合は次に進んだ時には前フォームの情報は失われるので
自分でファイルなりに保存しておくんですよね?
0666デフォルトの名無しさん
2008/04/15(火) 19:47:09CreatePropertySheetPage()
ただし相当な修羅場を潜り抜けないと使いこなせない。
少なくともリソースについての理解が必要。
0667デフォルトの名無しさん
2008/04/15(火) 22:27:220668デフォルトの名無しさん
2008/04/15(火) 22:31:33VCLはやっぱり神。って思った。
0669デフォルトの名無しさん
2008/04/16(水) 10:48:37非標準ライブラリの使用がOKならば、JVCLのTJvWizardは?
0670デフォルトの名無しさん
2008/04/16(水) 18:04:29ご教授お願いします
0671デフォルトの名無しさん
2008/04/16(水) 18:21:39なにを聞いているのか意味わかんね。
0672デフォルトの名無しさん
2008/04/16(水) 18:23:280673デフォルトの名無しさん
2008/04/16(水) 18:27:11for (int i=0; i < 10; i++) {
AnsiString name = txtID + IntToStr(i);
// 名前からコントロールにアクセス
}
フォームに連番のついたテキストボックスがあるのですが
大量にあるためループで処理できれば、と考えています。
VB.NETのFindControlみたいなことがしたいのです。
0675デフォルトの名無しさん
2008/04/16(水) 18:45:400676デフォルトの名無しさん
2008/04/17(木) 20:46:56やっぱ、終わったときだけ?
■ このスレッドは過去ログ倉庫に格納されています