トップページ⇒tech
988コメント332KB

C Builder相談室 Part3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-5あたり。
0002デフォルトの名無しさんNGNG
過去スレ
C++Builder相談室
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=969458279
新C++Builder相談室(C++Builder相談室 Part2)
http://pc.2ch.net/test/read.cgi/tech/997074601/

姉妹言語スレ
Delphi相談室その3
http://pc.2ch.net/test/read.cgi/tech/1010153466/
0003デフォルトの名無しさんNGNG
関連サイト
公式サイト
http://www.borland.co.jp/cppbuilder/
builder-ML 過去ログブラウザ
http://leed.issp.u-tokyo.ac.jp/~takeuchi/builder/browse.cgi
C++Builderのお部屋(Tips系)
http://www.ne.jp/asahi/nagoya/ahomaro/builder/
C++Builderによるプログラミング(Tips系)
http://market.agr.tottori-u.ac.jp/ken/
Delphian World(コンポーネントライブラリ)
http://home1.infonia.ne.jp/~delphian/delphi/
C++Builder Bugs
http://www2.justnet.ne.jp/~tyche/bcbbugs/index.html
Borland C++Builder最新リンク2001(リンク集)
http://www2.famille.ne.jp/~akio1998/l_cpb.html
0004デフォルトの名無しさんNGNG
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | <  >>1 C Builderって何
   \|   \_/ /  \_________________
     \____/
   ______.ノ       (⌒)
  //::::::::|-、 ,-/::::::ノ ~.レ-r┐
/ /:::::::::::|  /:::::ノ__ | .| ト、
| /:::::::::::::::| 〈 ̄   `-Lλ_レ′
レ::::::::::::::::::|/::: ̄`ー‐---‐′
0005デフォルトの名無しさんNGNG
BCB5で質問!
0006デフォルトの名無しさんNGNG
( ´_`) (´_` ) 人いないね。 ウン。
         あげとこか。  ウン。
0007デフォルトの名無しさんNGNG
( '_') CPUウィンドウでJP命令見るとJMPって表示されるんだよ。 
    ('_' ) へー。
0008デフォルトの名無しさんNGNG
( '_') CPUウィンドウでFIMUL dword ptr〜命令見るとFIMUL word ptr〜って表示されるんだよ。 
    ('_' ) へー。

0009( '_')NGNG
・・・。
0010( '。')NGNG
( '_') CPUウィンドウで・・・
    ('_' ) へー。
0011( '。')NGNG
( '_') CPUウ・・・
    ('_' ) へー。
0012( '。')NGNG
( '_') C・・・
    ('_' ) へー。
0013( '。')NGNG
( '_') ウザイ?
    ('_' ) ウン。
0014デフォルトの名無しさんNGNG
スレタイトル間違えるとこうなると言う見本。
今度からは書き込みボタン押す前に5秒以上確かめろ。
00151NGNG
              ∧_∧  〔^^〕
               _,( ´Д`)⌒ i  |
          (⌒ ー  一 r.、!  〉
           ヽ弋 。 人 。 イ(` ー'
           〔勿\     ヽ
               )  r⌒丶 )  ドカ
     ドカ   ドカ  /   !  |'´
       ドカ    /   /|  |‖ ドカ
             (    く  !  ||‖  ドカ
           ドカ   \  i   | ‖|‖|
            ,__>  ヽヽ从/∧∧
            ⊂⌒ヽ从/ つ ゚д゚) ←>>14
0016(ΦωΦ)NGNG
( '_') MFCまみれで・・・
    ('_' ) ヘー
0017デフォルトの名無しさんNGNG
>>7,8
再現しないが、どうした?
0018( '。')NGNG
( '_') 直ってるみたいだね。
    ('_' ) ウソツキ。
0019デフォルトの名無しさんNGNG
ほかにはないのか? >> 17

0020( '。')NGNG
( '_') JMP・Jcond・LOOP系の命令が消えちゃうバグもあるんだ。
    CPUウィンドウの表示のバグじゃなくて本当に消えちゃう。
    もちろん最適化で省かれるんじゃなくて、絶対必要な部分なのに消えちゃう。
    でも原因がはっきりしないんだ。

    判ってるのはJMPのあとに現れる最初のジャンプ系の命令が消えることぐらい。
    それも↑方向のショートレンジのJMPを置くと起こりやすいみたい。
    でも条件はこれだけじゃないみたいで、再現したりしなかったり。

    でももう直ってるかな?今までの全部BCB3の話。
    早くお金ためてアップグレードしなきゃ。


    ('_' ) 長いよ。
