くだすれC++Builder(超初心者用)その5

■ このスレッドは過去ログ倉庫に格納されています
2012/04/21(土) 13:26:14.76
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
C++Builder使いが優しくコメントを返しますが、
お礼はC++Builderの布教と初心者の救済をお願いします。

■C++Builder XE2 - エンバカデロ・テクノロジーズ
http://www.embarcadero.com/jp/products/cbuilder


<過去スレ>
くだすれC++Builder(超初心者用)その4
http://toro.2ch.net/test/read.cgi/tech/1256256376/
くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/
くだすれC++Builder(超初心者用)その2
http://pc10.2ch.net/test/read.cgi/tech/1144308804/
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/

<兄弟スレ>
くだすれDelphi(超初心者用)その54
http://toro.2ch.net/test/read.cgi/tech/1325028195/
2013/11/17(日) 15:59:10.36
32bitになってました。どうもありがとうございました。
2013/11/17(日) 16:18:23.61
>>565
それはMSのアプリに限っての話だろう。
32bitアプリはバージョン情報を含める事も含めない事もできる。
16bitアプリはバージョン情報を含める事ができない。
MSは自社アプリには必ずバージョン情報を含めるからバージョン情報が出ないなら16bitアプリっていう判断なんだと思う。
あとMSでなくても市販のアプリは基本的にバージョン情報含めているから同じ。
個人開発だと必ずしも含めているとは限らないからその判定法は成立しない。

と、そういうことなんだと思う。詳しくは知らないのだけど。
2013/11/18(月) 10:49:06.19
>>567 の素晴らしい考察に感動したっ!!
そして >>562 のあまりのお粗末さにも感動したっ!!

でさ、みんなちゃんとバージョン情報付けてる?
どうでも良いツールなんか手抜きしてバージョン情報付けなかったりするけど、
>>562に16bitあぷりでつか?って言われちゃうのか
2013/11/18(月) 10:53:04.82
初心者版で初心者かもしれない人に何いってんだか・・
2013/11/18(月) 10:53:10.93
XE2以降ではバージョン情報の設定機能はダメダメになってるよね
プラットフォーム別にバージョン情報を別に出来るって言うのは理解できるけど、
そのおかげで全ビルド構成で別々にバージョン情報が作られてしまう
「ビルド番号を自動更新」にすると、DebugとReleaseで別々のバージョン情報になってしまうという…

一体全体どういう連中が作ってるんだろうか
2013/11/18(月) 12:01:26.40
XE2を使っています。
プロジェクトマネージャのウインドウで、各ユニットのフォルダ構造が
表示されていますが、この中でユニットになっていないものがあります。
(+ボタンを押すと、開くようになっていない)

プロジェクトファイルで、DependentOnタグが付いていないユニットが
該当するようなのですが、このタグを直接プロジェクトファイルをいじらずに
付ける方法はございませんでしょうか。
2013/11/18(月) 12:23:21.74
そこまで分かってるんならプロジェクトファイル直接書替えればいいじゃん?
あとは一度プロジェクトからソースを削除してもう一度追加してみるか

はっきりとは分からんけど、ヘッダファイルのインクルードガードのマクロ名で
ユニットになっているかどうかを判定しているように思えた
2013/11/18(月) 12:54:15.00
>>572
ありがとうございます。
プロジェクトから削除〜追加でユニット化されました。

インクルードガードのマクロ名で判定しているのは確かだと思います。
そのため、#pragma onceが使う機会を持てません。
2013/11/18(月) 18:10:46.44
> 16bitアプリはバージョン情報を含める事ができない。

含める事ができないんじゃなくて、32bitWindowsからは「16bitアプリのバージョン情報」は読めない(バージョンタブが表示されない)ってだけかもしれないな。
2013/11/20(水) 08:54:28.16
最近、XE2でコンパイルすると
[ILINK32 警告] Warning: プロジェクト名.ilc 0x00010000 / 0x08000000
[ILINK32 警告] Warning: unknown heap name : 0x08000000 / 0x08000000
[ILINK32 警告] Warning: エラーが検出されました(LME286)
[ILINK32 警告] Warning: インクリメンタル リンクを実行できません -完全リンクを実行中...
[ILINK32 エラー] Error: リンクを実行できません。

