トップページtech
985コメント281KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/10/23(金) 09:06:16
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
C++Builder使いが優しくコメントを返しますが、
お礼はC++Builderの布教と初心者の救済をお願いします。

Embarcadero Home Page
http://www.codegear.com/jp/

<過去スレ>
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50

くだすれC++Builder(超初心者用)その2
http://pc10.2ch.net/test/read.cgi/tech/1144308804/l50

くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/

<兄妹スレ>
くだすれDelphi(超初心者用)その50
http://pc12.2ch.net/test/read.cgi/tech/1246340765/l50
0764デフォルトの名無しさん2011/07/08(金) 11:24:12.75
>>763
人呼んでお邪魔虫ダイアログ
0765デフォルトの名無しさん2011/07/08(金) 15:21:38.22
TMyComboBox = class(TComboBox)
TComboBox = class(TMyComboBox)

みたいな感じで、継承してちょっとだけ弄ってそれを標準のコンポみたいに使ってる
Delphiのソースがあったのだけど、これってC++Builderでも可能?
区別が曖昧って怒られちゃう
0766デフォルトの名無しさん2011/07/08(金) 15:35:58.43
可能
0767デフォルトの名無しさん2011/07/08(金) 15:57:08.17
C++Builder 2009ってVS用のライブラリや
.NET Frameworkは問題無く使えますか?
0768デフォルトの名無しさん2011/07/08(金) 16:52:59.73
できないのか、残念
0769デフォルトの名無しさん2011/07/11(月) 15:49:37.12
HDDのフォーマット種別(NTFS/FAT32・・・)を調べる方法を教えて下さい。
Win7+BCB2010です。

DriveInfoというのを見つけたのですが使えなさそうです。
0770デフォルトの名無しさん2011/07/11(月) 16:04:57.35
>769
つ ttp://msdn.microsoft.com/ja-jp/library/cc429511.aspx
07717692011/07/11(月) 17:34:16.65
>>770

出来ました!!有り難うございます。
0772デフォルトの名無しさん2011/07/22(金) 17:30:25.07
「asin: DOMAIN error」っていうのをトラップしたいのですが、
catch (Exception &exception)では、catchできないのですか???
0773デフォルトの名無しさん2011/07/22(金) 21:29:11.88
Winキー+Dで全部のウィンドウ非表示(デスクトップ表示)ですが
この操作が行われた時ってトップレベルウィンドウに何かメッセージ
が送られているんでしょうか?
0774デフォルトの名無しさん2011/07/22(金) 22:46:03.43
>>772
int _matherr(struct _exception *e) {
throw Exception(AnsiString(e->name) + " でエラーだお");
}

とか _matherr を自分で定義するべし
0775デフォルトの名無しさん2011/07/25(月) 00:51:46.93
ttp://www2.ttcn.ne.jp/tkky/Application/Launcher/launcher1.htm
全くの初心者で↑のサイトを見ながらランチャを作ろうとしているのですが、

[BCC32 エラー] Unit1.cpp(18): E2316 '_fastcall TForm1::Create(TObject *)' は 'TForm1' のメンバではない
[BCC32 エラー] Unit1.cpp(33): E2316 '_fastcall TForm1::Save1Click(TObject *)' は 'TForm1' のメンバではない
[BCC32 エラー] Unit1.cpp(50): E2316 '_fastcall TForm1::Delete1Click(TObject *)' は 'TForm1' のメンバではない
[BCC32 エラー] Unit1.cpp(59): E2316 '_fastcall TForm1::Image1Click(TObject *)' は 'TForm1' のメンバではない

というエラーがでます。
なぜでしょうか?
0776デフォルトの名無しさん2011/07/25(月) 01:22:34.90
さーよくわかんないけど、フォームデザイナのオブジェクトインスペクタでそれぞれのイベントを
ダブルクリックして作ったらいいんじゃないかな。
07777722011/07/25(月) 08:51:46.03
つ d >>774
キャッチできないエラーって不便ですよねぇ。
07787722011/07/25(月) 13:10:32.01
ついでですが、何でキャッチできないんでしょう?
キャッチする方法あるのかなぁ?