0021( '。')NGNG
( '_') 忘れてたけどJMP先がラベルで指定してある場合ね。
    JMP $+xxに置き換えたら直るんだ。

    ('_' ) もう寝ようぜ。
0022( '。')NGNG
( '_') あれ?BCB6申し込んだらBCB5貰えるのって今日までだ。
    まだお金ないよ。

    ('_' ) 寝れ。
0023( '。')NGNG
( '_') 間違えた。$+xx に置き換えるのは消えちゃうほうね。
    置き換えると消えなくなるんだ。

    ('_' ) 氏ね。
0024デフォルトの名無しさんNGNG
BCB3 かぁ。そんな古いの今頃話題にされてもなぁ。
0025( '。')NGNG
( '_') 僕たち時代に取り残されてるみたいだね。

    ('_' ) 元気出せよ今度こそアップグレードするんだろ?
0026( '。')NGNG
( '_') でも貧乏学生に\36,750はきついね。

    ('_' ) おまえこないだ中退したろ。
0027( '。')NGNG
( '_') 4時だね。寝よう。

    ('_' ) 結局今日はほとんど人いなかったな。
0028デフォルトの名無しさんNGNG
( '_') 4時半だね。

    ('_' ) ひきこもりの俺らには関係ないさ。
0029デフォルトの名無しさんNGNG
4万円くらい、バイトして稼ぎなさいな。
0030( '。')NGNG
( '_') おはよう。寝てる間に2レスだね。

    ('_' ) こんな時間に覗くなよ。テレホーダイなんだから。
0031( '。')NGNG
( '_') バイトと言えば遺跡発掘のバイトしたことあるよ。

    ('_' ) ゴッドハンドはいなかったけどな。つか回線切れって。
0032( '。')NGNG
( '_') あれ、12時間経ってるのに誰も来なかったんだね。

    ('_' ) Delphi相談室とC++相談室あるしな。
0033( '。')NGNG
( '_') BCB5の無料期間終わっちゃたね。6がバグだらけだったらどうしよう。

    ('_' ) BCB3でGO!だな。
0034デフォルトの名無しさんNGNG
ヘルプとヘルプ内のサンプルを死ぬほど充実して欲しい。
ユーザーのコンポーネントを置くフォルダを規定して欲しい。
0035デフォルトの名無しさんNGNG
BCB3 もバグだらけだと思いますが?
よくそんな環境で我慢しているね。
短い人生を無駄遣いするのが趣味ですか?
0036( '。')NGNG
( '_') Borlandのサイトで新機能のヘルプが貰えるみたいだよ。

    ('_' ) 金が貯まるまでそれでも眺めてるか。
0037( '。')NGNG
( '_') 案内よく見たら動作環境がPentiumII/400MHz以上だってさ。

    ('_' ) あと67MHz足りねーな。
0038TabSheetについてNGNG
PageControlに動的にTabSheetを作成して、
いらなくなったTabSheetを破棄したいのですが

delete PageControl->ActivePage;

とやってOKなんでしょうか?
もっと気の効いたメソッドとかあるのかと思って質問させてもらいました。

前スレ966と重複書き込みです。すみません<m(__)m>
0039( '。')NGNG
あ・・・寝ようと思ったら上がってた。2日ぶりの浮上だね。

>>38
良いと思いますよ。
要らなくなったコンポーネントは deleteで
破棄してしまってOKです。
後処理なんかもデストラクタでしてくれます。
0040( '。')NGNG
あっ、あと気の利いたメソッドというのは無いと思います。

ですのでやはり delete PageControl->ActivePage で良いんじゃないでしょうか。
0041デフォルトの名無しさんNGNG
なんですかこのスレは!
スーパーハイソサエイティーハッカーのY.K氏の許可を得ているのですか?
age
age
0042TabSheetについてNGNG
>>39-40
ありがとうございました。安心して眠れます。^−^


