C++Builder相談室 Part19at TECH
C++Builder相談室 Part19 - 暇つぶし2ch2:デフォルトの名無しさん
08/08/01 16:31:53
<関連サイト>
公式サイト
URLリンク(www.codegear.com)
builder-ML 過去ログブラウザ
URLリンク(leed.issp.u-tokyo.ac.jp)
URLリンク(www.sfdata.jp)
C++Builder メーリングリスト
URLリンク(www.sfdata.jp)
C++Builder ML
URLリンク(www.jpdoc.com)
nifty/Delphi & Borland Users Forum
URLリンク(fdelphi.info)
BCBWiki
URLリンク(wiki.livedoor.jp)

<Update>
BDSアップデート
URLリンク(www.codegear.com)
BCB6/US SP1 は BCB6/JP 製品版に含まれています。
C++Builder 6 Update4 日本語版
C++Builder 6 Linker Update
URLリンク(www.codegear.com)

3:デフォルトの名無しさん
08/08/01 16:32:38
<Tipsなど>
Borland C++Builder最新リンク2005(リンク集)
URLリンク(www2.famille.ne.jp)
C++Builderのお部屋(Tips系)
URLリンク(www.ne.jp)
C++Builderによるプログラミング(Tips系)
URLリンク(www.geocities.co.jp)
BCB Tips(Tips系)
URLリンク(members.at.infoseek.co.jp)
C++Builder Tips(Tips系)
URLリンク(www.geocities.co.jp)
C++Builderのお部屋(Tips系)
URLリンク(www.ne.jp)
Wininet Programing(Tips系)
URLリンク(www.geocities.co.jp)
Dr.Bob's C++Builder Gate(Tips系)
URLリンク(www.drbob42.com)
猫でもわかるプログラミング(一般)
URLリンク(www.kumei.ne.jp)
Delphian World(コンポーネントライブラリ)
<行方不明>
DelWiki 避難所。
URLリンク(delwiki.info)

4:デフォルトの名無しさん
08/08/01 16:34:04
<ツール/コンポーネント>
<<フリー>>
フリーカーソル無効化アドイン
URLリンク(homepage1.nifty.com)
GExperts-IDE拡張
URLリンク(www.gexperts.org)
BorCVS - IDEにCVSを統合
URLリンク(borcvs.sourceforge.net)
Indy
URLリンク(www.indyproject.org)
JCL
URLリンク(homepages.borland.com)
JVCL
URLリンク(homepages.borland.com)
TurboPower
URLリンク(sourceforge.net)
<<有料>>
TMS Component Studio
URLリンク(www.tmssoftware.com)


5:デフォルトの名無しさん
08/08/01 16:35:23
<参考図書>
C++Builder 6コンポーネント活用ガイド&実践プログラミング
Vol.1
URLリンク(www.amazon.co.jp)
Vol.2 実践テクニック編
URLリンク(www.amazon.co.jp)
Vol.3 データベーステクニック編
URLリンク(www.amazon.co.jp)
Vol.4 インターネット編1
URLリンク(www.amazon.co.jp)
Vol.5 インターネット編2
URLリンク(www.amazon.co.jp)
Vol.6 グラフィックス・画像処理編1
URLリンク(www.amazon.co.jp)
Vol.7 グラフィックス・画像処理編2
URLリンク(www.amazon.co.jp)
※BCBの定番解説書。BCBを購入したけど何から勉強したら良いか
 判らないという人は取り合えずVol2から読みましょう。
※データベースやインターネット関連はDelphiの解説書も役に立ちます。


6:デフォルトの名無しさん
08/08/01 16:36:02
<過去スレ (html化済)>
C++Builder相談室
URLリンク(piza2.2ch.net)
新C++Builder相談室(C++Builder相談室 Part2)
URLリンク(pc.2ch.net)
C Builder相談室 Part3
URLリンク(pc3.2ch.net)
C++Builder相談室 Part4
URLリンク(pc5.2ch.net)
C++Builder相談室 Part5
URLリンク(pc5.2ch.net)
C++Builder相談室 Part6
URLリンク(pc5.2ch.net)
C++Builder相談室 Part7
URLリンク(pc5.2ch.net)

<無償版>
Turbo C++ Explorer (C++Builder2006(10)相当)
URLリンク(www.turboexplorer.com)

116 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 17:25:13
URLリンク(beeography.wordpress.com)
ここに書いてある方法でTurbo Exprorerでも合法にコンポ入れれるよ

117 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 18:02:21
あとこれ。
dclusr経由のコンポーネントインストールが、ライセンス違反かどうかの話。
URLリンク(hpcgi1.nifty.com)


7:デフォルトの名無しさん
08/08/04 11:18:22
NET FrameworkのControlってどやったら使えるんですかね?
コンパイルエラーになっちゃうんだけど

8:デフォルトの名無しさん
08/08/05 00:51:26
よくわからんけど、C++Builderは.NETアプリを作るためのものじゃないが。C#かVB.NETじゃない?

9:デフォルトの名無しさん
08/08/05 10:09:40
いえ、CBuilder2007なんですが
ヘルプにはしっかりと出てるんですよねこれ。

10:デフォルトの名無しさん
08/08/05 11:06:57
5や6使いが多いからなぁ

11:デフォルトの名無しさん
08/08/05 21:50:07
いやいや、C++Builderでは.NETアプリケーション作れませんてば。

12:デフォルトの名無しさん
08/08/06 10:22:27
>>11
m9(^Д^)プギャーーーッ

13:デフォルトの名無しさん
08/08/06 15:00:01
Builder5でStrCmpLogicalWを使う方法を教えて><

14:デフォルトの名無しさん
08/08/07 11:52:01
ListViewのカラムヘッダーの色を変える方法を教えてくれ

15:デフォルトの名無しさん
08/08/09 23:12:14
>>13
shlwapi.hが古いのとshlwapi.dllのインポートライブラリがないのが原因

MSからPlatformSDK落としてきて最新のshlwapi.hを入手するか
shlwapi.hに LWSTDAPI_(int) StrCmpLogicalW(LPCWSTR psz1, LPCWSTR psz2); 追加

implib.exe shlwapi.lib shlwapi.dll でインポートライブラリを作り
tlib.exe lib\import32.lib + shlwapi.lib 上記dll内のAPIをimport32.libに追加

これでいけた。

16:デフォルトの名無しさん
08/08/12 16:45:58
さっさと教えろクズ

17:デフォルトの名無しさん
08/08/12 19:51:03
わ、ゴキブリがしゃべった

18:デフォルトの名無しさん
08/08/13 14:00:38
東京のゴキブリは喋るんだよ。
田舎者は知らなかっただろうけど。

19:デフォルトの名無しさん
08/08/13 22:52:49
環境: C++Builder5, Win2k
実行ファイル(C:\test.exe)のショートカットを作り、
そのショートカットを適当な所(C:\tekito\test.exeへのショートカット)に移動し、
ショートカットをダブルクリックして実行したとします。
その時、'C:\tekito\test.exeへのショートカット'文字列を得たいのですが、どうすればいいでしょうか。

20:デフォルトの名無しさん
08/08/13 23:11:16
無理じゃね?

21:デフォルトの名無しさん
08/08/14 08:52:11
>>19
意味が良くわからん。

実行ファイルのショートカットを作って、
その実行ファイルを別のところに移動するの?
移動するのはショートカットの方?

ショートカットを移動してそのショートカットをダブルクリックして実行したときに、
その呼び出し元のショートカットのパスを知りたいって事か?




22:デフォルトの名無しさん
08/08/14 11:32:11
初歩的なことですが・・・

ヘッダーに
typedef struct{
  String ss;
  int aa;
} GG;
があって
ヘッダのprivateに実体をとったときに
GG g[2];

cppで↓みたいな感じで代入ってできないですかね?
g[0]=GG{ "abc", 0 };

23:デフォルトの名無しさん
08/08/14 11:35:07
struct GG{
  GG(String a, int b) : ss(a), aa(b) {}
  String ss;
  int aa;
};

g[0] = GG("abc", 0);

24:デフォルトの名無しさん
08/08/14 11:36:00
あとコピーコンストラクタと代入演算子のオーバーロードもしておくといいお

25:デフォルトの名無しさん
08/08/14 11:51:23
>>23
GG(String a, int b) : ss(a), aa(b) {}の行でエラーが出ました><


26:デフォルトの名無しさん
08/08/14 12:01:19
あ、違った。

struct GG{
  GG(String a, int b) : ss(a), aa(b) {}
  String ss;
  int aa;
};
GG g[2];  ←ここでエラー
g[0] = GG("abc", 0);

27:デフォルトの名無しさん
08/08/14 12:07:18
あ、デフォルトコンストラクタ入れたら通りましたありがとうございます。

28:デフォルトの名無しさん
08/08/14 13:59:53
String ss;

char ss[24];
ってしたときのコンストラクタの記述を教えてください><

29:デフォルトの名無しさん
08/08/14 14:48:59
コンストラクタ内でstrcpyでもしとけ

30:デフォルトの名無しさん
08/08/14 14:49:34
わかりました><

31:デフォルトの名無しさん
08/08/14 21:09:44
>>19です。
>>20,21 返信ありがとうございます。
> ショートカットを移動してそのショートカットをダブルクリックして実行したときに、
> その呼び出し元のショートカットのパスを知りたいって事か?
そうです。

32:デフォルトの名無しさん
08/08/14 21:14:56
>>31
それを知ってなにをしたいのか書けば代案とか出せるんだが。
コマンドラインスイッチやカレントディレクトリで代用とかはできんの?

33:デフォルトの名無しさん
08/08/16 14:06:49
>>32
返信ありがとうございます。
参考にさせて頂き、コマンドラインパラメータで代用しました。
作ったソフト(RandExec.exe)は以下のような物です。

例えば、「RandExec.exe C:\Data\!*.wav」として実行すると、
「C:\Data\」ディレクトリにある、拡張子「wav」のファイルのうち、
先頭に「!」が付いている名前のファイルをランダムで1つ実行します。

FindFirst()のお陰でワイルドカード文字が使えるのですが、
残念ながら、「RandExec.exe C:\*\start.wav」のように、
パスの途中にはワイルドカード文字を使えないようです。
これを実現したいのですが、どういう手段が考えられるでしょうか。
適したコンポーネントはご存じないでしょうか。

34:デフォルトの名無しさん
08/08/16 14:28:08
>>33
普通に実装したら?

まず、ワイルドカード (* ?) を探して、その手前の \ を探す、
ワイルドカードの次の \ を探す、\ で挟まれてればそれはフォルダのワイルドカード、
最初の \ の手前までのフォルダで FindFirst して上のワイルドカードと一致するか検索、
ってやれば簡単にできそう。

35:デフォルトの名無しさん
08/08/16 16:22:51
入力が"C:\Data\sound*\snd*.wav"なら
strtokとかでC: Data sound snd* snd*.wavに分割
先頭から次の要素接続>FindFirst/FindNextで複数マッチした場合はその中からランダムに選択、でまた次の要素接続ってやってけば簡単だろ

36:デフォルトの名無しさん
08/08/20 14:06:58
今度Vista対応を行わないといけなくなったのですが
マニフェスト記述例やデータ保存箇所のルールなどBCBやDelphiで
作成したプログラムに対しても参考になるような情報が書いてある
書籍って何か無いでしょうか?(CマガのMookは買いました)

37:デフォルトの名無しさん
08/08/21 22:03:33
Delphi 2007 for Win32によるWindows Vista対応
URLリンク(dn.codegear.com)
URLリンク(bekins.borland.com)

38:36
08/08/22 15:17:18
>37
参考になりました
これを足がかりに少し進めてみます

39:デフォルトの名無しさん
08/08/22 15:26:46
WinXP SP3だけど、

exeにマウス右クリックすると、
「マニフェスト ファイルを作成」
というポップアップメニューが出るお。

40:デフォルトの名無しさん
08/08/22 17:10:39
>39
社内でSP3を入れたXPを探してきて見てみたけど・・・・出なかった。
何が要因でそれが表示されるようになるんだろう。

41:39
08/08/22 17:17:31
え”、そうなの?