matherr.cを見たけど、良く分からない(><)
0779デフォルトの名無しさん2011/07/25(月) 13:11:39.66
>>776
ありがとうございます!
できました
0780デフォルトの名無しさん2011/07/25(月) 13:22:52.77
>>778
http://msdn.microsoft.com/ja-jp/library/k3backsw.aspx
07817722011/07/25(月) 13:32:49.36
つ d >>780

つまり、キャッチしようにも、例外じゃなくて、Cランタイム系で動作が規定されている関数なのね。
0782デフォルトの名無しさん2011/07/25(月) 13:56:35.50
C++Builder XEで
ShellExecute(Application->Handle,
"open",
appname.c_str(),
NULL,
NULL,
SW_SHOW);

というコードで 'char const[5]' 型は 'const wchar_t *' 型に変換できない というエラーが出ます
これはUnicodeStringをAnsiStringに変換する事で直るのでしょうか?
もしそうならどう修正すればいいのでしょうか?
0783デフォルトの名無しさん2011/07/25(月) 14:12:24.62
"open"
->
L"open"
07847822011/07/25(月) 23:23:52.37
>>783
遅れました
すみませんまだエラーが出ます…
'char *' 型は 'const wchar_t *' 型に変換できない とエラー内容が多少変わったのですが…
0785デフォルトの名無しさん2011/07/26(火) 01:02:34.32
>>784
appname が AnsiString なら UnicodeString にする
07867822011/07/26(火) 01:16:13.41
>>785
ありがとうございます!
できました
0787デフォルトの名無しさん2011/07/26(火) 13:47:30.33
C++Builder2010でADOTableについて教えてください
既存のmdbファイルがあって指定テーブルのフィールドの説明を取得する方法を教えてください
ADOTableでダメならSQL文でも構いません
0788デフォルトの名無しさん2011/07/27(水) 01:22:03.91
>>787
ttp://support.microsoft.com/kb/210314
0789デフォルトの名無しさん2011/07/27(水) 09:43:06.09
>>788
ありがとう
これADOTableで表現するならどうやってやりますかね?
0790デフォルトの名無しさん2011/07/27(水) 10:44:49.98
RecordsetのProperties
0791デフォルトの名無しさん2011/07/27(水) 10:54:01.29
>>790
更にありがとうございます
しかしこれどうやって記述したらいいのかわかりません
0792デフォルトの名無しさん2011/07/27(水) 11:42:28.29
丸投げイクナイ
少しは自分で考えな
0793デフォルトの名無しさん2011/07/27(水) 11:57:43.94
うるせー。
だまって教えろ。ゴラァ
0794デフォルトの名無しさん2011/07/27(水) 12:38:03.73
スレタイ読めない奴はレスしないで下さい
0795デフォルトの名無しさん2011/07/27(水) 12:42:30.18
そして誰も居なくなるというループ
0796デフォルトの名無しさん2011/07/27(水) 12:47:03.76
もう、終わりにしようよ。
0797デフォルトの名無しさん2011/07/27(水) 13:33:29.25
もう〜終わりだね
0798デフォルトの名無しさん2011/07/27(水) 13:38:07.70
君が
0799デフォルトの名無しさん2011/07/27(水) 15:38:43.55
マジコード教えてくださいよろしくです
0800デフォルトの名無しさん2011/07/27(水) 16:19:22.92
小さく見える
0801デフォルトの名無しさん2011/07/27(水) 17:24:20.80
GetFieldDesc_ADO = MyTable.Columns(MyFieldName).Properties("Description")

