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

C++Builder相談室 Part6

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


0655_NGNG
http://homepage.mac.com/hiroyuki44/hankaku06.html
0656デフォルトの名無しさんNGNG
>>561
いやOLEとかWSHとかもうわからないんで
>>652
おっとこれってコンポーネントじゃなしにDLLなら使ってみるかな
>>653
ほほぅ、これって始めて見た。
ラッパークラス作った後はどう操作するんだろうか・・
これもあとでためしてみよう

みなさん、ありりん
0657デフォルトの名無しさんNGNG
OpenDailogにラベルやEditボックスを追加したいんですが
どうすれば実現できますか?
0658デフォルトの名無しさんNGNG
>>657
ちょっとはさがせって
http://www.google.co.jp/search?num=20&hl=ja&ie=Shift_JIS&c2coff=1&q=%83R%83%82%83%93%83_%83C%83A%83%8D%83O+%8Ag%92%A3+C%2B%2B&lr=lang_ja
http://www.mahoroba.ne.jp/~makkie7/BCB/
0659デフォルトの名無しさんNGNG
BC6で作成したアプリはmanifestファイルを使ってLuna対応にできるのでしょうか。
BC5ではTListviewをレポートモードにして使っているとダメだったのですが、
BC6+Update#4ではOKですか?
0660_NGNG
http://homepage.mac.com/hiroyuki44/hankaku06.html
0661デフォルトの名無しさんNGNG
>>659
Delphi7ならOKですよ。
0662デフォルトの名無しさんNGNG
>>661
Delphi7相当なのはきっとC++ Builder7ですよね。出るのか知りませんが。
C++ Builder6はダメなのかな。
0663_NGNG
http://homepage.mac.com/hiroyuki44/
0664デフォルトの名無しさんNGNG
Delphi7のVCLをC++Builderに移したりって出来るの?
0665デフォルトの名無しさんNGNG
BCBのヘルプ見にくいんですけど・・・
0666デフォルトの名無しさんNGNG
>>654は無視ですか?
0667デフォルトの名無しさんNGNG
>>666
はい
0668デフォルトの名無しさんNGNG
>>658
いやそれ系はググってアレしたんだけれども
コンポをインスコせずに自分でやりたいのですが
その方法を載ってることってどこでしょうか?
0669デフォルトの名無しさんNGNG
>>668
ソースみりゃいいだろ。
0670デフォルトの名無しさんNGNG
ここは夏厨のスクツのイソターネトですね
0671 NGNG
コンポーネントパレットが表示されないようになってしまったのだけど、
なんとか直す方法ないですかね。
0672デフォルトの名無しさんNGNG
氏ねば
0673デフォルトの名無しさんNGNG
初めまして。5.0を使い始めた者なんですが、実行結果が表示されないんですけど・・・。
form1という何も表示されないウィンドが表示されるだけなんですけど。
別に多機能を使いたいわけではないので、基本的なコンパイルと表示ができれば満足なんですが。
どなたかご教授してもらえませんか?
0674デフォルトの名無しさんNGNG
↑はどうする?
0675デフォルトの名無しさんNGNG
まず、コンソールウィザードを使ってコンソールアプリのプロジェクトを作りましょう。
0676673NGNG
できました!
でも今度は実行結果の表示時間が決められません・・・。
自分はまだ簡単なプログラムしか組めないので。
例えば・・・
{
printf("a\n");
}

だとaが一瞬表示されるだけで終わってしまいます。
ずっと表示させとくことはできないんでしょうか?
0677デフォルトの名無しさんNGNG
最後の方に、getch()でも入れておきましょう。
0678デフォルトの名無しさんNGNG
Borland C++Builder を買おうと思ってるんですが・・・。
Personalでいいんですよね?
ProfessionalとかEnterpriseとかは仕事に使う人向けってことですか?
いやに高い気が・・・。
0679デフォルトの名無しさんNGNG
入門ならpersonalでも十分
Personal>Professonal>Enterpriseの順に添付されているコンポーネント数や
データ―ベースサポート等が増える。