0043デフォルトの名無しさんNGNG
#include <Filectrl.hpp>
で、
DirectoryExists(hoge)が、
プロジェクト>オプション にて、
「実行時パッケージを使って構築」のチェックを外して、メイクするとリンクエラーになります。
外部ライブラリを参照しない、単独exeにしたいんだけど、どうしたらいいですか?
0044デフォルトの名無しさんNGNG
>>43
ほんとだリンカエラー出るね。
合ってるか分からんけど *.bpr 開いて
<LIBRARIES value="Vcl50.lib vclx50.lib"/>
<SPARELIBS value="Vcl50.lib vclx50.lib"/>
って変更してみ。一応リンカエラーでなくなった。
004543NGNG
>>44
すげ〜、できた。
多謝
0046_NGNG
GUIで延々と処理を繰り返すプログラムを作るとメニューや×ボタンが
効かなくなるのですが、どうすればいいでしょうか?
0047デフォルトの名無しさんNGNG
Application->ProcessMessages()
とか、スレッド使うとか。
0048_NGNG
>47出来ましたー。
ありがとうございます^^;
0049デフォルトの名無しさんNGNG
>>47

それやると、やっぱり処理速度って落ちるよね。
ループとかしている方のメイン処理の。

Application->ProcessMessage()を入れないと
CPU100%使い切ってるのに、入れてやると
多くても70or80%くらいなんだよねぇ。

if(loopCount % 100 == 0) {
Application->ProcessMessage();
}

とかやるべきかねぇ?
0050デフォルトの名無しさんNGNG
>>49
じゃあスレッドで。
0051デフォルトの名無しさんNGNG
起動時に前回のプロジェクトが読み込んだりできる設定ってないでしょうか?
005249NGNG
>>50

やっぱ、パフォーマンス求めるならそうなるよね。
1度だけ、見よう見まねでスレッド使ったことがあるけど、
なんだか使いづらかった。
こんな程度の腐れは逝って良しですね。。。。
0053デフォルトの名無しさんNGNG
if(loopCount % 100 == 0) {
Application->ProcessMessage();
}
は良く使う手だよ。
プログレスバーの操作もその中にブッチこむよ。
0054デフォルトの名無しさんNGNG
使用許諾コードって貰わなくても問題ない?
メールアドレスとか名前とか取られるのがやなんだけど。
0055デフォルトの名無しさんNGNG
そんなに某が信用できないのなら今すぐここから出て行け
0056デフォルトの名無しさんNGNG
うるせー、厨某!
0057デフォルトの名無しさんNGNG
C++Builder 5 で外部のエディタを使ってコードを編集しています。
外部のエディタでソースを保存してBuilderに戻ると、
--------------------------------------------------
モジュールXXXXXXXのタイムスタンプが変更されました。
読み込みなおしますか?
--------------------------------------------------
と確認のダイアログが出るのですが、このメッセージを出さないようにする方法はありますか?
自動的に読み込みなおすようにしたいのです。
0058デフォルトの名無しさんNGNG
DirectXを使わずにピクセル単位で高速にビットマップを描画する方法
はないでしょうか?
Canvas->Pixels[x][y]=TColor;のループだと非常に遅い感じです。
0059デフォルトの名無しさんNGNG
>>58
ScanLine使え
0060デフォルトの名無しさんNGNG
質問です。

TMemoコンポーネントを使ってるんですが、
Lines->Add(ホゲホゲ)って文字列を追加していくと、
最後の改行の影響かなんかで、空白行が発生するんです。

これを無くすような文字列リストの追加方法を教えてください。

BCB5です。
0061デフォルトの名無しさんNGNG
挙げて
0062デフォルトの名無しさんNGNG
>>60
改行入れられたくないなら、
Memo->Text = Memo->Text + hogeじゃダメ?
0063デフォルトの名無しさんNGNG
>>62 ありがとうです。

文字列リストへAdd(ほげ)、Add(ほげ)…ってやった後に、
Text+=ちょめってやったら、
***********
ほげ改行
ほげ改行
ちょめ
***********
ってなるのかな?

素人おしえてくんスマソ。

自分でやってみます。
006463NGNG
自己レスです。

できました。

for(int i=0; i<10; i++) {Memo1->Lines->Add("これは中間行");}
Memo1->Text = Memo1->Text + "ここが最後の行";

これで最後の改行がきえました。

サンキュウデス。
0065デフォルトの名無しさんNGNG
CheckListBoxってItemsで文字列変更するとリークしない?
CodeGuardに補足されるのだけど。
0066デフォルトの名無しさんNGNG
>>65
http://homepage1.nifty.com/cosmic/delphi/tips_vcl.html#checklistboxbug
0067デフォルトの名無しさんNGNG
>>66
ありがとう。試してみたけど駄目だった。
こんな変なコンポーネント使うのも恐いので、他のもので代用することにした。
しかし、Delphi4で修正されたものがどうしてBCB5に残ってるのか。
0068デフォルトの名無しさんNGNG
>>67
D4でも直ってないし。
0069デフォルトの名無しさんNGNG
メモ帳から文字列を取り出して在る特定の
文字列を高速に別の文字へ置換したいのですが、

 AnsiString str;   // 文章
 AnsiString oldstr; // 置換対象の文字
 AnsiString newstr; // 置換後の文字
 int pos;      // 削除指定 先頭場所
 int length = oldstr.Length(); // 削除指定 長さ
 while ((pos = str.Pos( oldstr )) != 0)
 {
  str.Delete( pos , length );
  str.Insert( newstr , pos );
 }