自分も知りたい。

42:デフォルトの名無しさん
08/08/25 12:51:45
>39
VisualStudio入ってない?

43:39
08/08/25 12:56:35
V$6なので、関係無いと思いますが。

44:デフォルトの名無しさん
08/08/26 19:37:23
ところでCodeGearの次スレってたたないの?
せっかく2009が発売されるのに・・・

45:デフォルトの名無しさん
08/08/26 19:53:04
【Embarcadero】CodeGearオッチャ その11
スレリンク(tech板)

46:デフォルトの名無しさん
08/08/27 10:04:48
thx
値段たっかいなー
ご祝儀にしてもこれはちょっと辛いわ

47:デフォルトの名無しさん
08/08/27 12:31:05
BCB5+vistaを使っています。

CodeGuardを使いたいのですが、大量にログが出てしまいました。
見てみるとどうもライブラリ内のAnsiString::cat_printfらしく、とりあえず
ライブラリ内と標準ライブラリのチェックだけはずしたいのですが
方法はないでしょうか?
※include の前に #pragma option -vG- を入れても引っかかって
 しまいました。


48:デフォルトの名無しさん
08/08/27 17:15:53
BCB6で、
>メモリストリームの拡大中にメモリが足りなくなりました
エラーが出た場合、
どういう対処がありますでしょうか?

49:デフォルトの名無しさん
08/08/27 22:29:08
>>48
その不具合に直接の関係があるかどうかは判らないけど、BCB6ではメモリ管理周りに不具合が残されたままなので
ひとまずfastmmをプロジェクトに追加してみたらどう?

50:48
08/08/28 08:42:56
サンクス>>49
fastmmをプロジェクトに追加したら治りマスタ。

今のfastmmってDLLも不要になってるんですね。

自分がfastmmが嫌いなのは、プロジェクトに組み込まれたか組み込まれてないか、見た目で分からないんですよね。
判定する方法はないんでしょうか?

51:デフォルトの名無しさん
08/08/28 17:21:40
Builder2007で質問ですが
Form1からForm2を表示させたら何故かForm2がfsStayOnTopみたいになって
Form2が常にトップで表示されるんですが何故ですか?
両方ともFormStyleはfsNormalです。

52:デフォルトの名無しさん
08/08/28 17:23:02
Form1をParent設定したからじゃね?

53:デフォルトの名無しさん
08/08/28 17:30:08
してないですししたらForm1にめりこみません?

54:デフォルトの名無しさん
08/08/28 17:35:21
ShowModalで表示させてない?

55:デフォルトの名無しさん
08/08/28 17:39:22
いえ、Showでいっといてます。

ちなみに、モーダルだと下フォーム(Form1)をクリってもアクティブにならないですが
>>51の現象はForm1はアクティブにはなるのですがForm2が常に前面にあるんですう
うーん、今までBuilder5でやってたのと同じなんですが、2007で仕様が変わったとか?

56:デフォルトの名無しさん
08/08/28 21:25:39
URLリンク(hpcgi1.nifty.com)

Vista対策の弊害

57:デフォルトの名無しさん
08/08/29 18:06:17
>>56
そそそそあqwせdrftgyふじこlそれだ!!
ありがとうありがとう><

しっかしこんなすぐわかるバグを放置ってなんなんだいったい

58:デフォルトの名無しさん
08/08/29 18:09:34
あー!
ListViewのOwnerDataをtrueにしてあれすると
MultiSelectが使えないよおおおおおおおおおおおおおおおおおおおおー
複数選択するとSelCountが0になるうううううううううううう
たすけてー><

59:デフォルトの名無しさん
08/09/01 09:56:29
te

60:デフォルトの名無しさん
08/09/01 09:58:37
StringGridでカーソルを行選択にできますが
これをListViewみたいにマルチセレクトする方法を教えてくださいよ

61:デフォルトの名無しさん
08/09/01 16:48:43
更に質問
StringGridのDrawCellで各セルを描画してんだけど
Invalidate呼んだら表示されてるとこ全部あれしちゃうんで
これ指定した行だけ更新するほうほうをさっさと教えてくださいよ

62:デフォルトの名無しさん
08/09/02 19:15:50
ListViewで1行づつ背景の色を変える方法を教えてください><

63:デフォルトの名無しさん
08/09/09 06:57:56
>>33です。
>>34 >>35 返信ありがとうございました。
お陰様で、かなめの部分はこんな感じでできました。
void  FindPathPattern(TStringList *paths, AnsiString dir, const TStringList *items, int level)
{
  TSearchRec sr;
  int     attr;

  if (level < items->Count-1) {
    // フォルダ検索&再帰
    attr = faAnyFile;
    if (FindFirst(dir+items->Strings[level], attr, sr) == 0) {
      do {
        if (sr.Attr & faDirectory) {
          FindPathPattern(paths, dir+sr.Name+"\\", items, level+1);
        }
      } while (FindNext(sr) == 0);
      FindClose(sr);
    }
  }
  else {
    // ファイル検索&保存
    attr = faAnyFile & ~faDirectory;
    if (FindFirst(dir+items->Strings[level], attr, sr) == 0) {
      do {
        paths->Add(dir+sr.Name);
      } while (FindNext(sr) == 0);
      FindClose(sr);
    }
  }
}

64:デフォルトの名無しさん
08/09/09 21:57:25
>62
OnCustomDrawItemイベントでSender.Canvas.Brush.Colorを変更するだけ。

65:デフォルトの名無しさん
08/09/11 21:52:29
2009入れたんですけど、2007で通ったコンパイルが通らないです。
widestring は wchar_t* に変換できないってどうすればいいのでしょ?

WideString( fi.FullName );

66:デフォルトの名無しさん
08/09/18 20:04:25
TToolBarの中のTToolButtonを真ん中に持ってきたいのですが、
方法無いのでしょうか?

67:66
08/09/18 20:11:25
Indentプロパティに0以上の値を設定すればよかったです。。
半年も悩んだのに、書き込んだ瞬間わかるとは。。

68:デフォルトの名無しさん
08/09/19 13:13:29
BCB5で突然CPUウィンドウが表示され続ける現象が出始めてしました

○問題
 統合環境からのデバック実行時にCPUウィンドウが表示され続ける
○解ったこと
 ListViewの項目幅を変更した時にCPUウィンドウが表示される
○その他情報
・Vista用のマニフェストを追加
・Listviewとは関係無い箇所の修正
・プログラムへのバージョン情報の埋め込み
この3点は元に戻してみましたが代わりありません
数日前のソースに戻すと問題無く動作します

DelphiMLで同様の現象が出た人が居たのですがその方はXP3を当てることで直ったそうですが
今の開発環境はすでにSP3が入っているのでこのような変化を付けることが出来ません
問題が発生しているListViewにはまったく手を入れていません

何か対策をご存じな方がおられましたらお願いいたします

69:デフォルトの名無しさん
08/09/19 22:48:13
マニフェストが怪しくね?システム側にキャッシュされるという話を読んだことがあるし。

70:68
08/09/20 08:52:23
マニフェストがキャッシュされる話は自分も聞いたことがあるのですが
外部マニフェストでは無く実行ファイルの中に入れているので影響は無いと思っていました
(実行ファイルのパスとタイムスタンプでキャッシュしてると理解してます)

困った・・・・

71:68
08/09/20 15:14:16
解決しました
原因は指摘の通りマニフェスト
一時は外しても再現してたのですがすべてのプロジェクトの再構築で再現しなくなりました

マニフェストのほうですがMicrosoft.Windows.Common-Controlsを指定しているブロックの部分が
引っかかっていたみたいです(目的としてはAdmin権限必須の指定だけでよかった)
丁度Vista対応実例があったのでそのマニフェストを流用していたために疑うのが遅れました

72:sage
08/09/21 07:40:54
 Turbo C++でフリーカーソル無効化アドインを使っていたのですが、
hotfixを当ててから効果がなくなってしまいました。
TC++をインストールしなおす以外に何かよい方法はないでしょうか?


73:デフォルトの名無しさん
08/09/21 11:14:12
C++Builder2009が届いたんで、今までの環境を移行して今まで組んだプログラム
を修正して動かしたりしているんだが、ASCII文字だけがどうしてもうまくいかん......

元々、外国の特殊文字(Latin1/2)の文字入力の為に作ったソフトで、
ASCIIのウムラウトとかをキーボードから":u"とか入力して表示できる
ようにしてたんだが、C++Builder2009でコンパイルしてテストすると
"・"になっちゃうんだよね。

要は、ASCIIコードの特殊文字を表示させたいんだけれども、
どういう風にすればいいか分かる人いない?
やっぱり、Unicode対応しちゃったから今までのASCIIは完全にダメなんかな?

74:デフォルトの名無しさん
08/09/21 11:28:07
要は今までANSI(ISO 8859系)で処理してたてことだよね?AnsiStringで処理しておいて
表示のみUnicodeStringにするとかそのくらいしか思い浮かばないな。

75:デフォルトの名無しさん
08/09/21 12:04:00
>>74
そういう方法しかないかなぁ......
一応試しているんだけれど、TEncodeingでUnicode化もうまくいかないんだよね......
TBytesにAnsiStringを変換しないとUnicode化はできないみたいなんだけれども、
これもうまくいかない......

76:デフォルトの名無しさん
08/09/22 07:05:05
>>75
もしよかったらバージョンいくつからの以降で、
どの程度ソースの変更が必要だったか教えて欲しい。

77:デフォルトの名無しさん
08/09/23 09:38:40
>>76
えっと、CodeGearウオッチャスレにも書いてるから、
重複するけれども、こんな感じ。
まぁ、やり方が分かれば、手間は掛かるかもだけれども難しい事はないよ。

C++Builder2007とC++Builder5からの移行だよ。

例1)MessageBoxに直接文字列セット
 Applcation->MessageBox("mes","mes",MB_OK);
   ↓
 Applcation->MessageBox(L"mes",L"mes",MB_OK);
例2)AnsiString型に文字列をセットしてMessageBox出力
 AnsiString str="mes";
 Applcation->MessageBox(str.c_str(),str.c_str(),MB_OK);
   ↓
 UnicodeString str="mes";
 Applcation->MessageBox(str.w_str(),str.w_str(),MB_OK);
例3)DelphiのVCL登録
 Char→AnsiChar
 PChar→PAnsiChar

例4)C++Builder5からの移行
  C++Builder5から移行して、例1とか例2とかの修正後、
 リンカエラーが出た場合の対処として、新規プロジェクトを作成
 してフォームのCPPファイルを追加してコンパイルするとリンクも通る。

78:デフォルトの名無しさん
08/09/23 10:22:15
>>77
ありがとう。L マクロか。

私も5からの以降なんだけど、
フォームは作り直さないとやっぱりダメ?
>フォームのcpp ←dfm の間違いだったらいいんだけど・・・


79:デフォルトの名無しさん
08/09/23 10:55:33
>>78
あっ、フォームを作り直す必要はないよ。
作り直す必要があるのはプロジェクトファイルね。
新規でVCLフォームアプリケーションを作成して、最初にあるuit1をプロジェクト
から削除後、C++Builder5で作ったdfmのあるCPPファイルをプロジェクト
にD&Dすると、dfmとcppとhファイルが勝手に追加されるから、
その後ならリンクも正常に通るよ。

80:デフォルトの名無しさん
08/09/23 21:08:50
>>79
ありがとう!
決心しました。
明日アップグレード金振り込んできます。

デヴェロッパーズキャンプとか出たのに、
そういう肝心なことは聞きにくかった。
っていうか、Builder5 からの移行って時点で
聞きにくかった・・・。

81:デフォルトの名無しさん
08/09/23 22:42:54
>>80
お役に立てたら何よりだよ。

とりあえず、C++Builder2007でも通らなかったものはある。
具体的にはTarCtrlsっていうVCL。
これは、dsinintf.hppっていうのを使っているが、これがC++Builder2007
の時点でファイル名が変わってたっぽい。
で、そのファイル名に変更してみたんだが、クラス名も変わってるみたいで
簡単には移植できなさそうで諦めたよ。