これをどうやってADOTableの書式で表現するかわかりません
0802デフォルトの名無しさん2011/07/27(水) 20:56:29.33
>>801
まず、
1時間で正確に燃え尽きる蚊取り線香を3つ使って、1時間15分を計ってみてください。
0803デフォルトの名無しさん2011/07/28(木) 01:36:46.64
蚊取り線香ってなかなか着火しないから
火を同時に何ヶ所にもつけるのって難しいよね
0804デフォルトの名無しさん2011/07/28(木) 06:05:49.85
3人がかりだな
0805デフォルトの名無しさん2011/07/28(木) 23:45:07.35
>>801を教えてくださいよ
0806デフォルトの名無しさん2011/07/29(金) 00:59:27.92
ADOTable,ADODataSetにRecordset_といかうプロパティがあって、内部の
オブジェクト公開されてるからそれから、辿っていってみて。
0807デフォルトの名無しさん2011/07/29(金) 11:44:01.13
Builder2007でUTF-8にURLエンコードする方法を教えてください。
HTTPEncodeを使っても正常にUTF-8になってないみたいなので
0808デフォルトの名無しさん2011/07/29(金) 13:44:29.96
俺がアホだけかもしれないけど
UTF-8にURLエンコード
の意味が分からない
0809デフォルトの名無しさん2011/07/29(金) 20:12:08.80
アホはレスしないでください。
ウザいだけです。
0810デフォルトの名無しさん2011/07/30(土) 17:38:44.67
超初心者用なんだから分かるんなら説明してくれてもいいじゃん
0811デフォルトの名無しさん2011/08/01(月) 17:24:56.85
>>806
辿ってみましたがフィールドのコメントを取得するようなのを発見できませんでした。
ぶっちゃけコードを教えてください
08128012011/08/03(水) 20:43:32.92
まじでさっさと教えてください。
0813デフォルトの名無しさん2011/08/03(水) 21:07:55.33
______  ___________
         V
    _____
   /::::::::::::::::::::::::::\                  _
  /::::::::::::::::::::::::::::::::::::::\             /  ̄   ̄ \
  |:::::::::::::::::|_|_|_|_|           /、          ヽ はぁ?黙ってろデブw
  |;;;;;;;;;;ノ   \,, ,,/ ヽ          |・ |―-、       |
  |::( 6  ー─◎─◎ )          q -´ 二 ヽ      |
  |ノ  (∵∴ ( o o)∴)          ノ_ ー  |     |
/|   <  ∵   3 ∵>          \. ̄`  |      /
::::::\  ヽ        ノ\           O===== |
:::::::::::::\_____ノ:::::::::::\        /          |
0814デフォルトの名無しさん2011/08/04(木) 06:27:21.25
C++Builder2007で、Access2000形式のDBにアクセスしたいんですが、簡単に実現できるクラスライブラリありますでしょうか?
0815デフォルトの名無しさん2011/08/04(木) 09:48:01.54
dbGo(ADO)
0816デフォルトの名無しさん2011/08/04(木) 10:47:18.89
簡単すぎてうんこが漏れそうになった
0817デフォルトの名無しさん2011/08/08(月) 19:06:57.41
C++Builder5を使っています。

#include "ABCDEFGH.h" ←空のファイル
#include "ABCDEFGHI.h" ←存在しないファイル

上のようなCPPをコンパイルするとエラーもなく通るんですが、
これって基本先頭8文字しか確認していないってことでしょうか?
また、C++の仕様上では正しいのでしょうか?
0818デフォルトの名無しさん2011/08/08(月) 23:18:23.60
ファイルシステムのせい
仕様上問題ない
0819デフォルトの名無しさん2011/08/09(火) 12:28:32.91
>>818
8文字ってことでDOS形式のファイル名か何かが
絡んでいるだろうとは思っていましたが、仕様上
問題ないというのは驚きです。
となると、ヘッダーファイル名は先頭8文字をユニ
ークにしなければいけないんですね。
0820デフォルトの名無しさん2011/08/09(火) 14:01:34.81
仕様がMS-DOSも前提にしてるからさ
08218012011/08/11(木) 17:05:51.55
さっさと教えてくださいよ
0822デフォルトの名無しさん2011/08/11(木) 20:26:49.25
______  ___________
         V
    _____
   /::::::::::::::::::::::::::\                  _
  /::::::::::::::::::::::::::::::::::::::\             /  ̄   ̄ \
  |:::::::::::::::::|_|_|_|_|           /、          ヽ はぁ?黙ってろデブw
  |;;;;;;;;;;ノ   \,, ,,/ ヽ          |・ |―-、       |
  |::( 6  ー─◎─◎ )          q -´ 二 ヽ      |
  |ノ  (∵∴ ( o o)∴)          ノ_ ー  |     |
/|   <  ∵   3 ∵>          \. ̄`  |      /
::::::\  ヽ        ノ\           O===== |
:::::::::::::\_____ノ:::::::::::\        /          |
0823 忍法帖【Lv=16,xxxPT】 2011/08/14(日) 15:48:26.79
日本語版で開発したアプリケーションを英語版Windowsに持って行くと、エラーメッセージが日本語で表示されるのですが、
エラーを英語で表示するにはどうしたらいいのでしょうか?独島は日本の領土
0824デフォルトの名無しさん2011/08/16(火) 03:24:59.36
ヘルプの「国際化対応アプリケーションの作成」を読むといいよ
BCB5の場合だけど
08258012011/08/16(火) 16:26:08.12
とっとと教えてくださいよ
0826デフォルトの名無しさん2011/08/24(水) 15:20:16.08
BCB2010を使用しています。
pragmaでインクルードファイルのパスは指定できるのでしょうか?