この方法だと、文章50万文字中に置換対照の文字が
5000〜10000程あると、如何しても何十秒もかかって
しまうのですが、何か良い方法は無いものでしょうか?
0070デフォルトの名無しさんNGNG
>>69
素直に、StringReplace使えば?
0071デフォルトの名無しさんNGNG
>69
ほれ。
str = StringReplace(str, oldstr, newstr, TReplaceFlags()<<rfReplaceAll);
0072Delフサギコ ◆zE1iiRdQ NGNG
>>69
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < 文字列置換のコツがわかるかも
  UU"""" U U    \_______________

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238

最初に出力するoutStrを用意して
SetLengthで予測される十分な長さを確保して
strからoutStrにコピーするのがいいです。
0073デフォルトの名無しさんNGNG
単にファイルにバイナリで書いた配列データを読みたくて
__finally使った下のコードで

[C++ 警告] xx: W8070 関数は値を返すべき って言われたんだけど
これは例外が起きた時に帰り値が不定になるって事だよね?
でも、じゃどう書けばいいの?

long *getBin(char *fname)
{long *mem;
 FILE *fp=fopen(fname,"r");
 if(fp==NULL) return 0;
 try {
  if( 0!=fseek(fp, 0, SEEK_END ) ) return 0;
  long size=ftell(fp);
  size=(size+3) &(-4);
  if( 0!=fseek(fp, 0, SEEK_SET ) ) return 0;
  mem =(long *) malloc( size );
   fread(mem,size/4,4,fp);
  return mem;
 }__finally{fclose(fp);};
}

007473NGNG
あ、途中の"r" は"rb"です
0075デフォルトの名無しさんNGNG
>>73
つーかそれ以前にBuilderは関数の途中でreturnしたら
__finally内は実行されないのでそのコードははげしく問題あるぞ。
007673NGNG
>>75 え? でもステップ実行したらちゃんと fcloseも実行しましたけど?
 気になって今、fcloseで改行入れてブレークポイントかけたらちゃんと 停止しました
007775NGNG
>>76
あれ?そうなの?
バージョン3か4の頃は通過しなかったんだが。
改良されたのか。古い情報でスマソ
007873NGNG
そうなんですか>>75

Delphiだと 単に exit するだけだから、 こういう処理スタイルでいいんだけど

C++とcライブラリの組み合わせで __finally って案外と使い難いですね。
・・・だから最初からfinallyが導入されなかったのかな
007975NGNG
>>78
たしかにC++だと__finallyよりauto_ptr等のように
スタックの巻き戻しでやるのが一般的かな。
とりあえず>>73のコードは return mem; を __finally の外に
書けば Warning は消えそうな気がする。
コンパイラの警告が __finally に完全対応していないのかな?
008073NGNG
>>79 あ!  何か return が2重に実行されそうな感じがして試してなかったけど
  __finally の下に return 0; 書いたら 警告はきえたし、ちゃんと動いた。
ありがとう。

cのライブラリだけだから例外が起きる可能性は無いと思うんだけど、そこまでは
コンパイラは判らないんだろうね
008173NGNG
スタックの巻き戻しを使う方式に書き換えてみた。
 たしかにコッチの方が __finally よりスッキリするみたい

long *getBin(char *fname)
{long *mem=0;
struct DFILE{
FILE *fp;
DFILE(char *n) {fp=fopen(n,"rb");};
~DFILE(){ if(fp){fclose(fp); };}
}f(fname);

if( 0!=fseek(f.fp, 0, SEEK_END ) ) return 0;
long size=ftell(f.fp);
size=(size+3) &(-4);
if( 0!=fseek(f.fp, 0, SEEK_SET ) ) return 0;
mem =(long *) malloc( size );
fread(mem,size/4,4,f.fp);
return mem;
}
0082デフォルトの名無しさんNGNG
vector<vector<AnsiString> > Table;
で、2次元配列をソートする方法ってありませんか?

0083デフォルトの名無しさんNGNG
Memoコンポの背景に画像を表示したいのですが、可能ですか?
0084デフォルトの名無しさんNGNG
>>82
どのようなソートを望むのだ。
008582NGNG
Table[i][j]で、iを列・jを行としたときに、
n番目のiをソートキーとして、行単位にソートしたいです。
0086Delフサギコ ◆zE1iiRdQ NGNG
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< できると思いまフ>>83
  UU""" U U   \_______________