そういったものを使ってなければ、移植に関してはそんなに問題はないと思うよ。


82:デフォルトの名無しさん
08/09/24 10:13:25
>>81
重ね重ね、ありがとう。

VCL でも整理されたクラスとかあるんだね。
TarCtrls は多分使ってないと思う。
あんまり VCL でも変わったのは使わないようにしてるから、
意外と移植の手間は少なそうな気がしてきた。

それより、Lマクロがめんどくさそう・・・。

83:デフォルトの名無しさん
08/09/24 11:56:47
AnsiString、WideString、UnicodeStringでtypedefで置き換えできる位の互換性持たせてくれと思う・・

84:デフォルトの名無しさん
08/09/25 14:07:34
2009トライアル版にBCB6のプロジェクトを読み込ませてビルドを試みてるけど,書き直しが結構大変。
>>77のMessageBoxも沢山あるんだけど,何しろヘルプがバグだらけで正しい書き直し方がわかるまでに
時間がかかる。

・UnicodeStringのc_str()メソッドはwchar_t*を返すとヘルプには書いてあるが,実際にはchar*が返される。
wchar_t*を返すのはw_str()だった。

・ExceptionクラスのMessageプロパティの型はヘルプによればAnsiStringだが,実際にはUnicodeString。

・DateTimeToString関数のプロトタイプはヘルプではDateTimeToString(AnsiString, const AnsiString, TDateTime);
となっているが,正しくはDateTimeToString(UnicodeString &, const UnicodeString, TDateTime);らしい。
結局ヘルプではAnsiString→UnicodeStringの書き換えがまともに行われてないんだということがやっとわかった。
それにしても&くらい抜かさずにちゃんと書いて欲しい...

ところで2009ではTEditのTextやTButtonのCaptionなんかが軒並みAnsiStringからTCaptionという型に変わって
るんだけど,ヘルプにはTCaptionはstringだと書いてある。これってstd::stringのことなの?
だとすると,ToInt()とかないからstd::stringstream使わなきゃなんないし,今までインデックスが1からだったのが
0からになるし,エライ騒ぎなんだが...と思ったら,違うみたい。デフォルトではstringはUnicodStringだそうな。

もーようわからん。Delphiとごっちゃになったヘルプはなんとかならのか!

85:デフォルトの名無しさん
08/09/25 15:24:28
>2009トライアル版にBCB6のプロジェクトを読み込ませてビルドを試みてるけど,

BCB6を使ってるとは同じ身だorz

誰か対応方法wiki化しる!

86:デフォルトの名無しさん
08/09/25 16:06:32
>std::stringstream使わなきゃなんないし
#define _TCAPTION(str) std::string(str.c_str())
でいいじゃん

87:84
08/09/25 16:10:03
>>86
いや,TCaption=std::stringじゃなくてTCaption=UnicodeStringだってことがわかったんでいいんだ。
紛らわしいこと書いてスマソ。

88:デフォルトの名無しさん
08/09/28 13:42:03
うにこでStringはt_str()で_TCHARが返るよ

89:デフォルトの名無しさん
08/09/28 13:44:10
うにこで初心者はここら辺見とくといいよ
URLリンク(www.ruche-home.net)