とか表示されてしまうのだけど、何故?
576575
垢版 |
2013/11/20(水) 09:11:06.26
ちなみに、PCを再起動するとコンパイルできるようになる。
IDE自体の再起動ではダメ。
2013/11/20(水) 12:13:11.66
XPじゃないのか?
XE3SP1だったかSP2はそれで動かなくなってたな
2013/11/20(水) 13:09:50.04
>>577
Win7
2013/11/20(水) 15:42:32.95
LME286でぐぐるとなんかあるっぽいが
2013/11/20(水) 22:55:34.09
>>575
Avastとかのアンチウィルス常駐してるなら一時的に無効にしから起動して作業しないとダメだよ
Avastが疑わしいexeとか強制でフックしちゃうから異常動作連発する
581デフォルトの名無しさん
垢版 |
2013/11/29(金) 18:01:14.70
DriveComboBoxでデフォルトドライブの変更方法教えて
DriveやItemIndexを弄っても全然変わってくれない
2013/11/29(金) 18:46:03.82
>>581
Drive プロパティに代入するだけで変わるけど。
wchar_t 型だけど char 型で代入しようとしてない?
Enabled プロパティとか false になってない?
2013/11/29(金) 23:14:08.18
何かiOSアプリの開発ができるようになるらしいが
2013/11/30(土) 01:50:47.22
BCB6で、リッチエディットの上にマウスが乗った時のマウスカーソルを変更するのは
どうしたら良いんでしょうか 右向きの矢印が出ます
2013/11/30(土) 12:42:42.49
リッチエディットのCursorをオブジェクトインスペクタで変更しておけばいいんじゃ?
2013/11/30(土) 21:32:02.58
マウスカーソルの変更出来ました。ありがとうございました。
587デフォルトの名無しさん
垢版 |
2013/12/02(月) 17:27:08.37
TImageで質問
ストレッチがtrueで
Image1->Picture->LoadFromFileで画像を表示させて
Image1->Widthを変更して再度表示させても以前のサイズのままで
更に読み込むと指定した大きさになるんですがこれすぐ正常なサイズで表示するにはどうしたらいいんですか?
Image1->Picture=NULLにしてもすぐには変わってくれなかったです
2013/12/02(月) 20:23:23.70
>>587
Image1->Picture->Bitmap->Height = height;
Image1->Picture->Bitmap->Width = width;

がいるんじゃないかな。
589デフォルトの名無しさん
垢版 |
2013/12/03(火) 14:45:38.60
>>588
ありがとうy、やってみる。
590デフォルトの名無しさん
垢版 |
2013/12/03(火) 14:56:18.60
ダメでした(´・ω・`)
591デフォルトの名無しさん
垢版 |
2013/12/03(火) 18:12:27.49
できますた( ´∀`)
592デフォルトの名無しさん
垢版 |
2013/12/06(金) 13:37:24.07
TJPEGImageでjpgを早く読む方法教えて
何かVBとか画像データの検証をオフにしてロードしたら早くできるみたいなんで
これにそういうのあったら教えてほしいですです
2013/12/08(日) 14:49:43.62
Form1.cpp の中で
自分で作った関数や変数の宣言をするのと、

Form1.h の中のprivate: や public: の所で
自分で作った関数や変数の宣言をするのでは、

メモリ使用量やプログラムの大きさ等が何か変わってくるのでしょうか。
2013/12/08(日) 17:09:11.28
オブジェクト指向プログラミング勉強してこい
595デフォルトの名無しさん
垢版 |
2013/12/09(月) 09:23:14.60
>>593
ヘッダに書くと小さいコードだとインライン関数になるか
メモリー使用量やプログラムの大きさは大きくなるけど速度は速くなる傾向。

>>594
オブジェクト指向プログラミングはあまり関係ないような気がする。
スモールトークにもJavaにもC#にもヘッダーファイルの概念は無いから。
596594
垢版 |
2013/12/09(月) 10:32:01.94
>>593の前者は非メンバで後者はメンバ、という読みだが >>595
2013/12/09(月) 11:28:50.09
エスパー検定勉強してこい
598デフォルトの名無しさん
垢版 |
2013/12/09(月) 13:21:54.02
>>596
そういう意味か!!
てっきり、インライン関数かそうで無いかだと思ったよ。
すまん。
2013/12/09(月) 14:18:39.89
オブジェクト指向はメモリやプログラムの大きさの事を考えて設計する方法では無い
そもそもオブジェクト指向勉強してこいとか、質問の答えにさえなってない
600594
垢版 |
2013/12/09(月) 14:42:09.84
じゃ質問に答えてやれよ
2013/12/12(木) 13:51:00.24
スレッドのExecute()内で、StringGridを動的生成しようと
以下の様にしました。

TStringGrid *SG = new TStringGrid(this);

[BCC32 エラー] Get.cpp(103): E2285 'TStringGrid::TStringGrid(Get * const)' に一致するものが見つからない