0827デフォルトの名無しさん2011/08/24(水) 15:57:39.79
おそらくできない。
つ ttp://docwiki.embarcadero.com/RADStudio/ja/Pragma
0828デフォルトの名無しさん2011/08/24(水) 16:03:16.21
http://docwiki.embarcadero.com/RADStudio/ja/Pragma_option
#pragma option で使用できないオプションは以下のとおりです。
のところに
-Ifilename
0829デフォルトの名無しさん2011/08/24(水) 16:22:12.53
>>827,828

有り難うございます。
すっぱり諦めます。
0830デフォルトの名無しさん2011/08/27(土) 14:02:57.71
ビルダーで、計算した計算結果を
データ入力値や計算結果・図示などの
印刷を行いたいのですが、
ページは数ページから数十ページ程度の出力となりうるもので
ビルダーでするにはどのコンポーネントをつかう必要が
あるのでしょうか?
QuickReportを検索したのですが、
フリーであればよいのですが、
有償問わず教えてもらえたらと。
0831デフォルトの名無しさん2011/08/28(日) 00:13:46.14
csvファイルにしてOpenOfficeで読み込んじゃったり
0832デフォルトの名無しさん2011/08/28(日) 00:52:22.10
FastReportsかQuickReportsだろ
0833デフォルトの名無しさん2011/09/09(金) 16:50:07.99
いまさら、BCB5update1 つかってます。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString str1 = "test1";
AnsiString str2 = Caption;

AnsiString dummy1;
AnsiString dummy2;
AnsiString dummy3;
AnsiString dummy4;

#if 1
AnsiString tmp = (str1.Length() ? str1:Caption );//EAccessViolation
#else
AnsiString tmp = (str1.Length() ? str1:str2 );//OK
#endif
}

↑で、EAccessViolation が発生するのは、なぜなんだろ?
コンパイラが腐ってるという噂もありつつ...
0834デフォルトの名無しさん2011/09/09(金) 18:57:56.44
確かに、その辺のバージョンで、?:演算子で
?の右(どちらか)にデストラクタが必要なオブジェクトを置いたとき
変なコードを吐いたのを覚えてる。

危険と認識したので、俺的には
?の右に置くものは組み込み型のみで、かつ2つの型を統一にするようにしている。
0835デフォルトの名無しさん2011/09/09(金) 19:01:09.08
一応。
暗黙の型変換とデストラクタとで
どちらが原因でバグにぶつかるのか深く追求しなかったから、
両方を避けるようにしてる、ってこと。
特にコンストラクタを介する暗黙の型変換は確実にとぶだろうと。
0836デフォルトの名無しさん2011/09/10(土) 05:22:23.39
BCB6 でも再現するがな
さすがに XE2 では正しく動いた。テンポラリのオブジェクトを適切に破棄しておる

