トップページ⇒tech
1001コメント292KB

C++Builder相談室 Part17

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/08(水) 02:01:27
C++Builderに関する質問・回答や議論等を行う相談室スレッド。

【前スレ】
C++Builder相談室 Part16
http://pc8.2ch.net/test/read.cgi/tech/1138766165/l50

過去スレ・関連サイトは>>2-7あたり。


※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/l50
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.10
http://pc8.2ch.net/test/read.cgi/tech/1162262669/l50
0247デフォルトの名無しさん2007/03/29(木) 12:30:34
>>244-245ありがとうございます。
手順の説明が足りませんでした。すみません。
BCB起動→新規作成→アプリケーション→あるコンポーネントをフォームに配置→実行→何もせず終了
で、終了時にEAccessViolationが投げられてしまうんです。
TButton, TEdit, TMemo等を配置しても、この例外は投げられませんでした。
0248デフォルトの名無しさん2007/03/29(木) 12:34:37
>>247
CodeGuardつけてみたら?
0249デフォルトの名無しさん2007/03/29(木) 19:06:35
>>248
逆にCodeGuardつけてるからだったりして。

BCB6で Update#4 入れるとCodeGuardがバグるらしいぞ。
0250デフォルトの名無しさん2007/03/29(木) 22:50:52
>>248-249ありがとうございます
CodeGuardを有効にしてみましたが、相変わらず終了時に例外が出るだけでした…
0251デフォルトの名無しさん2007/03/30(金) 10:45:48
TFormのキャプションの表示位置は常に中央ですが
これをTLabelのAlignmentのように位置を変更する方法を教えてください
0252デフォルトの名無しさん2007/03/31(土) 09:16:11
>251
> TFormのキャプションの表示位置は常に中央ですが
えっ?
0253デフォルトの名無しさん2007/04/01(日) 11:12:32
>>251
空白でも入れて調整しろ
0254デフォルトの名無しさん2007/04/01(日) 11:39:23
>251
それなんてWindows3.1?
0255デフォルトの名無しさん2007/04/02(月) 10:13:40
あ、ごめん251だけどTFormのCaptionってタイトルバーだった・・・

