C++Builder相談室 Part6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG過去スレ・関連サイトは>>2-10あたり。
0656デフォルトの名無しさん
NGNGいやOLEとかWSHとかもうわからないんで
>>652
おっとこれってコンポーネントじゃなしにDLLなら使ってみるかな
>>653
ほほぅ、これって始めて見た。
ラッパークラス作った後はどう操作するんだろうか・・
これもあとでためしてみよう
みなさん、ありりん
0657デフォルトの名無しさん
NGNGどうすれば実現できますか?
0658デフォルトの名無しさん
NGNGちょっとはさがせって
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デフォルトの名無しさん
NGNGBC5ではTListviewをレポートモードにして使っているとダメだったのですが、
BC6+Update#4ではOKですか?
0661デフォルトの名無しさん
NGNGDelphi7ならOKですよ。
0662デフォルトの名無しさん
NGNGDelphi7相当なのはきっとC++ Builder7ですよね。出るのか知りませんが。
C++ Builder6はダメなのかな。
0663_
NGNG0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNGはい
0668デフォルトの名無しさん
NGNGいやそれ系はググってアレしたんだけれども
コンポをインスコせずに自分でやりたいのですが
その方法を載ってることってどこでしょうか?
0669デフォルトの名無しさん
NGNGソースみりゃいいだろ。
0670デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNGform1という何も表示されないウィンドが表示されるだけなんですけど。
別に多機能を使いたいわけではないので、基本的なコンパイルと表示ができれば満足なんですが。
どなたかご教授してもらえませんか?
0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG0676673
NGNGでも今度は実行結果の表示時間が決められません・・・。
自分はまだ簡単なプログラムしか組めないので。
例えば・・・
{
printf("a\n");
}
だとaが一瞬表示されるだけで終わってしまいます。
ずっと表示させとくことはできないんでしょうか?
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGPersonalでいいんですよね?
ProfessionalとかEnterpriseとかは仕事に使う人向けってことですか?
いやに高い気が・・・。
0679デフォルトの名無しさん
NGNGPersonal>Professonal>Enterpriseの順に添付されているコンポーネント数や
データ―ベースサポート等が増える。
PersonalになくProfessonal以上に有るコンポーネントでも
フリーのものが結構出回ってることが多いはづ
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNG0683デフォルトの名無しさん
NGNG型や関数をCtrl+Clickで定義部分にジャンプしたり、
関数の宣言を書いてShift+Ctrl+Cで空の実装部を書き込んでくれたり。
0684デフォルトの名無しさん
NGNGどうやったらいいのでしょうか?エクスプローラなどを上に置いておいて
時間が来たらそのエクスプローラより上に表示したいのですが
よろしくおねがいします
0685デフォルトの名無しさん
NGNGタイマーイベントで↓のSDK版の関数にフォームのハンドルを渡して呼ぶ。
http://techtips.belution.com/ja/vc/0012/
0686デフォルトの名無しさん
NGNGお答えどうもです。
SetForegroundWindowは既に試していたのですが、どうにも最上位に
表示してくれませんでした。ちなみにForm1は非表示にして>>684はForm2で
行っているのですが、そこら辺がうまくいかないのと関係しているのでしょうか?
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGすまん、さっきちゃんと読んだら何か書いてた。ありりん
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNG0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
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・空の dest を定義する。
・gotdat から dest へ、1文字ずつ加えていく。ただし、その文字が '\0' なら、加えない。
・gotdat = dest;
とか?
AnsiString の機能を知らないので、嘘かも。
0694デフォルトの名無しさん
NGNGlng_pos = gotdat.Pos('\0');
strtmp = gotdat.SubString(1,lng_pos-1);
gotdat = strtmp + Trim(gotdat.Delete(1,lng_pos));
}
0695692
NGNGありがとうございます
それ、やってみたんですが、やはり遅いです。
AnsiStringで一文字ずつというのは遅いようです。char*でやれば早いのかも
>>694
ありがとうございます
十分早いです。それで行きます。
0696デフォルトの名無しさん
NGNGint 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デフォルトの名無しさん
NGNG0698692
NGNGありがとうございます
>>694の方法と比較してみましたら、>>696の方法の方が格段に早いです。
GetTickCount()で計測、6回試行しましたが概ね10msずつ早い
それに>>694の方法はある程度\0がまとまっている事を期待している感じですが、
>>696はまったくそういった依存関係が無い
やはりこういった処理はAnsiStringではなくchar*なんですね、勉強になりました。
ありがとうございました。
0699692
NGNG他の領域を使わないから、また更に早いと思っていいでしょうか?
ループの中でクラスを呼んでないことが一番効いているのだとは思いますけど。
0700デフォルトの名無しさん
NGNGconst char*じゃなくてchar*だったっけ・・・。
0701デフォルトの名無しさん
NGNG> 自分自身の領域の中で前に詰めていき、最後に後ろを切って捨てるってことですよね。
たとえばstd::removeがとってる手法もこれだね。
こっちは後ろを「切って捨てる」のではなく、「新しい最後尾」を指すポインタなり
イテレータなりを返す仕様だけど。
0702デフォルトの名無しさん
NGNGそりゃあ時間かかるよな。
'\0'の位置がまとまってなくてランダムな配置なら、
悲惨なほど時間がかかる。(250KBで試してるけど、いつまで経っても終わらない)
0703692
NGNGc⌒っ*゚ー゚)っφ メモメモ...
>>702
>ループのたびに'\0'の位置を検索したり、文字の長さを変えたりすれば
仰せのとおりですね、毎回関数を呼んでいるからか・・・
0704692
NGNGもっとポインタを活用することを学ばねば・・・
0705デフォルトの名無しさん
NGNG4しか取れないんですけど、コレってどういうことですか?
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGpublic変数をそのまま書けばいいんじゃねーの?
0709デフォルトの名無しさん
NGNGclass SerializeableObject
{
public:
virtual std::string Serialize() = 0;
virtual void Unserialize(const std::string &str) = 0;
}
ファイルから読み書きできるようにしたいクラスをここから継承して実装書く。
0710デフォルトの名無しさん
NGNG最適なスレッドかホームページがありそうですが、知らないので。
TYPE *p; と定義したとき、
sizeof(p) と sizeof(TYPE*) はポインタ変数のサイズで、sizeof(*p) と sizeof(TYPE) は TYPE の大きさです。
たぶん。
0711デフォルトの名無しさん
NGNG複数呼び出そうとしています。
複数、表示することは可能なのですが、
サブForm毎に制御することが出来ません。
良い方法はないでしょうか?
宜しくお願い致します。
0712デフォルトの名無しさん
NGNG何のこっちゃ
0713デフォルトの名無しさん
NGNGそしてサブ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デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG分かりづらかったですかね。
簡単に言うと、Main画面はSub画面を呼び出す。
Sub画面はボタンにより、Formサイズの変更を行ったりします。
この動作を、MainからSubを複数、呼び出し、
Sub毎に制御を行いたいのですが、上手く動いてくれないのです。
>>713
ちょっとよく分かり辛いのですが。
すみません。
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG動作をさせることです。
0718デフォルトの名無しさん
NGNGvoid __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これだとhogeが動作したときにボタンが押されたと認識して、
サイズが変わってしまいますよね。
でも、これを参考にして作ったらできました。
どうもありがとうございます。
0720デフォルトの名無しさん
NGNGtypedef struct{
int A1:1;
int A2:4;
} GG;
これでコロンの右の数字ってビット数ですか?
この構造体のサイズは4byteでA1ってHighになってるのでしょうか?
A1に1って代入してA1の値をみてみるとー1ってなってるのですが・・
0721デフォルトの名無しさん
NGNGそれはビットフィールドだろ?
コロンの右の数字はメンバーに割り当てるビット数。
0722デフォルトの名無しさん
NGNGありがとうございます。
でA1はLowとHighのどっちにとられるんですか?
0723デフォルトの名無しさん
NGNG処理系依存。
0724デフォルトの名無しさん
NGNGここはC++Builderスレな罠。
0725デフォルトの名無しさん
NGNGおお、そうだった(笑)
ビットフィールドのビットレイアウトを想定した記述はすべきでないから
どっちから詰められるかを意識したこともないわけだが、
いざ調べてみるとヘルプみても標準の処理系定義項目の設定内容がどこにあるのかわからん・・
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGBCBでビットフィールドをあえて使う理由ってあるの?
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNGそれ、ビットフィールドのビットレイアウトを頭に入れないと・・・。
0731デフォルトの名無しさん
NGNG数理計画とかやってるとすごいことにる。
0732デフォルトの名無しさん
NGNGC++ならビットレイアウトをクラスで隠蔽して、クラス内部でビット演算
すりゃいいじゃんと言うか正攻法だと思うんだけど。
>>731
せいぜい数百Mのデータしか扱ったことがないので気がつかなかった。
0733デフォルトの名無しさん
NGNG>せいぜい数百Mのデータ
・・・紙テープ換算か何か?ああ、DATか。
0734デフォルトの名無しさん
NGNGこういう突っかかり方も珍しいな
0735デフォルトの名無しさん
NGNGそっとしといてやれ。
常人の「寒い」が彼の「鋭い」なんだ。
0736デフォルトの名無しさん
NGNG0738_
NGNG0739デフォルトの名無しさん
NGNGBorland C++Builder 6 アップデートパック #4
を入れたらコンパイル時にリンカエラーとかが発生するようになって、
説明書のチュートリアル進められなくなったんでインスコし直したよ。
旧バージョンに戻したらコンパイルうまくいった。
環境Win98SE
Personal版 C++builder
0740デフォルトの名無しさん
NGNG0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGそんなウンコなOSを使うのは今すぐやめましょう
0745デフォルトの名無しさん
NGNGfor (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デフォルトの名無しさん
NGNGOSもVCもうんこ。このメーカー自体うんこだから( ´,_ゝ`)
0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNGdeleteに変数並べるのはじめて見たけど、
それだとbmp2のデストラクタが呼ばれないみたいよ。
0749745
NGNGあ〜、そうだったんですか。
ありがとう。
deleteのとこでなんか違和感を感じてたら…
0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNG{$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デフォルトの名無しさん
NGNGInitメソッドで初期化しないで、TTestA,TTestBにコンストラクタ作って、
そこで初期化しないと。
■ このスレッドは過去ログ倉庫に格納されています