PersonalになくProfessonal以上に有るコンポーネントでも
フリーのものが結構出回ってることが多いはづ
0680673NGNG
>>677
そうですね。わざわざどうも!
0681デフォルトの名無しさんNGNG
エディタの一発ジャンプが…ライブラリよりこっちが重要。>>Pro
0682デフォルトの名無しさんNGNG
一発ジャンプって何?
0683デフォルトの名無しさんNGNG
宣言部と実装部を行ったり来たりしたり、
型や関数をCtrl+Clickで定義部分にジャンプしたり、
関数の宣言を書いてShift+Ctrl+Cで空の実装部を書き込んでくれたり。
0684デフォルトの名無しさんNGNG
フォームにタイマーをセットして時間が来たらフォームをアクティブにしたいのですが
どうやったらいいのでしょうか?エクスプローラなどを上に置いておいて
時間が来たらそのエクスプローラより上に表示したいのですが
よろしくおねがいします
0685デフォルトの名無しさんNGNG
>>684
タイマーイベントで↓のSDK版の関数にフォームのハンドルを渡して呼ぶ。
http://techtips.belution.com/ja/vc/0012/
0686デフォルトの名無しさんNGNG
>>685
お答えどうもです。
SetForegroundWindowは既に試していたのですが、どうにも最上位に
表示してくれませんでした。ちなみにForm1は非表示にして>>684はForm2で
行っているのですが、そこら辺がうまくいかないのと関係しているのでしょうか?
0687デフォルトの名無しさんNGNG
うまくいかなかった理由と解決方法が>>685のページに書いてあるでそ。
0688デフォルトの名無しさんNGNG
>>687
すまん、さっきちゃんと読んだら何か書いてた。ありりん
0689デフォルトの名無しさんNGNG
線を描きたいんだけどどうすればいいの?わけわからん。
0690デフォルトの名無しさんNGNG
Shapeでも使ってろ
0691デフォルトの名無しさんNGNG
TCanvas::LineTo
0692デフォルトの名無しさんNGNG
質問です、よろしくお願いします。
環境はWin2000SP4,BCB6Pro UPD#4です。

250kBのAnsiStringに42kBの\0(0x00)が混じっていまして、
この\0を除去したいので下記の様にしましたら、遅くてとても実用になりませんでした。
速く処理できる方法を教えてください。

\0の数は決まっていない上に位置も不定で、必ずしも一塊になっていません。
↓のgotdatが250kBの文字列です。
//-------その部分のダメなソース--------
while ( gotdat.Pos('\0') > 0){
gotdat.Delete(gotdat.Pos('\0'),1);
}
//------------------------------------

よろしくお願いします。
0693デフォルトの名無しさんNGNG
>>692
・空の dest を定義する。
・gotdat から dest へ、1文字ずつ加えていく。ただし、その文字が '\0' なら、加えない。
・gotdat = dest;
とか?

AnsiString の機能を知らないので、嘘かも。
0694デフォルトの名無しさんNGNG
while(gotdat.Pos('\0') > 0){
lng_pos = gotdat.Pos('\0');
strtmp = gotdat.SubString(1,lng_pos-1);
gotdat = strtmp + Trim(gotdat.Delete(1,lng_pos));
}
0695692NGNG
>>693
ありがとうございます
それ、やってみたんですが、やはり遅いです。
AnsiStringで一文字ずつというのは遅いようです。char*でやれば早いのかも

>>694
ありがとうございます
十分早いです。それで行きます。
0696デフォルトの名無しさんNGNG
char* p = text.c_str();
int   oldLength = text.Length();
int   newLength = 0;

for (int i = 0; i < oldLength; i++)
{
    if (p[i] != '0')
        p[newLength++] = p[i];
}

text.SetLength(newLength);