>コンパイラが腐ってるという噂もありつつ...
それが正解
08378332011/09/10(土) 19:35:16.92
はぅ、やはりそうなのか...

マシン語がよめれば、確信がもてたんだろけど、
よめないので、吐かれたコードが怪しいとおもいつつ、確信がもてなかただ
やっぱ、最後はマシン語よめないとなぁ...勉強しろよ>自分

if文に書き換えりゃいいだけだから、まぁ、大した話ではないんだけど、
失った時間が...

↑のは、dummy をはさんでるから、当該文で、例外がおきるけど、
スタックの状況によっては、全然離れたところが壊されて、
意味不明の動作になるから、けっこうたちがわるい...
0838デフォルトの名無しさん2011/09/10(土) 19:55:35.09
機械語読めないならCとかC++とか使わないほうがいいよ。MSのドットネットとか使ったほうが安全だと思う。その例だとどうみたってコンパイラのバグだとしか
思えない。ただ、バグを回避するコーディングもテクだとは思うが。
0839デフォルトの名無しさん2011/09/11(日) 10:18:11.84
いまどき機械語読める奴なんていねえよ。
8086の時代じゃあるまいし、バカかよ。
32bitのあのやたら長いバイナリを読める奴なんいるんかよ。
アセンブラ読めれば十分だろ、阿呆。
0840デフォルトの名無しさん2011/09/11(日) 10:31:35.14
ナニを切れてるんだか。デバッガの逆アセを読めるかどうかを言ってるんだろ、たぶん。
「C3がRETだ」とかそういうレベルで機械語が読めるとでも思ったのか??コンパイラが
吐くコードがイメージできないと辛いってことだと思うが。
0841デフォルトの名無しさん2011/09/11(日) 13:34:30.72
機械語
http://e-words.jp/w/E6A99FE6A2B0E8AA9E.html
マイクロプロセッサが直接解釈・実行できる言語。数字の列で表現され、人間が簡単に理解できるような形式にはなっていない。
0842デフォルトの名無しさん2011/09/12(月) 06:25:03.34
bpをpush/popする意味はなんですか?
0843デフォルトの名無しさん2011/09/12(月) 12:23:43.92
bpをポイントとして使ってんじゃね
0844デフォルトの名無しさん2011/09/12(月) 20:42:14.38
(E)BPは普通その関数の仮引数とローカル変数のスタック上の基準位置を示すのに使う。
08458332011/09/17(土) 21:24:46.26
ありゃ?私のがもとでなんか険悪?
ちなみに私も、アセンブラのつもりでマシン語とつかてた
0846デフォルトの名無しさん2011/09/17(土) 21:27:26.21
という話はおいておいて。本題

また、BCB5update1 でのお話
//---------------------------------------------------------------------------
class TTest1
{
protected:
#if 1
AnsiString __fastcall GetTest(){return GetTest(1);}//<== E2247 アクセスできない
#else
AnsiString __fastcall GetTest(){return "1";}//<== OK
#endif
public:
__property AnsiString Test ={read=GetTest};
AnsiString __fastcall GetTest(int x){return AnsiString(x);}
};
//---------------------------------------------------------------------------
class TTest2
{
private:
TTest1 * Test1;

protected:
AnsiString __fastcall GetTest(){return Test1->Test;}
public:
__property AnsiString Test ={read=GetTest};
};
//---------------------------------------------------------------------------

