トップページ⇒tech
946コメント287KB

C++Builder相談室 Part6

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-10あたり。


0175デフォルトの名無しさんNGNG
Builder 6 で
MFCのCStringtとかCFileとか
使うにはどうすればいいですか?

http://www.borland.co.jp/qanda/cbuilder/c0009332.html
これやっても、

[リンカ 致命的エラー] Fatal: ファイル ADVAPI32.LIB が開けません

言われます。
プロジェクトに、追加したり
#pragma comment(lib,"Psdk/ADVAPI32.LIB")
しても、駄目ぽ。
0176デフォルトの名無しさんNGNG
>>174
俺は、DirectShowでがんばった。
0177175NGNG
自己完結。

パスに
$(BCB)\lib\Psdk
追加でできた。
0178デフォルトの名無しさんNGNG
>>174
Video for Windowsで簡単にできるよ
0179113NGNG
>>173
> tabsheet.hでUnitMain.hをインクルードしてるんじゃないの。

hでインクルードしているのがまずいかと思って
cppファイルでインクルードしてみたけどだめです
型名が必要っていうコンパイルエラーが消えません
0180デフォルトの名無しさんNGNG
メモ帳を作ってみてるんですけど、ドラッグアンドドロップがうまくいきません。
1.MessageDlg関数で、なぜか最後面にいってしまう。
  (他のウィンドウの後ろに隠れてしまう)
2.Show関数が働かず、最前面にきてくれない。
アドバイスよろしくお願いします。
0181180NGNG
class TMainForm : public TForm
{
  ...
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles)
END_MESSAGE_MAP(TForm)
  ...
};

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
  ...
  ::DragAcceptFiles(Handle, true);
}
0182180NGNG
void __fastcall TMainForm::WMDropFiles(TWMDropFiles &msg)
{
  if ( Memo->Modified ) {
    int res = MessageDlg(g_strFileName + " は更新されています。保存しますか?",
        mtWarning, TMsgDlgButtons() << mbYes << mbNo << mbCancel, 0);  // 質問1
    ...
  }

  char filepath[MAX_PATH];
  ::DragQueryFile((HDROP)msg.Drop, 0, filepath, MAX_PATH);
  g_strFilePath = filepath;
  g_strFileName = ExtractFileName(g_strFilePath);
  Memo->Lines->LoadFromFile(g_strFilePath);
  SetAppTitle();
  ::DragFinish((HDROP)msg.Drop);

  Show();   // 質問2
}
0183180NGNG
環境書き忘れてました。
・Win98
・C++Builder 5
です。
0184デフォルトの名無しさんNGNG
age
0185113NGNG
113のインクルードの問題は一応解決できました。
動的生成したコンポーネントの中から
親コンポーネントのメソッドを叩くことが出来ました。

ただヘッダファイルででTFrameSheetを使用するとどうがんがってもコンパイル出来ません
cppで使用するのは可能なのですが

vector<TFrameSheet*> FrameSheet;
vector<TTabSheet*> TabSheet;

↓こうするとOK

//vector<TFrameSheet*> FrameSheet;
vector<TTabSheet*> TabSheet;

ヘッダの中では使用できないのでしょうか?
0186デフォルトの名無しさんNGNG
んなこたない。がんがりすぎて、おかしな事になってるんじゃないか。

とりあえず、vector<TFrameSheet*> FrameSheet; の前のどこかに
class TFrameSheet; って書いておけば、コンパイルは通るようになるだろうけど。
0187デフォルトの名無しさんNGNG
TQuery->RequestLiveってのがありますよね。
TIBQueryではどのプロパティが該当しますか?
0188デフォルトの名無しさんNGNG
例えば↓こんな感じでプログラムからシステムコマンドを呼び出す時に
system("dir > out.txt");
コンソールウィンドウを表示しないでコマンドを実行させる方法ってある?