エラーの意味が分からないのですが、
スレッド内で動的に生成してはいけないのでしょうか?
アドバイス頂けると助かります。
2013/12/12(木) 14:19:34.01
スレッドのクラス内でthisでいいの?
2013/12/12(木) 14:34:32.90
>>602

this はおまじないだと思っていました。
調べても良く分からないのですが、
空の StringGrid を作るには this の代わりに何を指定すれば良いのでしょうか?

作成したStringGridを貼り付けるGridFormを指定しましたが、
コンパイル時にエラーは出なくなりましたが実行時エラーが発生します。

TStringGrid *SG = new TStringGrid( GridForm );
2013/12/12(木) 15:18:04.94
Execute内でStringGridの動的生成って、ダメじゃないけど豪快だな
Synchronize()とか使ってメイン側で更新する必要があるので、あまり意味がないことが多々ある

スレッド側で必要なのはStringGridではなく文字列の配列だったり、
スレッド生成時にStringGridも生成すれば十分だったりしないかな?
605601
垢版 |
2013/12/12(木) 15:34:49.14
有り難うございます。

やっぱり余りやらない方法なんですね。
経緯を話しますと現時点では、スレッド内からSynchronize()を使って
StringGridのテーブルを更新しています。
このSynchronize()を使った更新処理が重くてなんとかならないかと考え試行錯誤しています。
Queue()を使った方法も試したのですがStringGridがたまにちらつくのでイマイチでした。
(DoubleBufferedはtrueにしてあります。)

次に、StringGridの更新はスレッド内からしか行わないので、
StringGridをスレッド内で生成すれば、StringGridの所有権がスレッドになり、
Synchronize()しなくて済むので、
早く(並列)なるのでは無いかと考えて今に至ります。

勘違いしている点やアドバイスがあればお願い致します。
2013/12/12(木) 16:06:26.75
TStringGrid(Get * const) 

なんだから、テキストファイルとかを渡すんだろ
2013/12/12(木) 16:34:01.69
更新処理が重いなら間引くべきだと思うよ
毎回更新する必要があるなら、それは並列化できない、つまりスレッド化の意味がない
608601
垢版 |
2013/12/12(木) 17:13:53.53
有り難うございます。

間引く方向で検討したいと思います。
有り難うございました。
2013/12/12(木) 17:48:46.90
スレ違いだけどこの仕様、C#でも受け継いでいて本当クソだと思うわ
ヘジたんこういう所はダメなのね
2013/12/12(木) 18:55:59.95
>>605
アプリケーション内で使うStringGridはそのひとつなんでしょ?
ただ更新はスレッド側からのみ、メインでやると重くなる、という理由ってことだよね?

重くなるというのが、更新処理中に他のメッセージを処理しなくなりGUIが応答しなくなることを言っているのだろうか?
それとも単純に更新処理に時間がかかるという意味だろうか。

前者でCPUバウンドな更新処理なら TStringGridには Cols プロパティ(TStrings*)や Rowsプロパティ(TStrings*)というのがあるので、
スレッドに TStringList を用意しておき必要な更新処理をすべてこのTStringList に対して行う。
TStringGrid への反映は Synchronize()で Cols プロパティや Rowsプロパティでスレッドの TStringList をAssign してあげればいいんじゃないだろうか。
極力 Synchronize() での処理はデータのコピーにとどめておけばいいと思う。

前者で演算よりもGUIの更新自体(例えば大量の Cells プロパティを更新するなど)が多いなら、
更新処理の合間に適度に TApplication::ProcessMessages を入れてあげればいいと思う。

後者で、単純に更新処理に時間がかかるというなら、更新処理を見直せとしか。

あとStringGridの所有権が誰だろうと、可視コンポーネントはWindowsメッセージによって(つまりメインスレッドで)制御されているのでSynchronize()しなくて済むということはないよ。
611デフォルトの名無しさん
垢版 |
2013/12/12(木) 19:09:59.46
Application->ExeName が化けてるんだけど
Win32のフォルダんとこが.\\.とかなってるし
これちゃんと取る方法おしえてくださ
C++BuilderXE4
2013/12/12(木) 20:07:55.27
C++11から本格的にマルチスレッドと同期サポートが入ったから、案外行けるかも
あ、VCLはObject Pascalで書かれてるんだっけorz