なら、一瞬でおわるど。
0697デフォルトの名無しさんNGNG
'0' → '\0' だ
0698692NGNG
>>696
ありがとうございます
>>694の方法と比較してみましたら、>>696の方法の方が格段に早いです。
GetTickCount()で計測、6回試行しましたが概ね10msずつ早い
それに>>694の方法はある程度\0がまとまっている事を期待している感じですが、
>>696はまったくそういった依存関係が無い

やはりこういった処理はAnsiStringではなくchar*なんですね、勉強になりました。
ありがとうございました。
0699692NGNG
AnsiStringがどうたらだけでなく、自分自身の領域の中で前に詰めていき、最後に後ろを切って捨てるってことですよね。
他の領域を使わないから、また更に早いと思っていいでしょうか?
ループの中でクラスを呼んでないことが一番効いているのだとは思いますけど。
0700デフォルトの名無しさんNGNG
ああそっか、AnsiStringのc_str()の戻り値は
const char*じゃなくてchar*だったっけ・・・。
0701デフォルトの名無しさんNGNG
>>699
> 自分自身の領域の中で前に詰めていき、最後に後ろを切って捨てるってことですよね。
たとえばstd::removeがとってる手法もこれだね。
こっちは後ろを「切って捨てる」のではなく、「新しい最後尾」を指すポインタなり
イテレータなりを返す仕様だけど。
0702デフォルトの名無しさんNGNG
ループのたびに'\0'の位置を検索したり、文字の長さを変えたりすれば
そりゃあ時間かかるよな。

'\0'の位置がまとまってなくてランダムな配置なら、
悲惨なほど時間がかかる。(250KBで試してるけど、いつまで経っても終わらない)
0703692NGNG
>>701
c⌒っ*゚ー゚)っφ メモメモ...

>>702
>ループのたびに'\0'の位置を検索したり、文字の長さを変えたりすれば
仰せのとおりですね、毎回関数を呼んでいるからか・・・
0704692NGNG
C/C++を知らずにいきなりBCBで始めたものでVCLにドップリ溺れています。
もっとポインタを活用することを学ばねば・・・
0705デフォルトの名無しさんNGNG
classをnewしてsizeofすると何故かどのクラスでも
4しか取れないんですけど、コレってどういうことですか?
0706デフォルトの名無しさんNGNG
ポインタ変数のサイズ
0707デフォルトの名無しさんNGNG
次は、「じゃあどうやってクラスをファイルに書き込めばいいんですか!」かね?
0708デフォルトの名無しさんNGNG
>>707
public変数をそのまま書けばいいんじゃねーの?
0709デフォルトの名無しさんNGNG
>>707

class SerializeableObject
{
public:
 virtual std::string Serialize() = 0;
 virtual void Unserialize(const std::string &str) = 0;
}

ファイルから読み書きできるようにしたいクラスをここから継承して実装書く。
0710デフォルトの名無しさんNGNG
>>705
最適なスレッドかホームページがありそうですが、知らないので。

TYPE *p; と定義したとき、
sizeof(p) と sizeof(TYPE*) はポインタ変数のサイズで、sizeof(*p) と sizeof(TYPE) は TYPE の大きさです。

たぶん。
0711デフォルトの名無しさんNGNG
現在、メインForm(Unit1)からサブForm(Unit2)を
複数呼び出そうとしています。
複数、表示することは可能なのですが、
サブForm毎に制御することが出来ません。
良い方法はないでしょうか?
宜しくお願い致します。

0712デフォルトの名無しさんNGNG
> サブForm毎に制御
何のこっちゃ
0713デフォルトの名無しさんNGNG
サブFormをTListに入れていけば?
そしてサブForm解放時でTListから削除する。
具体的にはTサブFormとTサブFormManagerとでもして。
TサブFormManager->CreateサブForm()でサブFormを作成して返し、
こっそり内部のTListに追加しておく。ついでにサブFormのメンバ変数にTサブFormManagerを保存しとく。
そしてTサブFormのデストラクタではTサブFormManagerから自身を登録解除してもらう。
サブFormが1種類じゃなくて複数種類必要ならTサブFormを継承して使うようにすればいい。
あとはTサブFormManagerのプロパティからインデックスでTサブFormを参照できるようにしたり、
GetActiveサブForm()とか適当にメソッド入れていくと良いのではないだろうか。