90:80
08/09/29 22:12:58
ビルダー2009コネーヨー> ヽ(´Д`)ノ

もう2日まって来なかったら、連絡してみよう・・・。

91:デフォルトの名無しさん
08/09/30 12:53:19
StrToInt では16進数文字列が変換できないの?
自分で HexToInt なる関数をつくってしまったわい。

92:デフォルトの名無しさん
08/09/30 13:19:32
>>91
変換する文字列の頭に 0x つければできるよ。

93:デフォルトの名無しさん
08/09/30 16:15:04
>>91 m9(^Д^)

94:デフォルトの名無しさん
08/09/30 16:24:31
こういうのは自作した方が良い。

95:80
08/09/30 16:25:12
今日届いた。一応解決したからかきこんどきます。スレ汚し、スマヌ。
インストールする気が全く起きん・・・。

96:デフォルトの名無しさん
08/09/30 19:00:11
>91
'$'+でももちろんおk

97:貧乏学生
08/09/30 19:27:05
質問です。
ファイルをリストボックス上にスクロールダウンして
リストボックスにファイルのパスが表示されるプログラムが
出来なくて困っています。
ご存知の方いらっしゃいましたらご指導よろしくお願いします。

98:デフォルトの名無しさん
08/09/30 19:37:26
>>97
どこの言葉だよ・・・。

99:デフォルトの名無しさん
08/09/30 20:32:09
にh(ry

100:デフォルトの名無しさん
08/09/30 20:36:32
リストボックスにD&Dでリストボックスにファイルパスを表示する
ということ?

101:貧乏学生
08/09/30 20:38:00
>>100
そうです。お教えください。よろしくお願いします。

102:デフォルトの名無しさん
08/09/30 20:39:30
貧乏な学生達はD&Dのことをスクロールダウンというのか・・・

103:デフォルトの名無しさん
08/09/30 20:48:38
どこの国からの留学生だヨ。


104:デフォルトの名無しさん
08/09/30 23:20:09
>>101
DragAcceptFiles を使う。
あとは DragQueryFile 辺りを調べてみて。

105:デフォルトの名無しさん
08/10/01 03:17:36
コンポなかったっけ?まあ、APIでやったほうがパッケージ管理の必要ないから楽だけど。

>>102
D&Dっていったらダンジョンズ・アンド・ドラゴンズだろ

106:デフォルトの名無しさん
08/10/01 08:27:09
アイコンにファイルをドラッグ&ドロップしたら
アプリが起動するって
どういう仕組みになってるんだろ?

107:デフォルトの名無しさん
08/10/01 08:41:02
>>106
それをやるのが OS の GUI。

108:デフォルトの名無しさん
08/10/01 09:47:12
>>106
コマンドラインパラメータにドラッグ&ドロップされたファイル名が入ってくるから,
_argv[]とかParamStr()で取れるよ...って,そういう話じゃないのかな?

109:デフォルトの名無しさん
08/10/01 11:32:30
C++B 2009のトライアル版を使っています。
各コンポーネントのCaption表示をリソース管理でローカライズすることは
出来たのですが、動的に表示を変える場合に用意した文字列を、リソース管理
でのローカライズ方法が分かりません。どなたか御教授下さい。

ちなみに、Caption表示等のリソースファイル(dfm, rc)とは別に文字列を定義
するファイルを作らないといけないんですかね?

110:デフォルトの名無しさん
08/10/01 12:09:25
EXEといっしょにリソース入れるなら分けた意味ないだろ。
入れ替えたいなら、普通DLLでリソース持つわな。

111:デフォルトの名無しさん
08/10/01 13:38:11
DLLですか・・・。
C++Bのエディットで表示したソース上で日本語以外のワイド文字が
入力出来ないみたいなんで、入力が出来るトランスレーションエディ
タで一緒に編集できる方法があればと思ったのですが。

112:デフォルトの名無しさん
08/10/01 14:05:49
簡単に編集したかったら
>>109 のように独自定義ファイル作って、実行時に読み込んで割り付けると楽だと思うが。

別にリソースでわざわざ持たせなくてもいいんだろ?

113:106
08/10/01 15:21:24
>>108
そういうことダス。
ベリベリサンキュ。

114:デフォルトの名無しさん
08/10/01 15:26:33
そうですね。
独自定義ファイルやDLLを作成するにしても外部ファイルが増
えてしまうので、出来れば増やしたくないってのがありますが
結局リソースファイル作る時点で増えるんで、独自定義ファイル
でまとめたほうが楽ですね。

115:デフォルトの名無しさん
08/10/01 15:32:12
そうそう、独自定義ファイルをUTF-8で作っておいたら無問題。

それと編集しやすいファイル記述形式は、

>AAA=menu click

みたいな1行単位。

これだと、TStringListにロードさせたあとは、Valuesで取れるし、
テキトーにファイルにコメント書いても悪影響ないし、
それとか、いざ、Win以外の開発が発生してもロードクラスを簡単に作れる。

116:115
08/10/01 15:35:45
さらに自分の場合、

>Form1="送信フォーム"
>Form1.Label1="送信設定"
>Form1.Button1="送信"

みたいにしといて、
TStringListを渡しておいたら、
勝手にフォームのコントロールを検索してのキャプション書き換える
クラス作ちゃったw

注意点は、メモ帳でファイル書き換えても自分の直した行しか変わらず問題ないが、
ワードパッドとかで書きかえるとファイル保存するときにUNICODE勝手にいじられちゃう。

117:115
08/10/01 15:40:46
ついでにヒントを書いておくと、

・ファイルロードするTStringListクラスを保持したLangListクラス
・ロードしたものでコントロールのキャプション書き換えるクラス

は別々にしておいた方が良い。

なぜかというと、ロードしたクラスのみを使う場合があります。

例)
throw Exception(LangList.ValuesAnsi("MSG.CannotCreateFile") + SDestFile);

(LangListからUTF8でとるときは、LangList.ValuesUtf8("MSG.CannotCreateFile")とか書く)

118:デフォルトの名無しさん
08/10/01 15:55:30
109です。

>>115
似たようなことをやっていたのですが、
自分の場合リストからロードする時にValue使わずに、
わざわざ文字列比較して引っかけてたんで、すごく
参考になります。

わざわざ、独自定義ファイルの作り方を教えて下さって
ありがとうございます!!

119:デフォルトの名無しさん
08/10/02 00:03:06
このあいだのデベロッパーキャンプで高橋さんが.pasファイルにresourcestringを書いといて
リンクすればいい、ってのをやってた希ガス。標準的な手法があるなら独自にやるのは無駄では?
URLリンク(dn.codegear.com)
これのB3かな?あとは
URLリンク(dybdahl.dk)
こゆのとか。

120:デフォルトの名無しさん
08/10/02 00:26:23
なるほど。それはいいことを聞いた。
で、ヘルプの「アプリケーションのローカライズ」で検索したらなんか出てきたよ。
今勉強中。

121:デフォルトの名無しさん
08/10/02 17:35:37
AnsiStringで文字列末に\0を二つ追加したいのですが、

AnsiString str;
str += "\0\0";

ではだめそうでした。char* に変換するのも面倒で、
なんかいい方法無いでしょうか。


122:デフォルトの名無しさん
08/10/02 21:07:52
>>121
大丈夫なようだが。

AnsiString str = "abc";

str += "\0\0";

Edit1->Text = str;

if (str.SubString(4, 1) == "\0") {
Label1->Caption = "\\0";
}
if (str.SubString(5, 1) == "\0") {
Label2->Caption = "\\0";
}

123:デフォルトの名無しさん
08/10/02 21:47:12
悪い。AnsiStringでは"\0"のデータを直接演算できないみたいだね。
cat_printf()を使ったらうまくいった。

AnsiString str = "abc";

str.cat_printf("%c%c", 0, 0);

Edit1->Text = str;

Label3->Caption = str.Length();

if (str[4] == 0)
Label1->Caption = "\\0";

if (str[5] == 0)
Label2->Caption = "\\0";

124:121
08/10/03 15:45:35
>>122-123 おお、cat_printfなんてものがあるんですね、
ありがとうございました!
使うところはもちろんSHFileOperationなのでした。

125:デフォルトの名無しさん
08/10/07 07:00:06
2009でPNG画像使おうとするとうまくいかない

新規プロジェクトのフォームに貼ったTImageにPNGを読み込ませておいてビルド→
[ILINK32 エラー] Error: 未解決の外部参照 'Pnglang::_EPngInvalidCRCText' が C:\PROGRAM FILES\CODEGEAR\RAD STUDIO\6.0\LIB\OBJ\PNGIMAGE.OBJ から参照されました
(もちろん、Pnglang.hppとPnglang.objは存在する)

読み込ませずにビルドしても同じ。TImageを貼っただけではうまくいくので、PNGを読み込ませた時に挿入さ
れた#include <pngimage.hpp>を削ってみるとビルドはとおるが、TImageの(TPictureの)LoadFromFileなどで
読み込もうとしても未サポートの拡張子と言われる

じゃあ、TPngImageを使おうと思っても、これはpngimage.hppで宣言されているのでインクルードしないとコン
パイルできないが、インクルードするとリンクエラー

試しに別のマシンに2009インストールして試してみたけど同じだった(両方ともXPマシン)
まともに使えている人いる? おかしいのは俺のところだけか?
それとも、何か情報ある?


126:デフォルトの名無しさん
08/10/07 14:57:15
>>125

リリースノートによると、画像処理のパッケージがVCLJPGからVCLIMGに代わったからその影響みたい。
URLリンク(forums.codegear.com)

その、VCLIMGパッケージがリンクできていないようだから、どこか適当なソースに、
#pragma link "vclimg.lib"か#pragma link "vclimg.bpi"を追加すれば出来た。


127:125
08/10/07 22:40:45
>>126
さんきゅ 動いたよ!
今後の事考えると面倒なんで、Pnglang.hppに#pragma link "vclimg.lib"書き加えたw


128:デフォルトの名無しさん
08/10/09 22:29:52
フォームにパネルを均等に配置してるのですが、
最大化した時に、フォームのサイズに合わせて配置したパネルも一緒に拡大する方法を教えてください
オブジェクトインスペクタの設定でできますか?

129:デフォルトの名無しさん
08/10/09 23:41:18
>128
Anchors

130:デフォルトの名無しさん
08/10/10 20:41:01
データダイアグラムの使い方がよくわかりません
誰か教えて

131:デフォルトの名無しさん
08/10/11 01:36:14
>>129
アンカーでどうやって均等配置できるんですか??
LeftとRightをtrueですか?
そうしたらLeftの位置は変わらないからRightが伸びてパネルがかぶるし・・・
どうすればいいんでしょうか?

132:デフォルトの名無しさん
08/10/11 12:25:15
>>131
どういう状態にしたいかがよく分からんが、新しくPanelを作ってBevelOuter
をbvNoneにし、その上に今のPanelを置いてAnchorsを変えればいいんじゃない?


133:デフォルトの名無しさん
08/10/11 18:54:02
>>128
OnResizeイベントでダメなん?

134:デフォルトの名無しさん
08/10/11 19:26:56
>>132
えとですね。
例えばフォームWidthが200として横に均等にパネルを4つ並べます。
こんな感じで↓(とりあえず横が分かれば縦もわかるので今は高さを考慮しない)
隙間(20)パネル(25)隙間(20)パネル(25)隙間(20)パネル(25)隙間(20)パネル(25)隙間(20)
これをフォームのWidthを倍の400にした時に
隙間(40)パネル(50)隙間(40)パネル(50)隙間(40)パネル(50)隙間(40)パネル(50)隙間(40)
こんな感じに間隔もパネル幅も倍になってほしいのですが。。。
これってプロパティだけでできますか?
>>133
自分で計算してパネルの位置と幅を調整しなさいよってことですか?

135:デフォルトの名無しさん
08/10/11 20:00:23
普通こういう風にしないか?

void __fastcall TForm1::FormResize(TObject *Sender)
{
Panel1->Width = Form1->Width * 0.5;
Panel2->Left = Form1->Width * 0.5;
Panel2->Width = Form1->Width * 0.5;
}

136:デフォルトの名無しさん
08/10/12 14:09:50
>>135
それが普通かどうかはわかりませんが
オブジェクトインスペクタで設計時にやる方法があるのかなって思ってききました
できないならやはりResizeで自分で計算するしかないですよね

137:デフォルトの名無しさん
08/10/12 15:38:01
>136
OnResizeで全部自前計算でFA。

138:132
08/10/12 21:32:48
>>134
ん~......
色々試してみたが、今の所できんかった。
こういうのって半分パズルだよなぁ......
できない事はないのかもしれんが、オレはちょっとできんかった。

139:デフォルトの名無しさん
08/10/12 22:40:16
>>134
へたにフォームのプロパティでぐちゃぐちゃやるより、手で書いた方が良いと思う。

140:デフォルトの名無しさん
08/10/13 12:33:23
>>137
やっぱそれでFAですかね。
>>138
何か出来そうな気はするんですよね。でもたぶんできないっぽいような
>>139
アンカーとかである程度はできるから簡単にできるのなっておもいまして

とりあえずResizeでFindComponentでパネル取ってやりまーす
エロい人達ありがとう

141:デフォルトの名無しさん
08/10/15 00:24:22
>>140
>134の状態だと、例えば1ピクセルだけフォームを広げてみた場合、パネルと隙間の増分ピクセル数が
小数になっちゃう
Anchorとかのプロパティでは、フォームのリサイズのピクセル数がそのまま各コントロールに影響するの
で、根本的に無理があるね



142:デフォルトの名無しさん
08/10/17 17:47:42
C++Builder6のIDEで質問があります。
ソース内の関数使用箇所から実装部へジャンプする操作(マウス・キーコンビネーションなど)
はないのでしょうか。
MyFunc();
をクリックか何かして
void MyFunc(void)
{
...
}
へジャンプするみたいな感じです。あちこちで調べたんですが、どうしてもわかりません。



143:デフォルトの名無しさん
08/10/17 18:22:16
>>142
右クリック→定義の検索、ではだめなん?

144:デフォルトの名無しさん
08/10/17 22:37:16
142です。
右クリック->定義の検索 だと宣言部(.hの方)にジャンプしますよね?
.cppの方を見たいのです。人の作ったソースを追っかける時にこの機能が無いと不便で仕方ないんです…
それとも何か条件で.hに行ったり.cppに行ったりするのかな?
VC++だと一度ビルドしてクラス情報を生成しないとダメ、みたいなのがあるけど、BCBにもあるんですかね?
一応このプロジェクトはビルドしてEXE作ってるけど…

145:デフォルトの名無しさん
08/10/17 23:54:34
.hに飛ぶのは、.cppの方がすでにビルドされていてバイナリになって
不可視になってる事があるからじゃない?

例えば配布されているライブラリとかそうじゃん。
.cppはいつもCtrl+Fで検索してるけど。

146:デフォルトの名無しさん
08/10/20 10:07:29
test

147:デフォルトの名無しさん
08/10/21 16:15:58
2007でエディタにアウトラインっぽいのがありますがこれOFFにできますか?

148:デフォルトの名無しさん
08/10/21 22:19:58
できない

149:デフォルトの名無しさん
08/10/23 11:56:54
Memo1に60行の乱数を出したんですけど、この60行の配列の平均を取った数字を
Edit1に出したいのですがなかなかどうすればいいんでしょうか・・
どなたかアドバイスお願いします。


150:デフォルトの名無しさん
08/10/23 13:19:28
ヒント
Lines->Strings
StrToInt

151:デフォルトの名無しさん
08/10/23 13:20:52
>>149
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i = 0; i < 60; i++) {
Memo1->Lines->Add(AnsiString(std::rand()));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
double sum = 0.;

for (int i = 0; i < Memo1->Lines->Count; i++)
sum += Memo1->Lines->Strings[i].ToDouble();

Edit1->Text = AnsiString(sum / Memo1->Lines->Count);
}

152:デフォルトの名無しさん
08/10/23 13:30:27
データはコントロールじゃなくてコード内で保持した方がよくね?

std::vector<int> results;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i = 0; i < 60; i++) {
  int value = std::rand();
  results.push_back(value);
  Memo1->Lines->Add(AnsiString(value));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
double sum = 0.;
for(std::vactor<int>::iterator it = results.begin(); it < results.end(); it++)
 sum += *it;
Edit1->Text = AnsiString(sum / result.size());
}

153:デフォルトの名無しさん
08/10/23 16:01:04
》150》151》152 ありがとうございました!おかげさまでなんとかつくり終えることができました

154:デフォルトの名無しさん
08/10/23 16:03:10
そういう安価のつけかたもあんか
いや、あるんか

155:デフォルトの名無しさん
08/10/23 16:14:07
>>153, >>154

さすがにコンパイルエラーになったけど, 150 >> 151 >> 152; ならコンパイル通ったw


156:デフォルトの名無しさん
08/10/23 16:18:52
そう言えばC++Builderの<<、>>演算子のキモい使い方があったような
何に使うんだっけ?

確かビットを立てたり外したりするのに使った記憶が

157:デフォルトの名無しさん
08/10/23 16:27:23
集合型のエミュレーションだね
Set型

158:155
08/10/23 16:29:41
>>156
ヲイヲイ,<< と >> はCの時代からビットシフト演算子だよ。C++になってから >> cout とか別の使い方で
定義されるようになった。>>155だってビットシフトの意味があるからコンパイルが通るだと思う。
150数ビットもシフトしてどうすんの?...なんだけどw

159:155
08/10/23 16:30:30
あぁ,スマソ。そっちの話か。

160:デフォルトの名無しさん
08/10/23 16:34:11
>>157
ああ、それだ。滅多に使わないから忘れかけてた。
Delphiならスマートに書けるのだがC++Builderならムリヤリ感が。

>>158
まあそういう事だ。

161:デフォルトの名無しさん
08/10/23 16:44:00
>>160
普段はオブジェクトインスペクタからいじっちゃうからね
コードでいじる場合はどうしてもヘルプ頼りに

162:デフォルトの名無しさん
08/10/23 16:52:42
そういやオープン配列もだいぶ無茶してたよなあ
TVarRecとか
カッコを二重に書かなければならないのを時々忘れる

163:デフォルトの名無しさん
08/10/23 16:54:48
オープン配列は大抵Formatに使うことが多いから、Format使わずにAnsiString::sprintf()でやってるな

164:デフォルトの名無しさん
08/10/29 11:22:19
すみません教えてください。。。
C++BuilderでVBスクリプト?を使ってSNMPで値の送受信を行いたいのですが
VBのソースは以下の通りです

Dim objSNMP
Set objSNMP = CreateObject("OlePrn.OleSNMP")
objSNMP.Open "192.168.0.40", "public", 2, 1000
Dim myObjectValue
ObjectValue = objSNMP.Get(".1.3.6.1.2.1.1.4.0")
WScript.Echo ObjectValue
objSNMP.Set ".1.3.6.1.2.1.1.4.0", CStr("e-mail:xxx@xxx.xxx tel:xxx-xxxx-xxxx")
Dim myChangedObjectValue
myChangedObjectValue = objSNMP.Get(".1.3.6.1.2.1.1.4.0")
objSNMP.Close()


これをC++Builderではどのような記述になるのでしょうか?
CreateObjectはたぶんこんな感じになると思うのですが
この続きの記述を教えてください。。

Variant cn = Variant::CreateObject("OlePrn.OleSNMP");


165:デフォルトの名無しさん
08/10/30 16:49:46
ブタ共さっさと教えてください

166:デフォルトの名無しさん
08/10/30 16:53:58
Indyでやるだろ、jk。

167:デフォルトの名無しさん
08/10/30 16:58:20
最近の子はマニュアル読んでとりあえずできるかテストしてみようって事しないんだな

168:デフォルトの名無しさん
08/10/30 17:02:53
Indyならフォームにペタっと貼るだけ。

169:デフォルトの名無しさん
08/10/30 18:41:08
知らないならレスしないで下さいよ。ウザくてかなわん

170:デフォルトの名無しさん
08/10/30 19:02:18
その程度ができないのになんでプログラムなんて書いてるの?バカなの?

171:デフォルトの名無しさん
08/10/31 15:32:06
アイコン化されたフォームを元に戻す方法を教えてブタ共よ

172:デフォルトの名無しさん
08/10/31 15:37:40
Application->Restoreでできたわ
ほんとお前らって何の役にも立たないブタだよな・・・

173:デフォルトの名無しさん
08/10/31 16:27:08
役に立たないブタはageます

174:デフォルトの名無しさん
08/11/01 00:31:47
自力でできたということは、自力でやらせようとした人間達の狙いは大成功したということで、
役に立たないどころかすべてが計算通りに進んだということですw

175:デフォルトの名無しさん
08/11/03 20:06:59
csv方式で

656,000,1123,5454
756,000,5454,3455
545,001,6565,4554       6565
545,002,5455,7775   → 5455
223,006,5656,9898 5656
054,004,5554,5554 5554
    ・ ・
    ・           ・
    ・           ・
843,022,6643,4443       6643
565,011,3434,4455 3434
656,000,3343,2432
789,000,5545,6665

こんな感じで配列が並んでいるのですが各数列の2番目数字が000以外のときに
3番目の数字だけを配列として順にMemo1にだしたいのですがどのようにすればよいでしょうか


176:デフォルトの名無しさん
08/11/03 20:10:04
ずれていたので再投稿します
csv方式で

656,000,1123,5454
756,000,5454,3455
545,001,6565,4554       6565
545,002,5455,7775   →   5455
223,006,5656,9898        5656
054,004,5554,5554       5554
    ・              ・
    ・              ・
    ・              ・
843,022,6643,4443       6643
565,011,3434,4455       3434
656,000,3343,2432
789,000,5545,6665

こんな感じで配列が並んでいるのですが各数列の2番目数字が000以外のときに
3番目の数字だけを配列として順にMemo1にだしたいのですがどのようにすればよいでしょうか

177:デフォルトの名無しさん
08/11/03 20:28:15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::ifstream ifs("File1.txt");
std::string str;
AnsiString as;

if (ifs) {
TStringList* Data = new TStringList;
Data->Delimiter = ',';

while (std::getline(ifs, str)) {
Data->DelimitedText = str.c_str();
if (Data->Strings[2] != "000")
Memo1->Lines->Add(Data->Strings[3]);
}

delete Data;
}

178:デフォルトの名無しさん
08/11/03 20:30:24
ごめんこっちで

void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::ifstream ifs("File1.txt");
std::string str;
AnsiString as;

if (ifs) {
TStringList* Data = new TStringList;
Data->Delimiter = ',';

while (std::getline(ifs, str)) {
Data->DelimitedText = str.c_str();
if (Data->Strings[1] != "000")
Memo1->Lines->Add(Data->Strings[2]);
}

delete Data;
}
}

179:デフォルトの名無しさん
08/11/03 20:44:28
AnsiString as;使ってなくね
いらないけどさ

180:デフォルトの名無しさん
08/11/03 20:46:46
>>179
ごめんそうです
削ってくらはい

181:デフォルトの名無しさん
08/11/03 20:56:09
>>177>>178
ありがとうございます!
csv形式のテキストはオープンダイアログから読み込みその中から抽出することはできるのでしょうか

また先ほどの文で
DelimiterとDelimitedTextはTStringListのメンバーではないと言われるのですが
何か宣言文などが必要なのでしょうか。

まだまだ初心者でして;いろいろご迷惑かけてすいません。

182:デフォルトの名無しさん
08/11/03 21:17:26
>>181
>csv形式のテキストはオープンダイアログから読み込みその中から抽出することはできるのでしょうか

できます。
TOpenDialog->Filesに入ります。

>DelimiterとDelimitedTextはTStringListのメンバーではないと言われるのですが
>何か宣言文などが必要なのでしょうか。

えっもしかしてC++Builderのバージョンは5以前ですか?

183:デフォルトの名無しさん
08/11/03 23:14:27
しばらく待ってみましたが返事がないのでDelimiterを使わないバージョンを
書いてみました。
コンマの数や桁数などは決め打ちになってますので必要ならば適宜変更して
ください。

void __fastcall TForm1::Button2Click(TObject *Sender)
{
OpenDialog1->Execute();
std::ifstream ifs(OpenDialog1->FileName.c_str());
std::string str;

if (ifs)
while (std::getline(ifs, str)) {
std::string::size_type pos = str.find(',') + 1;
if (str.substr(pos, 3) != "000") {
pos = str.find(',', pos) + 1;
Memo1->Lines->Add(str.substr(pos, 4).c_str());
}
}
}

184:デフォルトの名無しさん
08/11/04 19:29:47
>>183
返事が遅れてすいません。ありがとうございました!大変感謝しています
こちらのやり方で動きました。c++builderはver5を使っています
あと桁数をコンマの数をかえるとのことなのですが、
桁数を変える場合は5桁表示するならpos 5 にすればよいことはいじっていてわかったのですが
コンマの位置を変える場合どの部分を変えていけばよいのでしょうか・・・
よろしければアドバイスお願いします><

実際の応用テキストではさらに数字が多く6番目数字(コンマ5つ目)が00:00:00(桁数は変化しない)以外の時に
11番目(コンマ10個目)の数字を表示するようにしたいのです。実際に表示したい数字も小数点を含む5.55(桁数は変化しない)などです。


185:デフォルトの名無しさん
08/11/04 20:07:38
>>184
かなり汚いですが一応動くので載せておきます。

コンマの位置を変えるにはfor文の数字をいじればいいですが、
できればコンマn番目から次のコンマもしくは行末までの文字列を
取り出す関数を別に作ってそれを呼び出した方が綺麗に書けると
思います。

void __fastcall TForm1::Button4Click(TObject *Sender)
{
OpenDialog1->Execute();
std::ifstream ifs(OpenDialog1->FileName.c_str());
std::string str;

if (ifs)
while (std::getline(ifs, str)) {
std::string::size_type pos = 0;
for (int i = 0; i < 5; i++) {
if((pos = str.find(',', pos)) == std::string::npos)
goto next;
pos++;
}

次に続く

186:デフォルトの名無しさん
08/11/04 20:08:38
std::string::size_type pos2 = str.find(',', pos) + 1;
if (str.substr(pos, pos2 - pos - 1) != "00:00:00") {
pos = pos2;
for (int i = 0; i < 3; i++) {
if((pos = str.find(',', pos)) == std::string::npos)
goto next;
pos++;
}
pos2 = str.find(',', pos);
if (pos2 == std::string::npos)
pos2 = pos;
else
pos2++;
Memo1->Lines->Add(str.substr(pos2, 4).c_str());
}
next:;
}
}

要するにTStrings::operator[] の機能を自前で書けばすっきりするはずです。

187:デフォルトの名無しさん
08/11/04 20:21:50
public:
__property AnsiString Cells [int rows] [int cols]= {read=GetCell, write=SetCell};

こんなメンバ持たせたCSVクラス作って使ってるなぁ

188:デフォルトの名無しさん
08/11/04 20:29:44
>>187
BCBはDelphiとのインターフェースが割合簡単に取れるから、
Delphiで書かれたcsvパッケージでも入れたら楽でしょうね。

189:デフォルトの名無しさん
08/11/04 20:31:03
>>185>>186
ありがとうございます。重ね重ねすいません;;
if (str.substr(pos, pos2 - pos - 1) != "00:00:00") の部分がよくわからなくて
6番目の数字が00:00:00場合読み込まないようにするのではなく一つ増えて00:00:00:00の場合に読み込まないようにするには
どのように変更したらいいのでしょうか・・
実際11番目の数字(6.44や9.88など桁数は変らず)を表示させるときは6番目の数字が00:00:00:00以外のとき(00:00:00:45や00:00:05:35など)でこちらも桁数については変りません。



190:デフォルトの名無しさん
08/11/04 20:33:23
>>189
今回のプログラムは00:00:00の桁数については決め打ちしていませんので
"00:00:00"を"00:00:00:00"に変更すればいいです。

191:デフォルトの名無しさん
08/11/04 20:56:52
>>190
わざわざありがとうございます;;どうやら勘違いしていたようでした。
実際の00:00:00:00のテキストのほうではコンマごとにわかりやすいように半角スペースがついており
半角スペース5列数字、半角スペース1列数字、半角スペース1列数字、半角スペース3列数字・・・
などのように書かれており上記のプログラムで半角スペースも認識されるため正しい数字が出せていないようでした。
(半角スペースを全部埋めていった場合正しい数字がでました。)
半角スペースを含んだ上で数値を出したいのですがこういう場合どのようにすればいいのでしょうか。

192:デフォルトの名無しさん
08/11/04 21:03:36
>>191
これ以上後出し条件はやめてください。
どこかのロダにそのテキストをうpしていただけませんか。

193:デフォルトの名無しさん
08/11/04 21:06:59
つーかもうC++Builderの話題じゃなくなってるし
TStringsListのバージョンは古くて使えないしだから
C++相談室にでも書いてみたら?

194:デフォルトの名無しさん
08/11/04 21:08:06
まぁ・・・ね
あなた専用のサポートスレではないんですよって感じですかね

195:デフォルトの名無しさん
08/11/04 21:13:55
例えサポートスレだとしてもこんな感じで次々に条件を変えられたら
イラッと来ると思うけどね

196:デフォルトの名無しさん
08/11/04 21:18:54
おれは、CSV文字列1行を
TStringListに分解する関数を作って使ってる。
この関数1個あれば、CSVを全然意識せずに文字列として扱える。


197:デフォルトの名無しさん
08/11/04 21:25:44
全然関係ない話だけど俺はBCB3から2009まで買ってきたなあ
最初の頃は全然使い方が分からなくて、その頃に丁度Delphi6
のフリー版が出たので、Delphi本をBCBに翻訳しながら打ち込んで
動かす事で覚えたっけ。

お陰様でBCB6からは自由自在に使えるようになった。参考書も
BCB用が皆無の頃でDelphi本を買って参考にしたっけ。

198:デフォルトの名無しさん
08/11/04 21:31:37
せっかく教えて頂いたのに重ね重ね申し訳ありませんでした・・・;;
次からはもう少し慎重に確認していくように注意します。
ここから先は自己解決していきたいと思います。
何度も教えていただきありがとうございました!!

199:デフォルトの名無しさん
08/11/04 21:32:21
VCLがObject Pascalで書かれているのでそれをC++で動かすために
少しの言語拡張とC++のクラスの柔軟性とマクロの多用で対応して
いるが、今見ても頭がおかしい人が設計したんじゃないかと思う事がある

200:デフォルトの名無しさん
08/11/05 09:16:56
>>196
CommaTextというプロパティがあってね・・・
1例だけ特殊対応しなければいけないけど大抵はこのプロパティだけで大丈夫だな

201:デフォルトの名無しさん
08/11/05 12:43:08
CommaTextでは正しく解釈できない場合があるし
CSVの記述が正確ではない場合
悲惨な結果をもたらすことになる。
趣味なら笑って済ますことも出来るだろうが
業務用プログラムでは、
とてもじゃないが、CommaTextは使えない。


202:デフォルトの名無しさん
08/11/05 13:39:21
>>200
それスペースまで区切りとみなしちゃうだろ?
""で囲ってあればいいけどそうでないのってどうしてる?

203:デフォルトの名無しさん
08/11/05 13:41:32
CSVのラインを解釈してバラして保持するクラスを自作すれば無問題。
その後、TStringList系は使いまくってるけど。

204:203
08/11/05 13:42:27
さらにそのCSVの1ラインを解釈して保持するクラスに、TStringListとの入出力を持たせればおk。

205:デフォルトの名無しさん
08/11/05 13:49:10
正しく解釈出来ないのが"で括られてない項目のスペースだな
>>201CSVの記述が正確では無かったら何やっても悲惨になるんだがw
俺はStringListに分解したあとにチェック入れてる

206:デフォルトの名無しさん
08/11/05 13:57:34
TStringListのDelimiterとDelimitedTextってC++Builder5にないけど
これって6から?


207:デフォルトの名無しさん
08/11/05 13:59:24
>>206
そう
俺はBCB6から本格的にBCBを使い出したからBCB5以前の
奴とは話が時々合わず苦労する

208:デフォルトの名無しさん
08/11/05 14:01:56
5から6へのバージョンうpは安定してるし、
Indy増えるし、やっぱそれに関しては無条件バージョンうpじゃね?


6から200Xへはやったことないガクブル

209:デフォルトの名無しさん
08/11/05 14:24:24
2009使ってるけどこれどう見ても2006や2007と大差ないんだけど
Delphi + BCB で3万円が妥当な価格だと思う
エンバカは高く設定し過ぎ

210:デフォルトの名無しさん
08/11/05 16:24:57
バカだから仕方ない

211:デフォルトの名無しさん
08/11/09 20:51:23
2009出たけど配布用の仕組みって入ってる?JavaWebStartみたいな。
業務アプリはネイティブで作ると楽だけど配布がウザすぎてWebにしたくなる。

212:デフォルトの名無しさん
08/11/11 17:24:47
VCLのラジオボタンをCLXのラジオボタンと同じ動きにする方法ってありませんか?

CLXアプリをVCLアプリに書き換えてるんですが、CLXのラジオボタンがスペーキーを押すまでチェックされないみたいなので…

環境はCLX→6.0 VCL→2007です

213:デフォルトの名無しさん
08/11/11 19:38:51
>>210
バカに貢俺らって、バカ馬鹿だな

214:デフォルトの名無しさん
08/11/11 20:12:42
だがそれがいい

215:デフォルトの名無しさん
08/11/16 15:27:45
A1とA2にはTStringlistで500行の数字の配列が格納されています。
そのA1とA2の配列の計算をしたいのですが

AnsiString k1;

for(int j=0;j<500;j++){
k1 = A1->Strings[j] + A2->Strings[j];
Memo1->Lines->Add(k1);
}
こんな形でやってみたところA1とA2の同じ行が足し算されず
メモにはA1とA2の同じ行の数字が並んで表示されているだけなの
ですがこれでは配列の足し算はできていないのでしょうか?

どなたかよければアドバイスお願いします。


216:デフォルトの名無しさん
08/11/16 15:34:11
足し算できてる。文字列の足し算が。
C++のデータには「型」があるんよ。数値とか文字とか。
StrToIntとかで数値に変換してから足せ。


217:デフォルトの名無しさん
08/11/16 16:13:42
返信ありがとうございます。
型で変換してみたのですが少数を含んだ数値の配列で
strtodで

AnsiString k1;

for(int j=0;j<500;j++){
k1 = strtod(A1->Strings[j]) + strtod(A2->Strings[j]);
Memo1->Lines->Add(k1);
}

と書いたときTStringlistに格納しているものなので、AnsiStringに一致するものが見つからないと出て
しまいます。どのような変換で書いていけばよいのでしょうか

各配列の数値は 197.543545 や54.47673423のような数値の500個の配列です。

218:デフォルトの名無しさん
08/11/16 16:46:25
A1->Strings[i].ToStrInt()

219:デフォルトの名無しさん
08/11/16 16:48:05
ちごた

A1->Strings[j].ToDouble()

220:デフォルトの名無しさん
08/11/16 16:59:45
AnsiStringで受け取る必要ないのぜ。

221:デフォルトの名無しさん
08/11/16 17:04:48
>>219
ありがとうございます。
うまく変換して計算することができました。

222:デフォルトの名無しさん
08/11/16 17:24:36
2007/2009はAnsiStringTでヘルプ探さないと見つからないな

223:デフォルトの名無しさん
08/11/17 15:37:38
WINDOWS95で動くのはどのバージョンまでですか?

224:デフォルトの名無しさん
08/11/17 16:26:55
とりあえず、BCB6は動く。

225:デフォルトの名無しさん
08/11/17 16:45:24
BCB6はとりあえず動くね。

226:デフォルトの名無しさん
08/11/17 16:57:01
ただ、ヘルプ周りはWindows2000以降じゃないと‥‥

227:デフォルトの名無しさん
08/11/17 17:07:16
逆に、ヘルプ周りはWindows2000以降じゃないとアレ

228:デフォルトの名無しさん
08/11/18 02:53:53
VistaにTurbo C++ Explorerをインストールしましたが、起動時に以下のエラーが表示されて起動できません。
どのようにすれば良いのでしょうか。

モジュール 'rtl100.bpl' のアドレス 51F515BE でアドレス 00000008 に対する読み込み違反がおきました。

EPackageRegistrationException がモジュール coreide100.bpl の 000DCB21 で発生しました。
登録プロシージャ Cppproject.IDERegister (パッケージ c:\program files\borland\bds\4.0\Bin\bcdide100.pbl) が例外クラス EOleSysError を生成しました: クラスが登録されていません, ClassID: {F8FEDD39-E3CE-4B8D-A657-9CA24686881F}.

モジュール 'coreide100.bpl' のアドレス 20BA0DAF でアドレス 00000004 に対する読み込み違反がおきました。

モジュール 'designide100.bpl' のアドレス 20EE71DE でアドレス 00000000 に対する読み込み違反がおきました。

Borland® Developer Studio for Windows は動作を停止しました
問題が発生したため、プログラムが正しく動作しなくなりました。このプログラムを閉じてください。

229:デフォルトの名無しさん
08/11/18 14:04:08
Resolving the EPackageRegistrationException error in BDS 2006 on Windows Vista
URLリンク(support.codegear.com)


230:デフォルトの名無しさん
08/11/18 22:52:25
レスありがとうございます。
教えて頂いたリンク先にあった内容や、
URLリンク(support.codegear.com)にあった内容を試したのですが、全く状況に変化が見られませんでした…
どうも無理そうなので、とりあえずVista正式対応を待つことにします。

231:デフォルトの名無しさん
08/11/18 23:08:46
素直に2007か2009を買うしかないね。Turbo Explorer?正式対応?残念ながら無理でしょ…。

232:デフォルトの名無しさん
08/11/25 13:49:41
TBitmapからTIconのハンドルを取得する方法を教えてください

233:何をしたいのかを具体的に書けば有効な回答が得られるのでは?
08/11/25 22:38:53
できますん。

234:デフォルトの名無しさん
08/12/03 11:42:25
ShowHint=trueにするとコントロールにカーソルがくると自動でヒントが表示されますが
指定コントロールのヒントを手動で表示される方法を教えてください

235:デフォルトの名無しさん
08/12/03 22:57:47
そのコントロールにCM_HINTSHOWをPerformすればいいみたいだけど、パラメータが問題かな?

236:デフォルトの名無しさん
08/12/04 10:40:48
>>235
なるほど。
まずはちょっと試してみますありがとう

237:デフォルトの名無しさん
08/12/04 22:47:38
Turbo C++ ExploerのdbExpressって、リモートでFirebird2.x接続は無理?
ローカルはOK、リモートでもコネクションは繋がってテーブル名は見える。
が、テーブルを開こうとするとエラー65535がでて繋がらない。


238:デフォルトの名無しさん
08/12/08 17:23:25
メモ1に



















とこのような感じで0と1が何千行と出されているのですがメモの上から順番にforで回して
1が出た場合その行数とそこから1がどれだけ続いたかカウントしていくプログラムを作成したいのですが
どういったようにつくっていけばよいのでしょうか?

239:デフォルトの名無しさん
08/12/08 17:26:46
普通に作れば良いと思うのだが、
先ず何が問題?

・C++文法
・ファイル操作
・ロジックの書き方

240:デフォルトの名無しさん
08/12/08 17:34:38
>>238
それってMemoでなくても配列の中に1がいくつ続いているかを
数えるのと同じ問題だよね

241:デフォルトの名無しさん
08/12/08 18:05:48
>>239-240
お前等が馬鹿すぎてワロタ
知らないならレスするなよクズ共

>>238は普通にTMemoでどうやって書くかを聞いてんだろw

Memo->Lines->Count
Memo->Lines->Strings[i]


242:デフォルトの名無しさん
08/12/08 18:10:12
>>241
??

243:デフォルトの名無しさん
08/12/08 18:12:35
ここはクズのすくつでつねw

244:デフォルトの名無しさん
08/12/08 18:18:49
クズって言う奴はクズじゃないんだよ

245:デフォルトの名無しさん
08/12/08 22:00:28
>>238 は
何がわからないのかを書いていない。
基本的に質問の仕方を知らない。
きっと何がわからないのかさえわからないのだろう。
そんな人は、たぶん論理的に組み上げていく
プログラミングということはムリなのではないかと思う。
丸投げで全部教えてもらいたかったら
C/C++の宿題を片付けます 119代目
スレリンク(tech板)
こっちで聞くべき


246:デフォルトの名無しさん
08/12/09 10:29:15
>>245
答え方がわからないならレスしないで下さい。ウザイだけです。

247:デフォルトの名無しさん
08/12/09 11:07:58
>>246
おいばかやめろ
Win32APIスレから出てこないでください

248:デフォルトの名無しさん
08/12/09 15:57:06
ここにまで屑が侵食してきたか・・・

249:デフォルトの名無しさん
08/12/09 23:48:23
>>238
今C++Builder動く環境にないので疑似コードで。

変数start_posに-1を代入。(-1は「カウントしてない」というマーキング)
変数iを使って、メモ1の最初から最後までループを回す。{
 start_posの値が-1で、{
  メモ1の行iの内容が"1"なら、{
   start_posにiの値を代入。
  }
 }
 そうじゃなくて、{
  メモ1の行iの内容が"0"なら、{
   start_posの値が"1"の開始位置を指しているので、これを表示。
   そして(i-start_pos)の計算結果が"1"の続いた個数なので、これも表示。
   次のカウントのために、start_posに-1を代入する。
  }
 }
}

連続したデータを処理するときはいろんなやり方があるけど、
・データの変わり目に注目する。("1"の始まりと、"1"の終わり="0"の始まり)
・変わり目でプログラムで行う処理を切り替える。(カウント中と、結果表示&カウント終了)
とするのが一つの方法。


250:デフォルトの名無しさん
08/12/14 08:53:26
日本語プログラミングですねわかります

251:デフォルトの名無しさん
08/12/15 00:47:49
アカデミック版ってインストール時になんか問題ある?


252:デフォルトの名無しさん
08/12/15 00:51:00
インスコ時はないんじゃない?
ちゃんとした店なら買う時に学生証見せてなんか書かなきゃいけないと思うけど

253:デフォルトの名無しさん
08/12/15 14:15:38
昔の学割版には、作ったプログラムは有償無償関係なく公開禁止っていうキツいルールがあったけど
あれ今もあるのかな

254:デフォルトの名無しさん
08/12/15 17:20:08
Delphi.Personalityってなんですか?

dclusr.dpkを読み込もうとすると、これがないって
えらーになるんですが、

Delphiをインストールしないとダメですか?

255:デフォルトの名無しさん
08/12/15 17:22:20
どれ?

256:デフォルトの名無しさん
08/12/18 14:45:24
Panelとかコントロールの標準カーソルを指定カーソルファイル(*.cur)に変更する方法を教えてください

257:デフォルトの名無しさん
08/12/18 14:51:33
>>256
TScreen::Cursors

258:デフォルトの名無しさん
08/12/18 15:01:00
>>257
そこにLoadCursorでぶち込むんですよね?
それってリソースに予めないとダメですよね?

259:デフォルトの名無しさん
08/12/18 15:07:37
LoadCursorFromFileというAPIがあってですね‥‥

260:デフォルトの名無しさん
08/12/18 15:09:12
259補足。
ただし、現在はLoadCursorやLoadCursorFromFileは後方互換性のためのAPIで、LoadImageが推奨されてる。

261:デフォルトの名無しさん
08/12/18 15:10:58
>>259
そんなのがあったんですかあああああああああああああああ!!
ああ、おかげで思った通りのアレができますた!
ありがとうございます。

262:デフォルトの名無しさん
08/12/18 15:14:15
>>260
補足までありがとう。
LoadImageもぐぐってみます。

263:デフォルトの名無しさん
08/12/19 22:03:33
BCB6から2009への乗り換えがスゲー苦労する
何か良い方法ないですか?

264:デフォルトの名無しさん
08/12/19 23:51:11
VC++よりBCBを使うメリットってなんですか?
逆なら枚挙に暇が無いが・・・

265:デフォルトの名無しさん
08/12/20 00:08:04
>264
RADなところかな。

266:デフォルトの名無しさん
08/12/20 02:09:12
URLリンク(lupus.is.kochi-u.ac.jp)
ここにあるソースをコンパイルしようとしたのですが、
上手くいかないので助言お願いします。

コンパイルしたいのは下の3つです。
graph.h
planar.h
planarq.c

コンパイルの環境はBCC55でCPADからビルドしてます。
ソースに問題があるのか、
環境が悪いのかだけでも分かれば教えてください。

267:デフォルトの名無しさん
08/12/20 02:16:36
こっちへどうぞ
スレリンク(tech板)

でも何がどういう風にうまくいかないのかをきちんと書かないと誰も答えてくれないと思うが。

268:デフォルトの名無しさん
08/12/20 14:12:37
VC++MFCでちょっと凝ったUIを作成しようとすると
地獄のようにコードを記述する必要がある。
Builderなら部品をちょこちょこと置いて
コードをちょこっと記述すればエエ。
工数が1/10くらいになるわ。


269:デフォルトの名無しさん
08/12/22 17:23:26
>263
BCB6から2007なら簡単です。
2007で「BCB6のプロジェクトファイル(*.bpr)」を読み込んで
2007のプロジェクトファイル(*.cbproj)に書き出して、メイクするだけでOKである。

俺も2009のユニコード関係の処理で困っている。



270:デフォルトの名無しさん
08/12/23 17:02:36
どうして、2009で「ユニコードライブラリを使う」をVSのように、
プロジェクト・オプションにしなかったんだろう。

271:デフォルトの名無しさん
08/12/23 22:02:52
>>263
自分が苦労したのは、AnsiString::c_strをAnsiString::t_strにしたりとか、VCL関数に渡す文字列リテラルをワイド文字列にしたくらいかな。
この辺は、Rubyでスクリプトを書いて何とかした。
TRegIniFileやTIniFileがほとんどだったから、ReadStringとかが見つかったらワイド文字列に変換するって感じ。

>>270
多分、両方メンテしなければならないからかな。
プロジェクトオプションで分けて欲しかったのは同意。

272:デフォルトの名無しさん
08/12/25 13:55:44
PanelのCaptionに書いてる文字がパネルに収まってるかどうかを判断する方法を教えてください

273:デフォルトの名無しさん
08/12/25 16:12:29
>>272
Panelのサイズを調べて、Bevelとかの幅をそこから引いて、実際の表示領域のサイズを出す
PanelのFontでCaptionに設定してある文字列のサイズを調べる
両者を比べる


274:デフォルトの名無しさん
08/12/25 16:21:11
>>273
文字列のサイズはどうやって調べればいいんですか?

275:デフォルトの名無しさん
08/12/25 16:24:17
Win32APIで、指定文字を書いた場合のRectをとれたはずだが?

276:デフォルトの名無しさん
08/12/25 16:26:16
>>275
知らないならレスしないで下さい。ウザイだけです。

277:デフォルトの名無しさん
08/12/25 16:29:10
>>276
正解をレスしようと思ったけどやめたw
ヒント:Win32APIの文字列描画系APIをパラメータを含めて片っ端から調べろ。

278:デフォルトの名無しさん
08/12/25 16:39:08
>知らないならレスしないで下さい。ウザイだけです。
あれれ?
なんだただのでじゃヴか

279:デフォルトの名無しさん
08/12/25 17:12:10
>知らないならレスしないで下さい。ウザイだけです。

これって貼り付いてるアンチだとオモ。
質問書いたらこれ書かれたことある。
アンチは加齢にスルーw

280:273
08/12/25 17:28:32
>>274
TCanvasに、自分(TCanvas)に設定されているTFontを使って、指定した
文字列を描画する際のサイズを調べるメソッドがある(と思った)

>>279
というか、そのコピペはプログラミング系のスレとかでよく見る
アンチ以前の、単なる茶々入れも多いよ。カレーにするーには同意

281:デフォルトの名無しさん
08/12/25 17:33:32
>>280
あった。
TextExtentが領域、TextHeightが高さ、TextWidthが幅を返すね。

282:デフォルトの名無しさん
08/12/25 18:15:13
そういや、なんでVCLリファレンスってTRectとTPointがRECT、POINTの派生ってこと書かれてないんだろ。
Types.hppだと struct TRect : public RECT ってなってるし、派生って事知らないといろいろ面倒だと思うんだが‥‥


283:デフォルトの名無しさん
08/12/25 22:23:08
>>279
それはWinAPIスレで流行ってますよ
是非いらっしゃってください
お待ちしております

284:デフォルトの名無しさん
08/12/30 17:07:05
double A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15に値が入っており
一つのMemoに全てを書き出していきたいのですが
c言語と同じく
printf("%d,%d,%d,%d,%d\n",A1,A2,A3,A4,A5);
printf("%d,%d,%d,%d,%d\n",B1,B2,B3,B4,B5);
printf("%d,%d,%d,%d,%d\n",C1,C2,C3,C4,C5);
このような感じで書き出してCSV形式に3行5列の形に一つのmemoに書き出す方法はないでしょうか?

使用しているのはc++builder5です。
よろしくお願いします。

285:デフォルトの名無しさん
08/12/30 17:28:00
AnsiString().sprintf() って使えるはずだろ

286:デフォルトの名無しさん
08/12/30 18:13:30
わかりにくいかな

Memo1->Lines->Add(AnsiString().sprintf("%d,%d,%d,%d,%d\n",A1,A2,A3,A4,A5));

のように書ける

287:デフォルトの名無しさん
08/12/30 18:57:46
doubleなのに%d指定なのは構わないのかな。まあいいけど
でも”c言語と同じくmemoに書き出す”というのがイミフメ

あとC言語系のプログラマーなら、アルファベットの大文字小文字はしっかり使い分ける
癖は付けた方がいいとおも



288:デフォルトの名無しさん
08/12/30 18:58:56
あごめんそうだな

コピペしただけだから"\n"まで入ってしまってたし

"%f"な

289:デフォルトの名無しさん
08/12/30 19:09:39
>>285>>286ありがとうございます。
方法を変えてやってみたらうまくCSV形式に表示はされたのですが、
引き算の値がエクセルで計算した結果と明らかに違う数値になってMemo5に表示されます。(-1.59444444444503E-02とか)
Memo1,2,3,4には0.035083333などの少数の値が5行入っています。

AnsiString H1,H2,H3;

for(int I = 0; I < 5; I++){

H1 = Memo1->Lines->Strings[I] - Memo4->Lines->Strings[I];
H2 = Memo2->Lines->Strings[I] - Memo4->Lines->Strings[I];
H3 = Memo3->Lines->Strings[I] - Memo4->Lines->Strings[I];

Memo5->Lines->Add(AnsiString().sprintf("%s,%s,%s",H1,H2,H3));
}

どうすれば普通の数値になるかアドバイスお願いします。

290:289
08/12/30 21:22:12
解決しました。

291:デフォルトの名無しさん
08/12/31 00:52:22
馬鹿だろ

292:デフォルトの名無しさん
09/01/08 17:26:06
2007って64ビットXPに対応してる?

293:デフォルトの名無しさん
09/01/10 14:33:32
いまだにBCB6なんですが2009買うメリットありますか
既存コンポーネントも強化と書かれてますがどんなもんでしょう
2007くらいまでは案内の手紙も来てたのになー

294:デフォルトの名無しさん
09/01/10 15:50:46
VC++2008expressでいい

295:デフォルトの名無しさん
09/01/10 21:08:24
BCBスレでVCを薦めるとな

296:デフォルトの名無しさん
09/01/10 21:40:55
struct T {
 typedef void (T::*fn_t)();
 void f();
 int test(fn_t fn) {
  do { } while (0); // inline不可にしないと再現しない
  if (fn == &T::f) {
   return 1;
  }
  return 0;
 }
};

BCB6だと(bcc5.6.4)このコードで落ちるんだが
新しいのだと大丈夫なのかな。
(ifの行を
const fn_t cmp = &T::f;
if (fn == cmp) {
に変えれば落ちない)
まあメンバ関数へのポインタを変数と直接比較なんて普通やらんが。

他にも落ちる時があるんだが
こっちはどういう状態で再現するのかわからないし
そもそもコンパイルエラー時だけなのでなんとかなるんだけど。

297:デフォルトの名無しさん
09/01/11 00:30:35
>>296
BCC6.1.0だと落ちないね

298:デフォルトの名無しさん
09/01/14 20:15:40
CodeGear RAD Studio 2007 を使っております。

VC2005 で作られたコンソールアプリをコンパイルしようとしたのですが、
wcha_t と _stprintf_s を使っているところが通りません。どうすればよいでしょうか?



299:デフォルトの名無しさん
09/01/14 20:57:44
wchar_t だろ。
_stprintf_sはしらないけど、C言語標準の関数で置き換えれば?
たとえばだ。
#define   _stprintf_s(・・・)   sprintf(・・・)
など。

300:デフォルトの名無しさん
09/01/14 21:54:40
可変個引数をそれで置き換えるのはきつくないか。
こんな感じじゃないと。

#ifdef _UNICODE
typedef wchar_t TCHAR;
#define _vstprintf vswprintf
#else
typedef char TCHAR;
#define _vstprintf vsprintf
#endif

int _stprintf_s(const TCHAR* buf, size_t /* ignore */, const TCHAR* format, ...) {
 va_list args;
 va_start(args, format);
 int ret = _vstprintf(buf, format, args);
 va_end(args);
 return ret;
}

301:298
09/01/14 22:42:27
>>299 さん、>>300 さん、お答えありがとうございます。

ここでVCの話をするとおかしくなるとは思いますが、
VCでしたら _stprintf と書いておき

プロジェクトオプションで...
マルチバイトキャラセット(MBCS)を選べば、
_stprintf は sprintf に置き換えられ、

ユニコードキャラセット(UNICODE)を選べば
_stprintf_s は swprintf に置き換えられるのですが、

CodeGear RAD Studio 2007 (C++Builder) には、
こういうマクロ定義はされていないのでしょうか。
こういった作業はすべてユーザーにゆだねられているのでしょうか?

302:デフォルトの名無しさん
09/01/15 11:39:30
>>301
tchar.hインクルードしてる?

303:デフォルトの名無しさん
09/01/15 16:50:00
DirectShowを使うのにstrmiids.libが必要なんですが
プラットフォームSDK付属のだとリンクエラーになります。
B++Builder用はどこにありますか?

304:デフォルトの名無しさん
09/01/15 16:53:26
>>303
URLリンク(www.clootie.ru)
これとかは?
使ったこと無いからわからないけど

305:デフォルトの名無しさん
09/01/15 16:55:47
>>304
ありがとうございます。
このサイトにしっかりとありました(;´Д`)
URLリンク(www.clootie.ru)

