トップページ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
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で定期アクセス
 ・特定の処理で単発アクセス
サブスレッド側:
 ・特定の処理で連続アクセス
だったので、実験的に競合させるサンプルプログラムを作って動作を
試したかったのです。
(ググっても、見た目で効果がわかるようなサンプルプログラムはなかったので)

タイマイベントの中でフラグを立てて、それを監視して競合を避ける方法も試してみます。
0864デフォルトの名無しさん2011/10/27(木) 13:45:51.12
その上手くいかないソースは上げられませんか?

タイマイベントの中でフラグ云々は、クリティカルセクションそのもののような気が。
0865デフォルトの名無しさん2011/10/27(木) 13:59:33.25
上げられません
08668602011/10/27(木) 15:16:25.87
>>864
こんなんです
ttp://ideone.com/l7PYW

フラグでの処理は、まだは試していません
0867デフォルトの名無しさん2011/10/27(木) 17:23:54.69
Synchronizeってメインスレッドで動くから競合しないんじゃ…。
丸ごとSynchronizeするならスレッドの意味ないんじゃ…。
0868デフォルトの名無しさん2011/10/27(木) 20:22:24.18
これ、クリティカルセクション保持したままメインスレッドに処理渡すと
デッドロックしそうなんだけど。

基本は競合するところに最小限のロックをかけるだから、テストといえどもまずい。

0869デフォルトの名無しさん2011/10/28(金) 06:54:34.72
>>866
Timer1Timer はメインスレッドのメッセージループ内で動作するよ。
Synchronizeを使って呼び出されたSyncDebugはメインスレッドのメッセージループ内で動作するよ。

TCriticalSectionやMutexみたいなことをメッセージループで実現するのがTThreadのSynchronizeなのでどちらかにしたほうがいいよ。
0870デフォルトの名無しさん2011/10/28(金) 11:41:44.21
訂正

Mutexは違うな
0871デフォルトの名無しさん2011/10/28(金) 13:00:04.95
違わなくね?
0872デフォルトの名無しさん2011/10/28(金) 16:31:44.78
いや、同じことは出来るけど、排他制御を関数内で完結させる(局所的な排他制御機構)という点でMutexはいれないほうがいいかなと後で思った
用途の違いというかそんな感じ
0873デフォルトの名無しさん2011/10/28(金) 22:25:37.51
TCriticalSection でぐぐれば、具体例がいろいろ出てくるよ。
実際に正しく動作する例を見れば、理解できるんじゃないかな。
08748602011/10/29(土) 10:27:45.71
>>967-868
最初はUnit2.cppのExecute()の中で競合させようと、
あれこれ試したのが、上手く競合した状態を作れなくて
Synchronizeを使い出してしまったんですが、本末転倒ですね。

Synchronizeがメインスレッドで実行されるということは、
全く意識していませんでした。

>>869-872
Mutexはプログラム自体の二重起動防止では使っていますが、スレッドに対しても
使えるということでしょうかね。

>>873
TCriticalSectionはググってDelphiの例も読んでみたのですが、局所的な部分の
例しか見つけられませんでした。

クリテクカルセクションは、私には効果を確認する能力がないので諦めて、
フラグで処理しようと思います。

長々と付き合ってもらい、ありがとうございました。
0875デフォルトの名無しさん2011/10/29(土) 11:15:49.57
>フラグで処理しようと思います
いや、・・・TCriticalSectionは、そのフラグだから。
マルチスレッドでもちゃんと調停してくれることを保証するフラグ。
0876デフォルトの名無しさん2011/10/29(土) 11:54:06.06
>>875
それは解りましたが、”私の能力では”効果が確認できないので
TCriticalSectionで書くのを止めるということです。

Synchronizeでも使ってメインスレッド側で調停させる
ことにします。

0877デフォルトの名無しさん2011/10/29(土) 15:35:02.01
やーい無能m9(^Д^)プギャーーーッ
0878デフォルトの名無しさん2011/10/29(土) 16:24:53.78
>>876
何逆ギレしてんの?カルシウムとっとけよー
0879デフォルトの名無しさん2011/10/31(月) 10:11:38.77
あれが逆ギレに見えるんだww
0880デフォルトの名無しさん2011/11/01(火) 10:05:20.79
指定コントロールのMouseDownイベントで
Corsorの形状を変えているのですが
この時にマウスボタンを離さないとカーソルが変わってくれません。
これマウスボタンを押したままでマウスカーソルを変更する方法を教えてください
0881デフォルトの名無しさん2011/11/01(火) 16:40:12.41
試してないけど カーソルを変更した後にApplication->ProcessMessages();入れてみたら?
0882デフォルトの名無しさん2011/11/01(火) 17:10:17.79
>>881
それやったけどダメですた。
ちなみにSleepもやったけどダメですた
何か強制的にカーソル変えるアレないですかね?
ちなみにScreenのカーソルなら一発で変わるんですけどね

0883デフォルトの名無しさん2011/11/01(火) 17:26:33.21
やりたいことがよくわからないんだけど、コントロールのCursorはそのコントロール上に
カーソルが来たときのデフォルトのカーソル形状を設定するもの。なので通常は
Screen.Cursorを変更するんだけど。
■ このスレッドは過去ログ倉庫に格納されています