これで、コンパイルエラーが出るのはなぜなんでしょ?
0847デフォルトの名無しさん2011/10/10(月) 15:44:24.19
C++builderってdelphiみたいにポインタ使わずにプログラミングできる?
0848デフォルトの名無しさん2011/10/10(月) 15:48:15.92
コンポーネント(TObjectからの派生)がポインタをフル活用しているから難しいんじゃないか?
0849デフォルトの名無しさん2011/10/10(月) 16:30:47.92
Delphiはクラス型変数が実際にはポインタであって、それを構文上ポインタとして見せないというだけだからなぁ。
0850デフォルトの名無しさん2011/10/10(月) 19:51:01.56
string ^ b = a; みたいのだったけか…一応 pascal でもポインタ使えたような記憶がある…
あまり使わないからよく覚えてないし
0851デフォルトの名無しさん2011/10/20(木) 15:22:19.51
Delphiがベースなせいで
C++なら参照で済むところまでポインタ使ってる
0852デフォルトの名無しさん2011/10/20(木) 17:27:05.35
WM_MOUSEWHEELイベントでマウスホイールを取ってるんだけど
StringGridにフォーカスがあるとWM_MOUSEWHEELが入ってこなくなるので
StringGridのMouseWheelを無視してWM_MOUSEWHEELにイベントが入ってくるようにする方法を教えてください
0853デフォルトの名無しさん2011/10/20(木) 17:36:51.16
StringGridをいじってメッセージを転送するのじゃ
0854デフォルトの名無しさん2011/10/20(木) 17:50:10.42
いやそもそもStringGridが受け取らないようにしたい
Enabledをfalseにする如くに。
しかし、グリッド操作もするのでそれはできない
0855デフォルトの名無しさん2011/10/20(木) 18:06:40.77
ホイールを破壊する
0856デフォルトの名無しさん2011/10/20(木) 18:26:34.41
きえろぶっとばされんうちにな
0857デフォルトの名無しさん2011/10/20(木) 20:55:25.38
うん
0858デフォルトの名無しさん2011/10/22(土) 19:07:24.72
プログラムがWM_MOUSEWHEELを受け取ったら
マウス位置がStringGrid内かを判断して
StringGrid内だったら、処理したい関数にメッセージを転送すればいい。
これはわりと普通に行われている処理で
ぐぐれば、いくらでも例が出てくる。
0859デフォルトの名無しさん2011/10/24(月) 06:37:15.09
VCLのTObjectListってC++でテンプレートで使えないんでしょうか?
std::vector使えばテンプレートでキャストしなくてもいいですが、
VCLで統一したくて、でもTObjectListだとキャストいぱーいでいやーんです。。。
0860デフォルトの名無しさん2011/10/26(水) 14:16:12.70
マルチスレッドでクリティカルセクションの使い方がわかりません。

グローバルでcs1,cs2を,Form1のpublicにchar buf[20]を宣言して、
Form1にEdit1,Edit2,Button1を貼って実行すると、競合させたbufの内容が
Edit2側にゴミとして表示されてしまいます。

 ttp://ideone.com/Tk5g9

下の2つがスレッド側です。
使い方が根本的に違うのでしょうか。
0861デフォルトの名無しさん2011/10/26(水) 14:49:16.04
まじめに見てないけど。
家(buf)には鍵(cs)が1つだけあって、それを先に取ったものが家に入れる。
「家とは関係のない鍵(cs1,cs2)」をそれぞれが持っててるだけでは意味ない。
0862デフォルトの名無しさん2011/10/27(木) 01:07:21.50
CriticalSectionは1個だけ作成する。
作成するタイミングも間違い。コンストラクタか、FormCreate()でnewすべき。
競合するオブジェクトにアクセスしたいときにAcquire()する。
08638602011/10/27(木) 13:24:14.00
>>861-862
やってみたのですが、上手くいきません。

スレッド側のSleepがロックを解除してしまうとかはなさそうだし。
Sleepがないと、クリティカルセクションを使わなくても見た目では
競合していなかったので入れてみたのですが。

本来のやりたい事は、buf[]を介してUSB-I/O基板を繋いで、
メインスレッド側:
 ・Timer1で定期アクセス
 ・特定の処理で単発アクセス
サブスレッド側:
 ・特定の処理で連続アクセス
だったので、実験的に競合させるサンプルプログラムを作って動作を
試したかったのです。
(ググっても、見た目で効果がわかるようなサンプルプログラムはなかったので)

タイマイベントの中でフラグを立てて、それを監視して競合を避ける方法も試してみます。
■ このスレッドは過去ログ倉庫に格納されています