306:デフォルトの名無しさん
09/01/20 20:53:45
C++ Builder 6 Update

C++Builder 6 Enterprise
fURLリンク(ftpd.codegear.com)
C++Builder 6 Professional
fURLリンク(ftpd.codegear.com)
C++Builder 6 Personal
fURLリンク(ftpd.codegear.com)
Readme
fURLリンク(ftpd.codegear.com)


307:デフォルトの名無しさん
09/01/22 15:31:26
DIBをTBitmapに変換する方法を教えてくださいい

308:デフォルトの名無しさん
09/01/22 17:40:38
>>307
そのDIBが

もし単なる配列なら
・TBitmap::ScanLineでアドレスを取得して、自分で一行ずつDIB→TBitmapへコピー
・StretchDIBits()を使ってDIB→TBitmapへ転送

もしDIBSectionみたいにHDCが利用できるなら
・BitBlt()やStretchBlt()でDIB→TBitmapへ転送

パレット付き画像だとちょっと手間が増える。

309:デフォルトの名無しさん
09/02/03 19:52:26
TImageListのn番目の画像をTImageに表示する方法を教えてください

310:デフォルトの名無しさん
09/02/06 15:52:23
C++Builder2007って64bitのXPに対応してる?
普通に動作はするんだけど64bitアプリ作れますか?