.NETも4.5からAsync入ったしうかうかしてると横取りされちゃうぞ
2013/12/16(月) 15:00:24.58
BCB6でデバッグの時にF12キー押したら出てくるCPUウインドウを出さないように出来ますか
2013/12/16(月) 15:24:03.19
CPUを外してください
そうすれば出なくなりますから
2013/12/17(火) 18:35:10.82
CPU外してもF12押したら出ました・・
嘘言うのはやめてくださいしんでください
2013/12/18(水) 02:12:28.70
>>615
可哀想に幻覚が見えるのか
精神科をすぐに受診してください
2013/12/18(水) 11:20:06.65
wmain だったら BCB6 では無理かも。
618デフォルトの名無しさん
垢版 |
2013/12/21(土) 15:16:38.70
BuilderXE4で実行時にPanelのColorを変更するとキャプションが消えるバグがあるのですが
これを回避する方法を教えてください
619デフォルトの名無しさん
垢版 |
2013/12/21(土) 15:28:12.77
できた

お前等ってほんと糞の役にも立たないゴミだな^^
620デフォルトの名無しさん
垢版 |
2014/01/09(木) 16:59:04.02
TPopupメニューをOwnerDrawする時に
表示されるメニューの幅と高さを任意に指定する方法をおしえて
2014/01/09(木) 22:03:01.66
OnMeasureItemでWidthとHeightを変更する
622デフォルトの名無しさん
垢版 |
2014/01/24(金) 11:57:52.15
C++Builder2010でSQLConfigDataSourceがリンカエラーになるんだけど
odbccp32.libを追加してるのに。
ちなみに、XPでは正常にリンクできたのにWin7だとリンカエラーになるのですが
Win7でもちゃんとリンクする方法を教えてくださ
623デフォルトの名無しさん
垢版 |
2014/01/31(金) 11:46:42.51
印刷するのにお勧めのコンポーネント教えて
2014/01/31(金) 15:43:16.58
FastReport
2014/02/01(土) 16:32:08.39
Delphi XE4 Professionalを持ってるんですが、
C++BuilderXE5 Starter
のアップグレード版は使えますか?
2014/02/01(土) 18:54:26.64
問題ありません。
2014/02/01(土) 18:57:33.18
あー、
> Delphi StarterとC++Builder Starterの両方を購入して1つのマシンにインストールして「Mini RAD Studio」のように使うことはできますか?
> いいえ、1つのコンピュータには、1つのStarterエディションしかインストールすることができません。

なので、VMでも何でもいいので別のWindowsがいるので注意してね。
2014/02/01(土) 18:59:06.09
いやもうデルファイ使わないんでC++さえ使えればいいですw
2014/02/01(土) 21:01:02.00
コンパイラはx86でC++11対応じゃないので、そこも気をつけて。
630デフォルトの名無しさん
垢版 |
2014/02/04(火) 11:46:48.55
>>624
FastReportどこのタブにありますか?
言い忘れてましたがC++Builder2010ですう
631デフォルトの名無しさん
垢版 |
2014/02/04(火) 11:51:13.48
EX4にはFastReportのタブあったけど
2010には無いから2010ではFastReport使えないっぽいですねこれ
QuickReportも無いっぽいしどうしたらいいのこれ
2014/02/04(火) 15:07:59.35
残念だけどRave Reports
633デフォルトの名無しさん
垢版 |
2014/02/04(火) 16:32:54.59
Rabeタブはありますが、Reportsがありませんえん
634デフォルトの名無しさん
垢版 |
2014/02/04(火) 16:33:28.11
Raveです、かみまみた
635デフォルトの名無しさん
垢版 |
2014/02/04(火) 16:37:20.60
あ、でも、RaveProjectで何か印刷のアレをビジュアルでできそうです
どうせ糞だろうけど頑張ってやってみますありがとうございました糞野郎共
2014/02/06(木) 16:46:38.48
SOAP通信できるコンポーネント教えて
2014/02/06(木) 16:56:59.54
TSoapConnectionを発見した!!XE4
んで、送受信はどうやってやるの?
638デフォルトの名無しさん
垢版 |
2014/02/10(月) 13:52:08.67
"44Op44O044Kn44Or44OK"みたいなUTF-8でアレされてるのを戻す方法を教えてください
C++BuilderXE4です。
2014/02/14(金) 14:01:54.52
>"44Op44O044Kn44Or44OK"みたいなUTF-8でアレ
よくわからん。日本g
640デフォルトの名無しさん
垢版 |
2014/02/20(木) 11:40:21.94
TOpenDialogでInitialDirを指定しても直前に開いたとこを開くんだけど
ちゃんと指定したフォルダを開く方法を教えてください
2014/02/20(木) 11:58:06.80
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+201211/12110018.txt
642デフォルトの名無しさん
垢版 |
2014/02/20(木) 15:39:58.88
>>641
サンクス、確かにOSはWin7でXPではちゃんといってたけど