0189デフォルトの名無しさんNGNG
> コンソールウィンドウを表示しないでコマンドを実行させる

#include <stdio.h>
FILE *_popen (const char *command, const char *mode);
popen ではなく _popen です。
例
FILE *pf;
char buf[256];
char *p;

pf = _popen("dir","rt");
if (pf == NULL) return MISS;
while ((p = fgets(buf, sizeof(buf), pf)) != NULL) {
;
}
_pclose(pf);




0190113NGNG
>>186
感謝
できますた!!
もうちょっと基礎を学びます
0191デフォルトの名無しさんNGNG
質問です。
BCB6Pro で Examples\DBTasks\LookUp のフォルダに収められている、
lookupex プロジェクトというのがあります。

このプロジェクトをコンパイルして実行します。

このサンプルの Customer 列を編集しようとすると、
コンボボックスが出てくるのですが、
この仕掛けがどのように実現されているのかわかりません。

DMMain っていうデータモジュール上の CustomerSource が
絡んでいる…と踏んだのですが、DBGrid 上の Customer 列と
連動させているような部分をソースから見つける事ができませんでした。

どこをどういじればあのような動作になるのか、
識者の方々ご教授頂けないでしょうか。
0192デフォルトの名無しさんNGNG
フォームをnewで作成した場合、deleteとReleaseで削除する方法がある
のですが、両者の違いがよく分かりません。deleteでエラーが出る場合
はReleaseを使えという説明を目にしたのですがdeleteよりReleaseを使った
ほうがいいんでしょうか?
0193デフォルトの名無しさんNGNG
>>192
ヘルプのTForm::~TForm
0194デフォルトの名無しさんNGNG
Releaseは、自分自身にPostMessageして、そこでdeleteするので、
フォームを消したいけれど、呼び出しもとがreturn後もフォームに触るので
即座にdeleteするとアクセス例外が出るような時に使えます。
(逆に、即座に消したい時はdelete)

まあ、よくわからなければReleaseでいいかと。
Closeして、OnCloseでcaFreeって手もあるけど。
0195デフォルトの名無しさんNGNG
int brk;
double a = 216.1;
double b = 2161;

if( a < (b/10) ){

brk = 1;
}