311:デフォルトの名無しさん
09/02/06 18:40:07


312:デフォルトの名無しさん
09/02/07 10:32:46
C++Builder2010をお待ちください> 64bit

313:デフォルトの名無しさん
09/02/07 22:14:31
待っている間に Qt Creator で御機嫌 64bit 開発できるようになってたりして

314:デフォルトの名無しさん
09/02/09 11:10:38
a

315:デフォルトの名無しさん
09/02/10 12:55:23
ListViewの行入れ替えをしたくて以下の関数を作ったんですが
BCB5ではうまく行ってるのですがBCB1でやるとコンパイルエラーがでます
void ListViewExchange( TListItems *tListItems, const int iIndex1, const int iIndex2 )
{
 TListItem *listitem = new TListItem( tListItems );
 listitem->Assign( (TListItem *)tListItems->Item[iIndex1] );
 tListItems->Item[iIndex1] = tListItems->Item[iIndex2];
 tListItems->Item[iIndex2] = listitem;
 delete listitem;
}
エラー内容はAssignにアクセスできないって事なんですが
BCB1で行入れ替えする時にいい方法があったら教えてください。

316:デフォルトの名無しさん
09/02/10 12:58:20
ヒント: TListViewの実態はWindozの標準コントロールで昔は無かった

317:デフォルトの名無しさん
09/02/10 13:05:30
そんなヒントいらねえよカス
知らないならレスするなクズ