とりあえず
TCuteMemoを利用するなり
0087デフォルトの名無しさんNGNG
>>81
fseekの前にfpのNULLチェックしないの?
それと余計なセミコロンは癖ですか?
0088デフォルトの名無しさんNGNG
エラーチェックするなら、ついでに fclose の前に fflush をやって戻り値をチェックすべし
0089通り掛かりNGNG
>>58
こんなのでいかがですか。
void __fastcall TForm1::FormPaint(TObject *Sender)
{
char bmih[sizeof(BITMAPINFOHEADER)+4*256];
unsigned char Pixels[256][(256+3)/4*4];
BITMAPINFOHEADER *lpbi=(BITMAPINFOHEADER *)bmih;

lpbi->biSize=sizeof(BITMAPINFOHEADER);
lpbi->biWidth=256;
lpbi->biHeight=256;
lpbi->biPlanes=1;
lpbi->biBitCount=8;
lpbi->biCompression=0;
lpbi->biSizeImage=256*256;
lpbi->biXPelsPerMeter=0;
lpbi->biYPelsPerMeter=0;
lpbi->biClrUsed=0;
lpbi->biClrImportant=0;

RGBQUAD *lpQuad=((LPBITMAPINFO)bmih)->bmiColors;

for (int i=0;i<256;i++)
{
lpQuad[i].rgbRed =(unsigned char) i;
lpQuad[i].rgbGreen =(unsigned char) i;
lpQuad[i].rgbBlue =(unsigned char) i;
lpQuad[i].rgbReserved =0;
}

for(int i=0;i<256;i++)
{
for(int j=0;j<256;j++)
{
Pixels[i][j]=(unsigned char)j;
}
}
SetDIBitsToDevice(Canvas->Handle,0,0,256,256,0,0,0,256,Pixels,(LPBITMAPINFO)lpbi,DIB_RGB_COLORS);

}
0090デフォルトの名無しさんNGNG
AnsiString testfunc()
{
 AnsiString test = "abc";
return test;
}

main()
{
 AnsiString str;
 str = testfunc();;
}

というようにやった時strは元のtestがスコープ外に出てしまっているので
中身が不定になる可能性があるのでしょうか?
それともかならずstrの中身はabcになるのでしょうか?
0091デフォルトの名無しさんNGNG
>>90
大丈夫。だと思う。
VCLのソースをみた訳じゃないからなんとも言えないけど、
常識的な文字列クラスなら普通大丈夫。
0092デフォルトの名無しさんNGNG
BC++B6でboost::regexをmakeした人いる?
どうやればいいの?
0093デフォルトの名無しさんNGNG
>>90
常識的な文字列クラスなので、大丈夫。
0094デフォルトの名無しさんNGNG
>>85
行と列が逆なら簡単なんだけど、それじゃだめ?
009585NGNG
>>93
それでも良いです。
教えてください。
009695NGNG
>>94
の間違いでした。
0097デフォルトの名無しさんNGNG
( ゚д゚)σ)´Д`)
0098デフォルトの名無しさん NGNG
StringGridの固定セルをクリックできるようしたいんです。
できますか?

009994NGNG
ファンクタ作って渡せばいいよ。
コンパイラ通してなから間違いがあるかも知れないけど…。

typedef std::vector<AnsiString> StrVec;

class compare_by_nth : public std::binary_function<const StrVec&, const StrVec&, bool>
{
int i_;
public:
compare_by_nth(int i) : i_(i) {}
bool operator<(const StrVec& a, const StrVec& b) const {return a[i_] < b[i_];}
};

std::vector<StrVec> mat;
// mat...

std::sort(mat/begin(), mat.end(), compare_by_nth(1));

詳しいことはSTLスレで聞いて。


0100デフォルトの名無しさんNGNG
>>99
これでは一次元のvectorのソートじゃない?質問は二次元のvectorだった
ような気がするけど。
0101デフォルトの名無しさんNGNG
>>98
マウスクリックを感知できませんか?
■ このスレッドは過去ログ倉庫に格納されています