しっかしおまえらって糞の役にも立たないよな
0256デフォルトの名無しさん2007/04/02(月) 11:14:36
Borland C++ 5.01で作成されたアプリケーションの開発環境をBorland C++Builder 6の開発環境に移し変える簡単な方法ないですか?
0257デフォルトの名無しさん2007/04/02(月) 11:29:55
OWLを使っているの? だとすると BCBに変更しても特に便利にならないように思うが
0258デフォルトの名無しさん2007/04/02(月) 11:46:10
そうなんですか?OWL自体良くわかってないもので。。。(^^ゞ
でも、ユーザーの要求でBCB6でいくことが決まってしまいました。
とりあえずはBCB6でコンパイルできるようになればOKなんですが
何かプロジェクト変換ツールでもないでしょうか?
0259デフォルトの名無しさん2007/04/02(月) 11:49:57
ttp://202.33.253.145/qanda/cbuilder/c0005120.html
0260デフォルトの名無しさん2007/04/02(月) 11:58:41
ありがとうございます!
IDETOBPRでフォルダ検索しただけなんですが
見つかりませんでした。
これはBCB3でしか使えないんでしょうか?
BCB5 ProとBCB6 Proは持っているんですが。。。(^^ゞ
0261デフォルトの名無しさん2007/04/02(月) 19:51:56
Builder1でBuilder5にあるTMouseに相当するものを教えてください。
それか、現在のマウスカーソル位置を取得する方法を教えてください
0262デフォルトの名無しさん2007/04/02(月) 20:18:36
SetCapture してイベントで処理するか
GetCursorPosで得たスクリーン座標から変換するか
0263デフォルトの名無しさん2007/04/02(月) 20:45:03
なぜにBuilder1
0264デフォルトの名無しさん2007/04/02(月) 21:07:15
Win3.1の案件とか‥‥
0265デフォルトの名無しさん2007/04/02(月) 21:18:47
>264
Builder1はWin32アプリ専用ですよ。
実質、Del2=BCB1
0266デフォルトの名無しさん2007/04/02(月) 22:48:15
>255
てめーにいわれたくないって。
0267デフォルトの名無しさん2007/04/03(火) 07:49:28
ここは楽しいスッドレですね
0268デフォルトの名無しさん2007/04/03(火) 11:03:56
doubleとfloatの有効桁数はどう?
0269デフォルトの名無しさん2007/04/03(火) 18:42:47
>>268
日本語でOK
0270デフォルトの名無しさん2007/04/03(火) 19:23:40
>>268
いい感じですよ
0271デフォルトの名無しさん2007/04/04(水) 10:07:30
>>268
果物に例えると西瓜とメロンかな
0272デフォルトの名無しさん2007/04/05(木) 10:36:52
delete this;ってやっても問題はないですか?
0273デフォルトの名無しさん2007/04/05(木) 11:05:25
動くかもしれないけど、
何かやヴぁくね?
0274デフォルトの名無しさん2007/04/05(木) 12:14:48
TObjectのFree(Destroy)がそんな感じなんじゃないの?
0275デフォルトの名無しさん2007/04/05(木) 12:17:12
問題が無いように設計してあれば大丈夫
その後のメソッドで インスタンスにアクセスしたり
デストラクタでそのメソッドにアクセスしたり

あるいは、そのインスタンスが消滅したのに、それを示すポインタが空になったのをそのまま
にして再度アクセスしたり
0276デフォルトの名無しさん2007/04/05(木) 13:44:14
272ですが、
ボタンが押されたらそのフォームを閉じるのですが
その時にClose()を使わずにdelete thisをしています。
勿論フォームはnewで作成されているものです。

特にこれで問題がある動作はしていないのですが
自分自身を破棄するのでちょっと聞いてみました。
0277デフォルトの名無しさん2007/04/05(木) 14:06:17
動作はしてもコーディング的に変だろう。

閉じた直後とかに、そのフォームの値参照とか問い合わせできないお。
0278デフォルトの名無しさん2007/04/05(木) 15:39:42
>>277
そのフォームは他のフォームから作成されるだけで
参照されることはないんですよ

ってどっちみち、自分をdeleteするって事事態普通はやらないもんですかね。
OnCloseのAction = caFreeはまた違う事やってるのかなあ
0279デフォルトの名無しさん2007/04/05(木) 16:01:00
>そのフォームは他のフォームから作成されるだけで参照されることはないんですよ
  ↑
ここ注目するところ。


ソフトウェアってのは、自由にどんどん書きかえれるものであって、
今参照されてなくても将来参照されたとき、ドカンとエラー、
何だ変なコーディングしたやつ出て来い、みたいな。

0280デフォルトの名無しさん2007/04/05(木) 16:18:39
>>279
まあ、その不安はあるんですけどね。
ちなみに、他フォームから参照される恐れがあるなら普通にClose使いますが

ようするに僕が知りたかったことは自分自身をdeleteしても問題がないのかどうかってことで・・・
勿論破棄後に他から呼ばれるとかそういうのを抜きにしてですが
ふと思った疑問を実際にやってみてちゃんと動作してるので聞いてみたんですよ
0281デフォルトの名無しさん2007/04/05(木) 18:04:03
ハッ!参照してる値が消えてる。アッー
そこで、アクセサー(アクセス関数)でSETでキッチリ保存、GETで利用ですよ。
使う関数?memcpy(+memset)、strcpy、sprintf、sscanf、用途によりけりなんでもござれ。
えっ?リテラル変えようとしてエラーでる?
char a="";
strcpy(a,〜);
・・・・・・、そこで
char b='';
char* a=&b;
strcpy(a,〜);
ですよ。
0282デフォルトの名無しさん2007/04/06(金) 17:45:58
Turbo C++でプログラムを作成したのですが
コンパイルしたのと別のマシンで動かそうとしたら
「CC3270MT.DLL が見つからなかったため、このアプリケーションを開始できませんでした。
 アプリケーションをインストールし直すとこの問題は解決される場合があります。 」
とエラーが出ました

これを、開発環境以外のマシンで出ないようにコンパイルするにはどうしたらいいですか?
0283デフォルトの名無しさん2007/04/06(金) 20:39:46
STL の set を使ってるんですが、データがユニークになりません。バグですかね。
0284デフォルトの名無しさん2007/04/06(金) 21:18:34
>>283
明らかなバグです。
あなたのプログラムのね。
0285デフォルトの名無しさん2007/04/07(土) 00:51:35
それはない
0286デフォルトの名無しさん2007/04/07(土) 13:45:21
ごみ箱の中身をプログラムから開きたいんだけど方法おしえてくれませんか?
0287デフォルトの名無しさん2007/04/07(土) 15:41:32
>>280
delete thisのあとにメンバ変数いじったり非staticなメンバ関数呼ばなければOK。
delete thisはCOMのIUnknown::Release()の実装とかで普通に使うし。
0288デフォルトの名無しさん2007/04/08(日) 01:12:05
全く初歩的なことがらですが,Form1 と Form2 で StringGrid または List の
データを共有する方法が分りません。やりたいことはと言えば Form1 で
ファイルのデータを StringGrid または List に取り込んで Form2 で参照し
たいのです。どなたか教えてくだされば幸甚です。
0289デフォルトの名無しさん2007/04/08(日) 02:49:41
>>288
つ[超初心者スレ]
0290デフォルトの名無しさん2007/04/08(日) 04:55:39
>288
Form1->StringGrid
こういうこと?
0291デフォルトの名無しさん2007/04/08(日) 08:51:17
>289
恥かしながらその通りです。Focal, Algol の時代からプログラミングを
やりながら,永く C++4.5 を使っていて,C++Builder は去年始めました。

>290
そう思いました。Form1 に対応するヘッダーの中の
TStringGrid *StringGrid1;
を __published: から public: に移して,Form2 に対応する Unit2.cpp で
仰せのように Form1->StringGrid1 としてみたのですが,上手くゆきません。
他に何かすることが必要でしょうか。(PageControl を使ったプログラムを
改造しようと思った所以ですが,原因は別のところにあるのかも知れません。)
0292デフォルトの名無しさん2007/04/08(日) 09:15:26
うまくゆかないというのは、どうなるという事なの?
アクセス出来ないはずはないのだが?

>__published: から public: に移して
これをやると、実行時型情報の自動記録が出来なくなると思うのだが
なんの為にコレをやったのか?

まあ、表示のインターフェースを、そのままデータの共有に使う設計はどうかと思うけどな
楽だからお試しではよくやるけど、
0293デフォルトの名無しさん2007/04/08(日) 09:57:36
292
有難う御座います。__published: から public: への移動は,どこかの
ホームページの例を単純に真似ました。少し考えてから再度お尋ねしたいと
思います。
0294デフォルトの名無しさん2007/04/08(日) 10:38:42
別クラスでデータ部分だけ扱ってForm1、2ともにそのデータを表示するだけって設計にしないか?普通。
0295デフォルトの名無しさん2007/04/08(日) 11:34:47
ははあ、
publicに移して、 TStringGrid *StringGrid1 が DFMによる自動作成の
対象から外れたのに自前でnewしなかったというオチのような
0296デフォルトの名無しさん2007/04/08(日) 12:12:36
Form2の方でForm1のヘッダを呼んでないとか
0297デフォルトの名無しさん2007/04/08(日) 12:34:00
Form1-> って書いたら勝手にincludeされるような
0298デフォルトの名無しさん2007/04/08(日) 13:22:33
>>297
されない
0299デフォルトの名無しさん2007/04/08(日) 18:05:09
288 & 291 & 293 の者です。
報告遅れましたが,その間に 294-298 の諸兄にもあれこれお考え頂いて恐縮に
存じます。
結論から申しますと,改造作業の出発点に戻って最初からやり直したら,何ら
特別のことをせずに,Form1 の StringGrid が Form2 で問題なく参照できま
した。(初回に上手く行かなかった原因を調べるのは,面倒になって途中で止め
ました。)
皆様を煩わせて申訳なく思います。また宜しくお願いします。
0300デフォルトの名無しさん2007/04/10(火) 20:01:07
フォームをリサイズ不可にする方法ってどうすればいいですか?
よろしくです。
0301デフォルトの名無しさん2007/04/10(火) 20:06:20
>300
ぼーだーすたいるだぼけ
0302デフォルトの名無しさん2007/04/11(水) 02:44:47
>>300
あとボーダーアイコンのbiMaximize(最大化ボタン)の無効化忘れずに。
0303デフォルトの名無しさん2007/04/11(水) 18:01:43
C++Builder5でMySQLを扱う方法とかを書いてるサイトを教えてください
0304デフォルトの名無しさん2007/04/11(水) 18:04:45
>>303
RDBMSをFirebirdに変えるのはダメ?
0305デフォルトの名無しさん2007/04/11(水) 18:17:58
>>304
すみません。それよくわからないですが、それで普通にMySQLを扱うことができますか?
またC++Builder6では、標準で実装されているのでしょうか?
0306デフォルトの名無しさん2007/04/11(水) 18:50:06
>>305
0307デフォルトの名無しさん2007/04/11(水) 18:51:40
>>305
『Firebirdに変える』っつうのは、MySQLの代わりにFirebirdにするって事だよ。
0308デフォルトの名無しさん2007/04/11(水) 19:03:35
>>303
BDEからMySQLのODBCドライバへのアクセスにすれば、
どのDBも一緒だお。
ちゃんと動くお。










バイナリが途中でちょん切られるくらいで。
0309デフォルトの名無しさん2007/04/11(水) 19:14:58
>>307
ああ、すんません。素で勘違いしてました。
>>308
ODBCにMySQLを登録するといいんですよね?
一応MySQLをインスコしたのですが、ユーザーDNSで追加ししようとしてもでてこないのですが・・・
0310デフォルトの名無しさん2007/04/11(水) 19:46:06
ちなみにFirebird ≒ オプソ版Interbase6
0311デフォルトの名無しさん2007/04/12(木) 09:33:36
>>309
MySQLのODBCドライバは別途インスコでつよ。
0312デフォルトの名無しさん2007/04/12(木) 09:35:29
ググレばすぐあるじゃん ttp://www.tryhp.net/ODBCMySQL.htm
03133032007/04/12(木) 19:16:24
お返事遅れました

>>310
そうだったんですね
>>311-312
ありがとうございます。
ODBCに登録できました!


が、しかし・・エラーがでる・・・
ODBCドライバのバージョンは3.51でMySQLは4.1なのですが
ユーザーDNSを作成してTestボタンを押すと
Request returned with SQL_ERRORが出ます。
それで、データベースエクスプローラでも開く事ができません。
ODBCドライバのバージョンを5でMySQLも5にするとエラーはでません
というか、Testボタンがないのですが、データベースエクスプローラでも開く事ができるのですが
TQuery等で項目の作成が
03143032007/04/12(木) 19:28:59
あ、途切れたので、つづきですが

MySQL5ではデータベースエクスプローラで開く事はできるのですが
テーブル作成等の操作を行うと全てキー違反とエラーがでるのですが
何が原因でしょうか・・・
0315デフォルトの名無しさん2007/04/13(金) 08:48:33
303は、Firebird+ODBCドライバ/BDEに乗り換えた方が良いと思う。
その方が超簡単。

Firebird/IBXという手もあるが、ちょっとクセあるからツマヅク人には薦められない。
0316デフォルトの名無しさん2007/04/13(金) 08:49:28
なんでかっていうと、Firebirdは完全無料で、ばかちょん。
03173032007/04/13(金) 10:33:27
ぅぅFirebirdってよさげですね・・・
しかしMySQLを使わないといけないんですよ・・・

うーん、MySQLの4も5もODBCドライバの3も5もためしたけど、Testすると必ず
Request returned with SQL_ERRORが出る・・・
まだCBuilderに到達する前の段階なのですれ違いかもしれないですが・・・
0318デフォルトの名無しさん2007/04/13(金) 10:39:14
まぁ、環境設定して、Databaseコンポが繋がりさえすれば、
後はQuery一本でいけるお。

色んなコンポがあるけど、一番確実なのはRDBへのアクセスはDatabase/Queryコンポのみ使うやり方。
03193032007/04/13(金) 10:54:10
ODBCでの接続テストの段階でエラーで接続できないんですよ・・・
ちなみに、MySQLを起動してデータベースやテーブルは正常に作成はできてます
0320デフォルトの名無しさん2007/04/13(金) 11:18:15
>ユーザーDNSを作成してTestボタンを押すと
>Request returned with SQL_ERRORが出ます。

これって、WindowsのODBC Administratorで出るの?
それともBCBのDB Explorerで出るの?

どちらで出るかで何が間違ってるか決まるじゃん。
03213032007/04/13(金) 11:45:14
>>320
WindowsのODBC Administratorです。
サーバーはlocalhostを指定しています。
0322デフォルトの名無しさん2007/04/13(金) 11:46:40
>WindowsのODBC Administratorです。

なら、MySQLとODBCで、ググリまくれよ。

それか、MySQLスレに移動するか。DB板は過疎だからイマイチだけど。
03233032007/04/13(金) 11:57:52
当然ぐぐりまくってますよ・・・
03243032007/04/13(金) 13:58:51
できた・・・
これバージョンによってアレなのね・・・
03253032007/04/13(金) 15:30:04
エクスプローラの右クリメニューをプログラムで作る方法を教えてください
0326デフォルトの名無しさん2007/04/14(土) 05:18:25
久々にカキ
あ〜、BuilderなりTurboの未来はどうなるんだろ
徐々に、徐々に、肩身が狭い

>>325
ポップアップて言うんじゃね?
逆にメニューの作り方教えてくれ
めんどいならいいけど・・
0327デフォルトの名無しさん2007/04/14(土) 10:19:46
シェルエクステンション? COMだからDelphiの方が楽かも
0328デフォルトの名無しさん2007/04/14(土) 15:15:46
>326
主に人的リソースの問題で先にDelphiとなっただけで、次はBDSってことなので。
C++は標準準拠とかSTLとかTR1とかDelphiでは考慮の必要のないものが
いろいろあるからなぁ。
0329デフォルトの名無しさん2007/04/17(火) 18:35:21
C99は使えますか?
0330デフォルトの名無しさん2007/04/17(火) 19:35:52
つかえない
0331デフォルトの名無しさん2007/04/19(木) 10:00:19
フォルダ\hogeを別ウィンドウで開くにはどのようにすればいいでしょうか?
0332デフォルトの名無しさん2007/04/19(木) 13:57:45
>>331
ShellExecute
0333デフォルトの名無しさん2007/04/20(金) 08:11:52
ありがとうございます
普通に開くことはできるのですが。通常コンテキストメニューで別ウィンドウで開くを実行したときの挙動を求めています
開いた後、ツリー表示にすると最上層のフォルダを指定したフォルダになるように
普通に開いてしまうとツリーの最上層がデスクトップになってしまうので
できれば最初からツリー表示した状態で開きたいのですが
色々引数変えてみたりしてるのですが、うまくいきません
0334デフォルトの名無しさん2007/04/20(金) 08:19:55
後半部分は自己解決
第2引数を"explore"にすることでツリー表示で開けました
あとはこのツリーの最上層の指定の仕方なんですが
0335デフォルトの名無しさん2007/04/20(金) 08:20:01
explorer.exe /e,/root, "C:\hoge"
みたいな?
0336デフォルトの名無しさん2007/04/20(金) 09:08:35
ありあとうございます、コマンドラインからは
explorer /e ,/root, C:\hoge
これでできるんだけど、ShellExecuteへの引数としての渡し方がうまくいきません・・・
0337デフォルトの名無しさん2007/04/20(金) 09:16:27
どうやってうまくゆかないのか、書かないと エスパーじゃないんだからさ
0338デフォルトの名無しさん2007/04/20(金) 09:29:44
普通にできるじゃないか
::ShellExecute(Handle, "open", "explorer.exe", "/e ,/root, C:\\WINNT", NULL, SW_SHOW);

0339デフォルトの名無しさん2007/04/20(金) 09:33:11
あら、申し訳ないです
初歩的ミスで¥のエスケープ忘れでした・・・
エラーでないでデスクトップをルートに開いちゃうもので気づきませんでした恥ずかしい
皆さんありがとうございました
0340デフォルトの名無しさん2007/04/20(金) 09:48:21
たぶん、今度は最上層から上が見えなくなったと言い出すんだろな
0341デフォルトの名無しさん2007/04/21(土) 21:51:41
フォームのことでお聞きしたいのですが、
WINAPIのCreateWindowExを使って、
フォームに別フォームを埋め込むようなことは可能でしょうか?
具体的にはスレッドでフォームを表示し続けて、メッセージを送った時に
特定のイベントを発生させるような使い方をしたいのです。
0342デフォルトの名無しさん2007/04/21(土) 22:03:35
メッセージを送るなら、そのメッセージが処理されるスレッドはメインスレッドだから
VCLフォームで良いと思うが?
0343デフォルトの名無しさん2007/04/21(土) 22:09:37
いや表示は直接スレッドで書き換えたいのか
まあ、APIで子窓を付けるのは可能だけど
VCLでパネル貼り付けてその窓ハンドルにAPIで直接描画したら同じだと思うが
0344デフォルトの名無しさん2007/04/21(土) 22:51:04
342>>
単品で使用するならそれでも問題ないのですが、
APIで作成したフォームに、Video For Windowsで動画を表示したいのです。
メインスレッドで実行してしまうと、他の処理ができなくなってしまいますので
今回はその方式は見送ろうと思っています。

343>>
パネルはそのような使い方ができるのですね。
パネルってスレッド内部でアクセスしても大丈夫でしょうか?
早速試してみますね。


お二方(同じ方?)アドバイスありがとうございます。
0345デフォルトの名無しさん2007/04/22(日) 00:17:04
動画再生のデコード/表示処理はOS側が勝手に別スレッドでやってくれるはずだから動画のコントロール自体はメインスレッドでやって問題ないはず。
リアルタイムで動画データ生成してるなら変わるだろうけど。
0346デフォルトの名無しさん2007/04/22(日) 12:45:02
2006のエディタの補完の反応が遅いような気がするんですけど。
長いあいだそういうものだと思ってたんですが、Turbo C++の只版を古いマシンに
入れてみたらそっちの方が補完が早くて。
何か設定がまずいのでしょうか。
0347デフォルトの名無しさん2007/04/22(日) 13:49:33
BDS2006でサイプレスのCyAPI使っている人います?EZ-USB FX2で使っているのですが・・・・・
BCB6だと動いていたんですけど、2006では
CCyUSBDevice *usbdevice = new CCyUSBDevice(Handle);
でaccess violationを吐いて動かなくなってしまいました。

なにかヒントを下さいませ。。
■ このスレッドは過去ログ倉庫に格納されています