TApplicationのComponentsプロパティをループ回して参照するだけでも良いけど。
0714デフォルトの名無しさんNGNG
Screen->Forms
0715デフォルトの名無しさんNGNG
>>712
分かりづらかったですかね。
簡単に言うと、Main画面はSub画面を呼び出す。
Sub画面はボタンにより、Formサイズの変更を行ったりします。
この動作を、MainからSubを複数、呼び出し、
Sub毎に制御を行いたいのですが、上手く動いてくれないのです。

>>713
ちょっとよく分かり辛いのですが。
すみません。

0716デフォルトの名無しさんNGNG
制御て何
0717デフォルトの名無しさんNGNG
>>716
動作をさせることです。
0718デフォルトの名無しさんNGNG
漏れ的解釈

void __fastcall TSubForm::Button1Click(TObject* sender)
{
  Width *= 2; // SubはボタンによりFormサイズの変更をしたりする
}

void TMainForm::hoge(void)
{
  SubForm1 = new TSubForm(this); // MainはSubを複数作って
  SubForm2 = new TSubForm(this);

  SubForm1->Button1->Click(); // Sub毎に…
  SubForm2->Button1->Click();
}
0719デフォルトの名無しさんNGNG
>>718
これだとhogeが動作したときにボタンが押されたと認識して、
サイズが変わってしまいますよね。
でも、これを参考にして作ったらできました。
どうもありがとうございます。
0720デフォルトの名無しさんNGNG
質問ですが、
typedef struct{
 int  A1:1;
 int  A2:4;
} GG;
これでコロンの右の数字ってビット数ですか?
この構造体のサイズは4byteでA1ってHighになってるのでしょうか?
A1に1って代入してA1の値をみてみるとー1ってなってるのですが・・
0721デフォルトの名無しさんNGNG
>>720
それはビットフィールドだろ?
コロンの右の数字はメンバーに割り当てるビット数。
0722デフォルトの名無しさんNGNG
>>721
ありがとうございます。
でA1はLowとHighのどっちにとられるんですか?
0723デフォルトの名無しさんNGNG
>>722
処理系依存。
0724デフォルトの名無しさんNGNG
>>723
ここはC++Builderスレな罠。
0725デフォルトの名無しさんNGNG
>>724
おお、そうだった(笑)
ビットフィールドのビットレイアウトを想定した記述はすべきでないから
どっちから詰められるかを意識したこともないわけだが、
いざ調べてみるとヘルプみても標準の処理系定義項目の設定内容がどこにあるのかわからん・・
0726724NGNG
>>725
> ビットフィールドのビットレイアウトを想定した記述はすべきでないから

はげどう つーか鉄則か。
0727デフォルトの名無しさんNGNG
ん?マジで?なんで?
0728デフォルトの名無しさんNGNG
メモリの少ない組込系ですら使ったことないんだが、
BCBでビットフィールドをあえて使う理由ってあるの?
0729デフォルトの名無しさんNGNG
ビットごとに決められているデータ(ヘッダとか)を扱いやすい。
0730デフォルトの名無しさんNGNG
>>729
それ、ビットフィールドのビットレイアウトを頭に入れないと・・・。
0731デフォルトの名無しさんNGNG
あえて使う理由→データがものすごく巨大になる時
数理計画とかやってるとすごいことにる。
0732デフォルトの名無しさんNGNG
>>729
C++ならビットレイアウトをクラスで隠蔽して、クラス内部でビット演算
すりゃいいじゃんと言うか正攻法だと思うんだけど。

>>731
せいぜい数百Mのデータしか扱ったことがないので気がつかなかった。
0733デフォルトの名無しさんNGNG
>>732
>せいぜい数百Mのデータ