以上のような処理をボタンのイベント処理で
実行させると brk = 1 のところの処理を通ってしまいます。
b/10 をdouble c などに代入して if( a < c )
とすると正常に動作します。。 
なぜ?
教えて君で申し訳ありませんが、どなたか教えてください。
環境はBuilder5 です。
0196_NGNG
http://homepage.mac.com/hiroyuki44/
0197デフォルトの名無しさんNGNG
C++BuilderとVC++
C++BuilderとDelphiでは速度はどちらが速いのですか?
0198デフォルトの名無しさんNGNG
>>195
0.1は、二進数でキッチリ現わせないから誤差が出る。
0.5=1/2=0x0.1 とか、 0.75=3/4=0x0.11 とかならOKかな?(試して無いよ
0199192NGNG
>>193,194
回答有難うございます。いつもはdelete使っていたのでReleaseを使わないと
まずい事があるのかなと思ったもので。
0200デフォルトの名無しさんNGNG
>>197
よく出る質問だけど、その質問はどういう意味なの?

 BCB/VC++と BCB/Delphiで同じコードをコンパイルしたらどっちが速いかという意味なら、
  それぞれのコンパイラには得意・苦手があり、必ずこうという事は言えない。
  スポット的な最適化能力はVC++が上だけど、それが実際に速いかどうかは場合によりけり。
  実感としては同じ程度だね。
  BCBとDelphiは共通でコンパイル出来るコードはPascalで、それは同じコンパイラを使うので同じ結果になるだろう。

コンパイラのコンパイル速度なら圧倒的にDelphiだ。
0201デフォルトの名無しさんNGNG
例えば
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1050452299

こういうコードならDelphiが最速になるよ
0202デフォルトの名無しさんNGNG
C++のコードとDelphiのコードを比べたら大概C++の方が速いけどね。
0203デフォルトの名無しさんNGNG
>>187
このプロパティ、ヘルプ読んでも意味不明で萎えたが、
SELECT した結果を編集したい、ってこと?
それなら TIBDataSet 使えばいいんじゃない? 自前で UPDATE 文を用意する必要はあるが。
0204デフォルトの名無しさんNGNG
>>202
不思議だね。自分が書いたら何故かDelphiの方が速い事が多い。
0205デフォルトの名無しさんNGNG
BuilderでMFC使えないの?
CStringの
operator= (LPCSTR)
のやつが、うまくく認識されずに
コンパイルエラー

どうやったらいいですか?
0206デフォルトの名無しさんNGNG
>>204
もっとC++を勉強しろ。
0207デフォルトの名無しさんNGNG
>>205
どういうコードで、なんていうエラー?
0208205NGNG
うほっ
なんかしらないけど、
うまくいけた。

0209デフォルトの名無しさんNGNG
>>204
>>206
コンパイラの得手不得手があるんで一概には言えんだろ。
たまたま204の書くコードが、dcc32の最適化と上手くハマってるってことじゃないか?

bcc32の方は、-k-を指定しても、__fastcall以外はpush ebp; mov ebp, espされてしまうし…
全部espで操作するコードを期待してるのに
0210デフォルトの名無しさんNGNG
これからBuilder6入れようと思うんだけど、
ハードディスク何メガぐらい取られますか?
0211デフォルトの名無しさんNGNG
>>210
箱の裏に書いて無いか?
0212デフォルトの名無しさんNGNG
いや。落とすから箱は無い。
0213210NGNG
アップグレードで申し込んだから
箱といっても地味なダンボールですが
0214デフォルトの名無しさんNGNG
漏れは400MBぐらい。
0215デフォルトの名無しさんNGNG
>>213
ウソコケ
アップグレードで買ったが正規版の箱で送られてきたぞ
それとも俺が優待でアップグレードしたからだってのか?
0216210NGNG
>>214
ありがとう

>>215
粘着ですね。
毎回真っ白い箱で届きますよ。
0217デフォルトの名無しさんNGNG
>>215
あー、わかったわかった。
0218デフォルトの名無しさんNGNG
500MB超えてるなー
0219デフォルトの名無しさんNGNG
>>216=210
便乗で粘着するが俺のアップグレードもあの青い箱がきたぞ。
人によって違うのか?
で、その箱には 650MB 以上必要と書いてある(Pro版)。
0220デフォルトの名無しさんNGNG
オレもアップグレードだけど店頭で売っているのと同じ青い箱だったよ。
バージョン5までは素っ気無い白い箱で届いてたのでちょっと嬉しかった。
0221215NGNG
>>216
本件に関して初カキコなのに粘着などと、どういう了見かな?
0222デフォルトの名無しさんNGNG
>>221
そういう追及をするところが粘着という了見なわけだが
0223デフォルトの名無しさんNGNG
俺もPRO6アップグレード青箱で来た。白箱の人もいたのだろうか。
0224デフォルトの名無しさんNGNG
でも >>216 の「粘着ですね。」も失礼な言いぐさだな。
>>210 以外で白い箱だった人っているの?。
0225デフォルトの名無しさんNGNG
聞いた事ないな。
白と青の二通りがあるなら、ずっと前にMLで話題になってるんじゃねえ?
0226デフォルトの名無しさんNGNG
>>224
丁寧な言い回しではないかw
0227215NGNG
>>222
言われっぱなしで泣き寝入りしろと?

 フ ザ ケ ル ナ
0228デフォルトの名無しさんNGNG
( ´,_ゝ`)プッ

 フ ザ ケ ル ナ

だって
0229デフォルトの名無しさんNGNG
リキむとミがでるぞ
0230デフォルトの名無しさんNGNG
フ ザ ケ ル ナ

ライジング・サンを思い出した
0231デフォルトの名無しさんNGNG
いちいち突っ込む奴全員粘着ケテーイ(w
0232デフォルトの名無しさんNGNG
┐(´ー`)┌
0233デフォルトの名無しさんNGNG
>>227
いや、いくらなんでも泣き寝入りしなくてもいいんじゃないか
0234デフォルトの名無しさんNGNG
>>210 が本当に C++Builder6 を持っているかどうかも怪しいもんだな。
大体持っているならあんな質問するかねぇ。買う前なら考えられなくもないが
箱が仮に白いヤツだったとしてもマニュアルとか見れば書いてあるだろうし。
多分過去にはアップグレードしたことがあって、同じと思い「白い箱」とか
書いてしまったとか?。どういうつもりだったのかは理解し難いが・・・。

まぁ どうでもいいや。w
0235デフォルトの名無しさんNGNG
>>224
Builder持ってないし、ちゃちゃを入れると面白いと思って書いてるだけだけど、
>>220を見る限り古いバージョンでは白い箱があったようなので
確実に、>>210が嘘とも言い切れない予感
まぁ、何で某に電話して聞かないのか、不思議ではあるけど…
0236デフォルトの名無しさんNGNG
画面写真等がかかれているのは「化粧箱」
「化粧箱」にはいろいろ書かれているけれど、誤字や記述の変更などでさし変わる可能性もある。
だから内箱と化粧箱を分離するのですね。
化粧箱は製品ごと、種別(Pro とか Personalとか)でも別になるし、カラー印刷でコストもかかっているから
会社としては少しでも節約したいわけだ。
化粧箱は宣伝も兼ねているし、ショップに置く場合には必須。
アップグレード/DM ユーザーは、内容に同意の上でお金を払っているのだから化粧箱は必要なし。

けど、化粧箱をほしがるユーザーが多かったし、節約といっても全体に比べれば
たいした額ではなく、ユーザーの心情を考えるとあまり得策ではない。ということで

Delphi6あたりから、直販ユーザーに対しても化粧箱付で提供し始めた。

というのが真相。
0237名無し~3.EXENGNG
BCB6で作成したアプリケーションは初期のWin95などでも問題なく動きますか?

今BCB4使っててWin95/98/Me/NT4/2000/XPで動くアプリが問題なく作れているので
アップグレードしてもしなくても構わないんですが、
定義されてないAPIや定数がボチボチ出てきて自前で代替ロジック組むのもいい加減アレなので、
アップグレードしようかなーと。
0238デフォルトの名無しさんNGNG
>初期のWin95
は DCOM がらみで最新の COM ライブラリが提供されていないため、MS 自身が切り捨てているからねぇ。
VCL、より厳密には Delphi の RTL を使わなければ問題なく動くはず。
Delphi ではアップデートの途中で Win95 に存在しない API を使ってしまったけど、D6 RTL Update3
(通称 Variant パッチ)で修正され、某としては保証はしないけど初代 Win95 で動作するようにした。
BCB6/Update4 に D6 RTL Update を混ぜることができるのならやってみてもよいと思うけど?
0239デフォルトの名無しさんNGNG
なんちゃってプログラマなんでアレだけど、IE5 以上を入れないと
動かないとか言われることが多くなったので、どうしても W95 を対象に
するなら、そのまま 4 を使った方がよさそうな気がする。
0240デフォルトの名無しさんNGNG
int brk;
double a = 216.1;
double b = 2161;

if( a < (b/10) ){

brk = 1;
}

以上のような処理をボタンのイベント処理で
実行させると brk = 1 のところの処理を通ってしまいます。
b/10 をdouble c などに代入して if( a < c )
とすると正常に動作します。。 
なぜ?
教えて君で申し訳ありませんが、どなたか教えてください。
環境はBuilder5 です。
0241デフォルトの名無しさんNGNG
なんかデジャブ
0242デフォルトの名無しさんNGNG
なんか、何度も何度も見たような・・・

BCBとDelphiでは計算は long double (delphiの Extended) でするから b/10 と 比較はlong double でされる。



0.1 は2進数では 無限小数になるから
 (double) 1/3 < (long double) 1/3 が真になるようn
 (double) 0.1 < (long double) 0.1 が真となる
0243205NGNG
やっぱりエラーが出る

[リンカ エラー] 外部シンボル 'CString::operator const char *() const' が未解決(C:\[DEVELOP]\PACKAGE\FORM\MAINFORM_.OBJ が参照)
こんな、感じ

コードは以下
BOOL TMainForm::AddFile(const char* lpszFilePath,const char* lpszKeyName)
{
TListItem* pItem;
CFile file(lpszFilePath,0);
CFileStatus filestate;
//
file.SetFilePath(lpszFilePath);
file.GetStatus(filestate);
//
pItem = m_lstFile->Items->Add();
pItem->Caption = (AnsiString)file.GetFileName();

return TRUE;
}
void __fastcall TMainForm::ToolButton5Click(TObject *Sender)
{
if(OpenDialog1->Execute()) {
AddFile(OpenDialog1->FileName.c_str(),"");
}
}
0244デフォルトの名無しさんNGNG
>>243
#pragma link "nafxcwd.lib"
をどっかに足す。
0245205NGNG
>>244
うほっ
いけたです。

あんた神だ。

ありがとうございます。
0246デフォルトの名無しさんNGNG
遅レスでスマソ

>180
void __fastcall TMainForm::WMDropFiles(TWMDropFiles &msg)
{
  Application->BringToFront () ; // 追加

  if ( Memo->Modified ) {
以下略

で、だめかな?
0247デフォルトの名無しさんNGNG
5を使っているんだが、
コンパイルして実行するとたまにあるはずのコントロールが消えてることがある
んでオブジェクトインスペクタでそのコントロールをみると、Left、Top、Width、Heightが
とんでおmない値になってることが結構あるんだが、これ完全にバグだが
対処法ってあるんですかね?
0248デフォルトの名無しさんNGNG
Builder5で作ったアプリケーションなんですが
win2000だとヒントが出て、98だとヒントが出ません。
こういう症状って、なにか解決策ありますか?
0249デフォルトの名無しさんNGNG
>>247
数年使っているが経験なし。
バグというよりは環境を見直したほうがよいと思う。
0250デフォルトの名無しさんNGNG
>>248
98はヘルプの項目数が32767個ぐらいに制限されてませんでしたっけ?
そのせいでヒントが出ないんじゃない?
0251デフォルトの名無しさんNGNG
CB6 pro版はヨドバシカメラで61,200円 商用・業務目的 可
CB6 personal版はヨドバシカメラで9000円 商用・業務目的 不可
VC7 personal版は12800円 商用・業務目的 可

個人で商用・業務目的に開発を行なう人にとっては、
値段の問題だけで、VC選らんでる人も結構いるだろうな。
実際俺もその一人、学生ではさすがに6万円は手が出せない・・・
GUI開発をVCですると時間がかかりすぎて厳しい。

CBホスィ・・・
0252デフォルトの名無しさんNGNG
>>251
商用/業務で6万円出せない。ってのは何か間違っているよ。
いろんな事情があるんだとは思うけど。

学生がフリーウェア作る分には Personal でよいのでは?
0253デフォルトの名無しさんNGNG
アカデミック版なら半額でっせ
0254デフォルトの名無しさんNGNG
ttp://internet.watch.impress.co.jp/www/article/2003/0623/winny.htm
こんなのでニュースになるとは…
0255デフォルトの名無しさんNGNG
インプレスはv2になってからずーとWinnyのバージョンアップ報告してるよ。
よっぽど買ってるんだろ。
0256デフォルトの名無しさんNGNG
>>254
なんちゅうか・・・それ作ってるヤシはやっぱり割れてんだろなBuilder・・・・
0257デフォルトの名無しさんNGNG
>個人で商用・業務目的に開発を行なう人にとっては、
>実際俺もその一人、学生ではさすがに6万円は手が出せない・・・

この辞典でアレだなぁ・・・
0258デフォルトの名無しさんNGNG
>250
ありがとうございます。
人のパソコンで起動したら確かに出てきました。
0259 NGNG
商用なんて考えてないけどログインのやってるソフコンみたいのもだめなの?
毎月発表してて入賞すると数万円もらえたりするやつ。
あとWebで公開するときもソースも公開しないといけないの?
0260251NGNG
>>252
>>259
アルバイトで、雑誌の付録CD用のランチャープログラムを自宅で作ってるんで、
ツールは全部自前なもんで。
仕送りもほとんどないから、バイトでの収入がメインなんです。
そうなると、6万円ってまとまったお金はなかなか出せないんですよ。
家賃よりも高い金額はなかなか出せません。

みんな、お金もちなのか・・・

>>253
アカデミック版はライセンスに制限が付くとおもいました。
0261デフォルトの名無しさんNGNG
商用利用不可なんて制限あったっけ?と思ったら、6からついたのね。
5のLearningをどこかで探してみたら?>251
0262デフォルトの名無しさんNGNG
>>260
ちなみにそれって幾らもらってんの?
6万円も出せないほどの低賃金なのかな。
足元見られてるんじゃねえかなあ・・。
0263デフォルトの名無しさんNGNG
>>262
100%そういうのにまわせるわけじゃないだろ
米も味噌も買わにゃならんし、部屋代だってかかるべ
あくまでアルバイトだっていってるじゃん、それも多分単発だろ?
たいした額にゃなるまいて
0264デフォルトの名無しさんNGNG
おじさんが若いころは、そういうバイトそのものが無かったのでアレだが、
普通、開発ツールは発注元が提供するものではないのか?
たぶん、足元見られているんだと思う。
0265デフォルトの名無しさんNGNG
>>248
BCB4で起きてる現象と同じだとすると、
ステータスバーのコンポーネントを使わないでパネルとラベルとかでそれっぽく作る。

ヒントイベントは発生してるのを確認したけどステータスバーに表示されなかった
98/XP(+manifest) = ×
2K/XP = ○
0266デフォルトの名無しさんNGNG
マルチポストになるかもしれませんが...
C++スレで、
C++ではenumの要素数を取得したり、pascalでいう、lowやhiを取れない、
とレスされました。

BCBだと拡張されてて取れる、とかないですか?
0267デフォルトの名無しさんNGNG
できないよ。
0268デフォルトの名無しさんNGNG
>>266
なぜそれが必要なのかが知りたいな
0269266NGNG
あー、ごめん。C++スレで話が続いてるな。
0270266NGNG
Delphi言語で書けて、C++で書けないことってありますよね。
(templateみたいに、逆もあるけど、Delphi言語は、なんか小回りが効くような)

BCBで拡張されてないと、困るような...
0271デフォルトの名無しさんNGNG
LowやHiは別にVCLを使うために必須じゃないから、拡張されてなくても困らないんでない。
0272デフォルトの名無しさんNGNG
BCBでもRTTI で Highに相当する情報はひらえるだろう。それで十分。

そもそもC++では配列の添え字に列挙型を使ったりしないし、出来ない。
それはC++の文化とは合わないしね。
0273デフォルトの名無しさんNGNG
enum { A, B, C };

std::string strs[3];
strs[A] = "AAA";
strs[B] = "AAA";
strs[C] = "AAA";

std::cout << strs[C] << strs[B] << strs[A] << std::endl;
0274デフォルトの名無しさんNGNG
出来ないこたないだろう
■ このスレッドは過去ログ倉庫に格納されています