318:デフォルトの名無しさん
09/02/10 20:04:02
マルチスレッドに対応した高速なJPEGデコーダのライブラリはありませんか?


319:デフォルトの名無しさん
09/02/11 00:39:57
いま、C++Builder5 から C++Builder2009 に移行中なんだけど、
どうしてもわからないところがある。

1.XP Style の見た目
プロジェクトを新規で立ち上げると、XP のスタイルになるんだけど、
古いプロジェクトを読み込むとどうしても出来ない。
TXPMan あたりなのかなぁ、と思うんだけど、良くわからん。

2.リンク時に VCLJPG.BPI がないというエラーがでる
普通にコンパイルするだけでこれが見つからないというエラーがでる。
検索をかけるとどうやら無くなったらしいけど、特に Jpeg を使っていない
ようなプロジェクトでも発生する。

3.コンポーネントのインストール
以前作ったコンポーネントをインストールするやりかたがイマイチわからない。

3.はがんばれば解決出来そうだけど、1と2、特に2はちょっと解決できそうにない。
解決方法をご存じの方がいたら、ぜひ教えてください。

320:デフォルトの名無しさん
09/02/11 01:46:24
1は解決しました。

プロジェクトオプション
 ↓
アプリケーション
 ↓
ランタイムテーマを有効にする