・・・紙テープ換算か何か?ああ、DATか。
0734デフォルトの名無しさんNGNG
>>733
こういう突っかかり方も珍しいな
0735デフォルトの名無しさんNGNG
>>734
そっとしといてやれ。
常人の「寒い」が彼の「鋭い」なんだ。
0736デフォルトの名無しさんNGNG
ようするに>>728-735ら辺ってファイルI/Oが下手でFA
0737_NGNG
http://homepage.mac.com/hiroyuki44/jaz04.html
0738_NGNG
http://homepage.mac.com/hiroyuki44/
0739デフォルトの名無しさんNGNG
Borlandのページにあった
Borland C++Builder 6 アップデートパック #4
を入れたらコンパイル時にリンカエラーとかが発生するようになって、
説明書のチュートリアル進められなくなったんでインスコし直したよ。
旧バージョンに戻したらコンパイルうまくいった。

環境Win98SE
Personal版 C++builder
0740デフォルトの名無しさんNGNG
C++Builder7ってまだか?
0741デフォルトの名無しさんNGNG
↑VC++にしる!
0742デフォルトの名無しさんNGNG
VCなんてうんこは眼中にない
0743デフォルトの名無しさんNGNG
VC買ったんだけどWIN98じゃ動かなかった…
0744デフォルトの名無しさんNGNG
>>743
そんなウンコなOSを使うのは今すぐやめましょう
0745デフォルトの名無しさんNGNG
質問です。
for (int i = 0;i<1000;i++){
Graphics::TBitmap *bmp = new Graphics::TBitmap();
Graphics::TBitmap *bmp2 = new Graphics::TBitmap();
BitBlt(bmp->Canvas->Handle,0,0,bmp->Width,bmp->Height,bmp2->Canvas->Handle,0,0,SRCCOPY);
delete bmp,bmp2;
}
これを実行するとメモリリークするんですが、どこらへんがわるいんですかね?
ちなみに↓でもリークします。

for (int i = 0;i<1000;i++){
TImage *bmp = new TImage(Image1);
TImage *bmp2 = new TImage(Image1);
BitBlt(bmp->Canvas->Handle,0,0,bmp->Width,bmp->Height,bmp2->Canvas->Handle,0,0,SRCCOPY);
delete bmp,bmp2;
}
0746デフォルトの名無しさんNGNG
>>744
OSもVCもうんこ。このメーカー自体うんこだから( ´,_ゝ`)
0747デフォルトの名無しさんNGNG
>>746 お前がうんこ
0748デフォルトの名無しさんNGNG
>>745
deleteに変数並べるのはじめて見たけど、
それだとbmp2のデストラクタが呼ばれないみたいよ。
0749745NGNG
>>748
あ〜、そうだったんですか。
ありがとう。
deleteのとこでなんか違和感を感じてたら…
0750デフォルトの名無しさんNGNG
>>747=うんこ
0751デフォルトの名無しさんNGNG
くせースレだなおい
0752デフォルトの名無しさんNGNG
ということは俺って事か
0753デフォルトの名無しさんNGNG
program Test;
{$APPTYPE CONSOLE}
type
  TTest = class(TObject)
    procedure Init;virtual;abstract;
    constructor Create;
  end;
  TTestA = class(TTest)
    procedure Init;override;
  end;
  TTestB = class(TTest)
    procedure Init;override;
  end;
constructor TTest.Create;
begin
  Init;
end;
procedure TTestA.Init;
begin
  writeln('My name is TestA');
end;
procedure TTestB.Init;
begin
  writeln('My name is TestB');
end;
begin
  TTestA.Create.Free;TTestB.Create.Free;
end.

これと同じ事をC++でやりたいんですけどうまくいかないです。
どうすれば良いんですか?
0754デフォルトの名無しさんNGNG
コンストラクタで仮想関数呼んでも派生クラスのは呼んでくれないよ。
Initメソッドで初期化しないで、TTestA,TTestBにコンストラクタ作って、
そこで初期化しないと。
■ このスレッドは過去ログ倉庫に格納されています