しかし、C++BuilderXE4のバグなのかわからないんだけど
ExtractFileDir( Application->ExeName )で取得したexeのパスがバグってる
exe作るとWin32フォルダにdebugフォルダが作成されてそこで実行してるけど
取得したパスが必ずWin32フォルダの前に\.\が入ってる
これのせいでDialogのInitialDirやFileNameに指定してもうまくいかなかったんだけど
これちゃんとパスとる方法ありますかね?
2014/02/20(木) 15:47:14.24
正規化
644デフォルトの名無しさん
垢版 |
2014/02/20(木) 16:03:01.36
いや意味わかんないです
2014/02/20(木) 17:45:06.74
つ ExpandFileName
646デフォルトの名無しさん
垢版 |
2014/02/20(木) 19:12:22.42
>>645
ありがとう、感動した。
ExpandFileNameをかましてやったらちゃんとパスがアレしてくれました

しかし今までちゃんとできてたのに急に腐った仕様に変えないでほしいなあ園馬鹿ってやっぱ馬鹿なんだな
2014/02/20(木) 19:54:49.15
勝手に相対になっちゃうの?
648デフォルトの名無しさん
垢版 |
2014/02/21(金) 10:19:05.00
パスを見るとフルパスになってるんだけど
何故かWin32フォルダの前に必ず\.\が付加されてる。
ちなみに、Win32フォルダが無い別フォルダで実行するとちゃんとしたパスがゲットできてる
2014/02/21(金) 10:34:00.47
OSの仕様が絡んでいそうな・・・ よくわからんけど
2014/02/21(金) 15:19:09.05
設定ファイルか何かでそう書いてるだけじゃないの
今まで気づいてないだけとか
2014/02/21(金) 15:57:13.01
リンカのファイル出力先がそうなってるから、
デバッガに渡される実行ファイルのパスもそうなる

リンカの出力先指定:.\$(platform)\$(config)
2014/02/22(土) 02:07:21.82
プロジェクトオプションでC++(共有オプション)の中間出力と最終出力ディレクトリにある.\を削除すればOK
2014/02/22(土) 02:11:20.47
追記 参照ボタン押すとフルパスになるから文字列からダイレクトに削除してね
654デフォルトの名無しさん
垢版 |
2014/03/04(火) 10:32:24.33
>>651-653
それやっちゃうと違うPCやフォルダ変えてコンパイルする時はまたその設定が必要なのでは?
655デフォルトの名無しさん
垢版 |
2014/03/06(木) 11:19:51.13
XE4のTMediaPlayerで現在再生中かどうかを調べる方法を教えてください
2014/03/06(木) 12:08:12.17
Modeプロパティで分かるよ
2014/03/06(木) 14:07:45.92
ゴメン、Modeじゃ分からんかったわ
Notify = trueにして再生開始して、OnNotifyイベントで成功が通知されたら再生終了だ
現在再生中という情報を直接取ることは出来ないみたい
俺がやったのはOnNotifyでMode==Playingで処理結果が成功なら再生終了と判定したよ
658デフォルトの名無しさん
垢版 |
2014/03/06(木) 14:11:17.42
>>657
ありがとうございます。
OnNotifyは終了だけを検知したかったのでNotify=falseで使いたいんですが
自分で再生したのはわかるのでOnNotifyが来たら終了って判断できるのですが・・・
そういうのがあったらアレかなとおもって聞いてみましたがアレでしたね
2014/03/06(木) 14:29:56.39
ほんとアレっすよね
660デフォルトの名無しさん
垢版 |
2014/03/06(木) 15:11:36.52
言うほどアレでもなかったわ
661デフォルトの名無しさん
垢版 |
2014/03/06(木) 15:18:52.18
つーか、今改めて試してみたけど>>656でおkかも
Notify=falseならModeで再生中とそれ以外の区別がついてる感じ
662デフォルトの名無しさん
垢版 |
2014/03/06(木) 15:32:48.53
フォーム非表示の状態で作成されたフォームのListViewがクリアできない
一旦表示させないとListView->Items->Clear( )受け付けてくれないんだけど
これ非表示のままならどやってリストビュークリアしたらいいの??
2014/03/06(木) 15:42:40.54
Update() やってみるとか(適当・未確認)
664デフォルトの名無しさん
垢版 |
2014/03/06(木) 17:18:43.59
>>663
ダメでしたよ。
2014/03/07(金) 00:06:06.17
Handleを取得してみる
666デフォルトの名無しさん
垢版 |
2014/03/07(金) 10:22:10.84
>>665
それから?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況