ですね。
厨な感じでスマン・・・。

321:デフォルトの名無しさん
09/02/11 21:41:33
319だけど、3.も一応解決した。コンポーネントはもう一回作り直す必要があるみたい。
コンポーネント自体はコードのみで動くからそんなに大変ではないけれど、面倒と言えば面倒。
イベントの引数などが変わってるから、殆どの場合、書き直す必要があるから仕方がないのかもしれない。

ただし、注意点があって、コンポーネントのインストール、削除、を繰り返してると、
レジストリにゴミが残る。これが残ってると、一般保護違反が起きてコンポーネントのインストールが出来なくなる。
その場合には、レジストリエディタでコンポーネントの名前で検索、その項目を削除してやる必要がある。

2はまだ試してないけど、プロジェクトでリンクしているライブラリをチェックし直してみようと思ってる。

こんどは、

[BCC32 エラー] systvar.h(198): E2316 'data' は 'WideString' のメンバではない
[BCC32 エラー] systvar.h(327): E2316 'data' は 'WideString' のメンバではない

というエラーが出るようになった。文字列周りはかなり変わってるから、バグが潜んでるのかも知れない。

322:デフォルトの名無しさん
09/02/17 15:01:24
プログラム初心者です。

C++Builder2006でAPIを使ったアプリケーションを作っています。
信号入力待ちになるAPI関数を使うと信号入力があるまでアプリケーションが固まってしまい
終了のXも受け付けない状態になります。(信号入力があると動き出します)
固まらないようにプログラムを作るにはどうすれば良いのでしょう?

お願いします。


323:デフォルトの名無しさん
09/02/17 15:05:50
信号入力待ちとは何ぞや?

324:デフォルトの名無しさん
09/02/17 15:06:25
WaitForSingleなんちゃらとか?
それかスレッド

325:デフォルトの名無しさん
09/02/17 15:07:39
ヒント: 正しいアイドルループ(Application->ProcessMessages()) もしくは 別スレッド

326:デフォルトの名無しさん
09/02/17 15:40:12
>>325
いや関数から抜けてないんだろ。
それなのにProcessMessagesとか馬鹿ならレスするなよクズ

327:322
09/02/17 15:50:38
API関数はwinsockのaccept()です。

別スレッドでやってみます。
スレッドは使ったことがないので何かあったらまたお願いします。m(__)m


328:デフォルトの名無しさん
09/02/17 17:08:41
これじゃね?

>winsock2でaccept()を中断する
URLリンク(memolet.blog22.fc2.com)

329:デフォルトの名無しさん
09/02/18 11:22:07
>>Delスレ954
if (typeid(E) == typeid(EInOutError)) {
}

330:デフォルトの名無しさん
09/02/18 11:27:46
ちなみに、この比較はDelphi形式のクラスでのみ有効。
(typeid自体はC++標準だけど、本来はキャスト元の型は取れない。C++BuilderのDelphiクラスサポート用の拡張機能に依存)

331:デフォルトの名無しさん
09/02/19 06:45:13
InheritsFromでいいんでない?

332:デフォルトの名無しさん
09/02/27 02:27:10
C++Builder6のTServerSocketを使ったことある方教えてください。
フォームに張り付けた一つのTServerSocketを非同期設定で
特定ポートにてオープンし、最大100クライアント接続される
ハブ的なアプリケーションを作っています。

OnConnect毎にユニークなCustomWinSocketが落ちてきて、
それをTThreadのインスタンスへ渡し、受信はスレッドへのイベント通知、
送信はスレッドの任意タイミングという設計です。

ソケットとスレッドが1:1になるイメージで、1伝文最大100バイト、
高負荷時には600伝文/s程のやりとりなのですが、
マルチコア環境で動作させると高負荷時の受信ラッシュで
コンポーネントがお亡くなりになる現象が発生してしまいます。

各コネクションが同時に送信すると、75/100のソケットが受信イベントを受け取りますが、
以降待てど暮らせどイベントが発生しない(OnErrorでさえ!)という状況です。

WireSharkで見ると全てのコネクションでデータのやり取りが完遂し、
サーバも受信数分ACKをキチンと返しているのですが、
何故か上に上がってこない…

シングルコア上では今のところ起きていないので、
マルチコア特有の問題なのかな、と勘繰っております。
でもI/O周りは排他処理されていないわけないとも思えますし・・・
コンポーネントのマルチコア対応状況の情報があれば教えていただけませんでしょうか。
よろしくお願いします。

333:デフォルトの名無しさん
09/03/01 10:03:57
>>332
TCriticalSectionが必要なんじゃない?


334:デフォルトの名無しさん
09/03/02 09:14:14
>TCriticalSection

Crytical Section ってVCLラップされてたんだ。知らなかった。
まさかMutexはラップされてないおね?

335:デフォルトの名無しさん
09/03/02 12:39:04
C++Builder2009でFindFirstの再帰処理でファイル一覧を取りたいんですけど
Debug::Heap Block at xxxx とか Invalid address xxxが出る。
何故だろう?(BCB5では問題なし)

誰か助けて....


336:デフォルトの名無しさん
09/03/02 12:41:38
アプリのヒープサイズかスタックサイズが小さく設定されてるとか?

337:デフォルトの名無しさん
09/03/02 13:27:45
設定はBCB5もBCB2009も同じなんです。


338:デフォルトの名無しさん
09/03/02 13:44:09
同じにしたらVCLが肥大化した分、メモリ的に2009が不利じゃね?

339:デフォルトの名無しさん
09/03/02 14:01:48
ヒープサイズやスタックサイズを大きく設定するという意味ですか?

340:デフォルトの名無しさん
09/03/02 14:13:44
下にサブディレクトリのない末端のディレクトリ基点にFindFirstしてもエラー出る?
出ないならただのスタックオーバーフローじゃないかと。

341:デフォルトの名無しさん
09/03/02 14:41:59
FindFirstの再帰処理で階層が深くなった時に出る次第です。
やはりスタックオーバーフローでしょうか

342:デフォルトの名無しさん
09/03/02 14:47:37
再帰つかうなよ

343:デフォルトの名無しさん
09/03/02 14:54:26
他にいい方法あんの?

344:デフォルトの名無しさん
09/03/02 15:01:11
>再帰つかうなよ
どのように処理するとよいのでしょうか?


345:デフォルトの名無しさん
09/03/02 15:16:07
>>342はいつもの煽るだけの無知なクズとみた

346:デフォルトの名無しさん
09/03/02 15:23:35
フォルダ名をキューに入れて、findnext出来なくなったら
先頭を呼び出して奨める

347:デフォルトの名無しさん
09/03/02 15:28:46
>>346
335じゃないけど意味がわからないからもうちょい詳しく教えて

348:デフォルトの名無しさん
09/03/02 15:36:21
たとえばc:\aの仕方。

フォルダa1,a2,a3を見つけたら、
que[0][0]="a1"; que[0][1]="a2"; que[0][2]="a3";
と登録。
queの初めを呼び出して連結する。 c:\a\a1をサーチ。
フォルダb1,b2をque[1][0]="b1"; que[1][1]="b2"; と登録。
各階層ごとqueが無くなったら上へもどる。

349:デフォルトの名無しさん
09/03/02 15:42:37
御迷惑をお掛けしています、環境に問題があるのかもしれません。
BCB2009はVirtualPC上で動作させており、FindFirstしている場所は
VirtualPC上のネットワークドライブです。
この時にDebug::Heap Block at xxxx とか Invalid address xxxが出ています。
ローカルのC:\\とかを指してやると正常に動作しています。



350:デフォルトの名無しさん
09/03/02 15:52:29
仮想PCの性能不足だろ
再帰使うなよ

351:デフォルトの名無しさん
09/03/02 15:54:13
vipが今日でなくなる?vipperどもが運営に宣戦布告!!!!!

 スレリンク(news4vip板)

352:デフォルトの名無しさん
09/03/02 15:55:32
>>仮想PCの性能不足だろ
無知でした、皆様ありがとうございます。

353:デフォルトの名無しさん
09/03/02 15:58:27
>>348
335じゃないけど、ディレクトリをどんどんケツにくっつけてサーチしろってことかな?
俺もよく再帰使うからちょっと気になって横うんこしてしまったぜ

354:デフォルトの名無しさん
09/03/02 16:00:54
全ての再帰は、ループ処理で書き換えられる。 再帰定理とかいうのがある。

355:デフォルトの名無しさん
09/03/02 16:05:31
>>354
だからなんだよクズ

356:デフォルトの名無しさん
09/03/02 16:07:38
再帰定理というのがあって、再帰とループは機能的に違いがないことが証明されているそうです。
つまり、原理的には再帰で書けるコードはループで書けるんだそうです。
Scheme(LISP系の関数型プログラミング言語)だと、繰り返しはループじゃなくて再帰を使うんだそうです。

357:デフォルトの名無しさん
09/03/02 16:16:59
>>356
んじゃ>>350はなんなの?

358:デフォルトの名無しさん
09/03/02 16:21:38
違いはないから、メモリ管理をコンパイラに任せず自分でやれって事だ
再帰使うとスタックオバーフロが起こりうる

359:デフォルトの名無しさん
09/03/02 16:25:48
スタック領域はコンパイル時に決定されてしまうだろ。
だから予定外のメモリ確保が出てくる再帰使うと停止する。
動的確保なら、OSがスワップとかしてなんとかできる。

360:デフォルトの名無しさん
09/03/02 22:02:32
つかどんだけ深い階層になってるんだ?リパースポイント(FILE_ATTRIBUTE_REPARSE_POINT)とか設定されてね?

361:デフォルトの名無しさん
09/03/02 22:46:44
>356
スタックの類使わなくても書けるの?

362:デフォルトの名無しさん
09/03/03 05:37:46
まだ初心者なのですが、batファイルをC++builder6で
ボタンを押したら実行するようにしたいので

ShellExecute(Handle,"open",ファイル名.c_str,NULL,NULL,SW_SHOW);

と書いたのですが、うまくいきません・・・どなたか教えてくださいOTL

363:デフォルトの名無しさん
09/03/03 07:55:49
↑解決しました、スレ汚しすまそOTL


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch