トップページ⇒tech
1001コメント292KB

C++Builder相談室 Part17

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/08(水) 02:01:27
C++Builderに関する質問・回答や議論等を行う相談室スレッド。

【前スレ】
C++Builder相談室 Part16
http://pc8.2ch.net/test/read.cgi/tech/1138766165/l50

過去スレ・関連サイトは>>2-7あたり。


※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/l50
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.10
http://pc8.2ch.net/test/read.cgi/tech/1162262669/l50
0155デフォルトの名無しさん2007/03/02(金) 18:21:10
class TForm1 (略) {
  TNotifyEvent EventHandler_OnClickImage; //イメージ用イベントハンドラ
};

TForm1::EventHandler_OnClickImage(TObject *Sender)
{
 if (Sender == Image1) {
  (略)
 }
}


Image[i]->OnClick = EventHandler_OnClickImage; //イベントハンドラ(クラスメソッドのポインタ)


こんな感じじゃね?
0156デフォルトの名無しさん2007/03/02(金) 18:28:33
>>155
有り難う御座いますm(__)m
挑戦してみます
01571112007/03/05(月) 05:32:43
>>155をもうちょっとかみくだえてもらえたら助かります。
01581552007/03/05(月) 08:45:43
>Image[i]->OnClick = EventHandler_OnClickImage; //イベントハンドラ(クラスメソッドのポインタ)
 ↑
これはイメージのイベントハンドラを外から設定でしょ。

そのためには、イベントハンドラの実体を先に作っとかなければなりません。

先ず、TForm1にイベントハンドラを作っとくとして、イベントハンドラの宣言:
>class TForm1 (略) {
>  TNotifyEvent EventHandler_OnClickImage; //イメージ用イベントハンドラ
>};

あ、ごめんなさい上記間違いでした。
正しくは、
class TForm1 (略) {
  void __fastcall EventHandler_OnClickImage(TObject *Sender);
};
です。

次にイベントハンドラ実体:
TForm1::EventHandler_OnClickImage(TObject *Sender)
{
 if (Sender == Image1) {
  (略)
 }
}
0159デフォルトの名無しさん2007/03/05(月) 08:57:51
何がわからないのか具体的に書け。
0160デフォルトの名無しさん2007/03/05(月) 10:13:21
classとか弄るの難しいなら
ActionListで用意しておいてイベントハンドラにいれるとかどう?
01611112007/03/05(月) 17:39:15
理解できました。m(__)m
0162デフォルトの名無しさん2007/03/05(月) 19:09:19
申し訳ないですが私も教えてください

CreateDIBSection()で作った
HBITMAPをTBitmapに持っていく方法は無いでしょうか?

もしくはクリップボードに持って行ければいいんですが、
SetClipboardDataを使っても持って行けないです。
HP検索したんですが
同じ様な事で悩んで結局出来ない方もいらしたようで
それ以上載っていませんでした

宜しくお願いします



0163デフォルトの名無しさん2007/03/05(月) 22:02:36
>>162
リファレンス読もうよ‥‥(´・ω・`)
__property HBITMAP Handle = {read=GetHandle, write=SetHandle, nodefault};
0164デフォルトの名無しさん2007/03/05(月) 22:27:01
>>163
すいません
読んでHandle を渡したんですが
ヘッダー?大きさが取れたのですが
画像が取れなかったんです....orz

やり方が悪かったのかな
01651622007/03/05(月) 22:43:17

BitBlt(hBitmap,0,0,WhidthTemp,HeightTemp,MeDC,0,0,SRCCOPY);

Graphics::TBitmap *BBitmap = new Graphics::TBitmap;

BBitmap->Handle = hBitmap;

MessageBox(NULL , IntToStr(BBitmap->Height).c_str() ,
"メッセージボックス" , MB_OK);

//これで大きさは合っているのデータは渡ってると思うのですが
//肝心な保存しようと思うとリソース?不足って出て来ます...orz


もう少しやってみます


0166デフォルトの名無しさん2007/03/05(月) 23:09:11
>>165
なんでBitBltのHDC型の第1引数にHBITMAP渡してるんだ?
あとそれなら
TBitmap* BBitmap = new TBitmap();
BBitmap->Width = WidthTemp;
BBitmap->Height = HeightTemp;
BitBlt(BBitmap->Canvas->Handle, 略);
でいいじゃない
01671622007/03/05(月) 23:34:47
>>166
有り難う御座います
何処かのHPにこうやって載っていたもので
(これでもいけるのかと(^^;)

プログラム使わせて貰います
助かります

0168デフォルトの名無しさん2007/03/07(水) 14:50:13
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
Image1->Canvas->Font->Size = 20;
HDC hdc;
RECT MRect;
char str[] = "Draw\nText";
hdc = Image1->Canvas->Handle;
MRect.left = X;
MRect.top = Y;
MRect.right = Image1->Width;
MRect.bottom = Image1->Height;
DrawText(hdc,str,-1,&MRect,DT_WORDBREAK|DT_LEFT);
Repaint();
}

Image上で文字列 "Draw\nText"を二行に表示したものを
マウスを動かすことによって移動させたいのですが、Repa
int();を使って再描画すると、ちらつきがすごいのです。
何か言い方法ありませんか。
Repaint();しないと表示できないんですが。
0169デフォルトの名無しさん2007/03/07(水) 15:16:56
コンストラクタで
Form1->DoubleBuffered = true;

じゃだめなの?
01701682007/03/07(水) 15:48:20
有り難う御座いますm(__)m
PaintBoxのOnPaintを使って
自己解決できました。
0171デフォルトの名無しさん2007/03/08(木) 14:17:27
BCB6です。

関数が出来た時に

//---------------------------------------------------------

が自動でつくんですが、これをつけないように出来ませんでしょうか。
0172デフォルトの名無しさん2007/03/08(木) 19:52:24
出来る
01731712007/03/09(金) 09:15:11
>>172
どこで出来るんですかね。
0174デフォルトの名無しさん2007/03/10(土) 20:35:51
現段階でC++Builder6を買うのはアリかな?
どこも取り寄せになってるけど・・・orz
0175デフォルトの名無しさん2007/03/10(土) 20:40:33
今ならTurboC++のProfessionalでいいんじゃない?
俺ならそうするけど
0176デフォルトの名無しさん2007/03/10(土) 21:15:32
#define SEPARATOR "//--------------------------------------------------------"\

↑これかなぁ?自信なし。
ちなみに当方BCB5です。
0177デフォルトの名無しさん2007/03/10(土) 21:32:36
TurboC++Professionalは4万だしなぁ・・
TurboC++Explorer使うかC++Builder6か
0178デフォルトの名無しさん2007/03/11(日) 01:12:44
そういや、BCB6はPersonalがあったか。制限は覚えてないけど・・・。
0179デフォルトの名無しさん2007/03/11(日) 02:12:18
商利用不可、DB関係のコンポ無し、VCLのソース無し、OutputDebugStrinの出力が見れない、クラスエクスプローラなし、CodeGuardなし、TASM無し。
TurboExplorerは上が可能でコンポーネントをパレットに配置できない(コード上で動的生成のみ)
0180デフォルトの名無しさん2007/03/11(日) 12:22:38
痛いのはソースなしくらいか
0181デフォルトの名無しさん2007/03/11(日) 14:15:09
ソースなんて要らんよ
Personalで十分ですじゃ
0182デフォルトの名無しさん2007/03/11(日) 14:21:38
>181
初心者はソースを読んだほうがいい。というか2択なのか?両方でいいんじゃ?
0183デフォルトの名無しさん2007/03/11(日) 14:26:55
TurboExplorerでしのいで2007を待つのがいいね
0184デフォルトの名無しさん2007/03/12(月) 11:29:26
やっぱ、BCB6は安定してるお。
ライセンスなら購入できるはず。
パッケージは約億?
0185デフォルトの名無しさん2007/03/12(月) 13:55:37
いやいやソース読むなんて時間の無駄、マニアのやることだよ
ゲームとか作るなら知らんがアプリ程度ならソースなんか見なくたってできるし
手早く作るためのポトペタなんだからさ
0186デフォルトの名無しさん2007/03/12(月) 13:56:08
>>184
いやいや、BCB5の方が(笑
0187デフォルトの名無しさん2007/03/12(月) 16:29:42
BCB6といえば、結局共有RTL使わないとCodeGuardでエラー吐くの直ったの?
他にもバグ色々あるけどサービスパック出たという話は聞かないしなぁ。
0188デフォルトの名無しさん2007/03/12(月) 20:27:50
というか、もしかして最近のバージョンは
6よりさらに安定していないの?
0189デフォルトの名無しさん2007/03/12(月) 21:15:48
コンパイラは確実に良くなってる
0190デフォルトの名無しさん2007/03/13(火) 05:24:01
BCB6PROでBDS2006同梱のコンパイラに差し替えてウマー
0191デフォルトの名無しさん2007/03/13(火) 11:16:43
BCB5PRO使ってますが気がつくと実行ファイルのアイコンが
ボーランドのアイコンに変わってしまってました。
プロジェクトのオプションでアイコン指定して再構築してもアイコンが変わってくれなくなりました。
実行ファイルのサイズと関係ありますか?
ちなみにサイズは2,468MBです。
0192デフォルトの名無しさん2007/03/13(火) 12:03:02
>>191
悩むよりResourceHackerとかで書き換えた方が早くね?
0193デフォルトの名無しさん2007/03/13(火) 13:40:41
>>191
BCB1とかBCB3の時代にそんな問題にぶち当たったことがありますが、
そのときはウィンドウズ側のアイコンキャッシュに乗っちゃっている
状態で実際には変わっているのに表示は古いままという現象でした。
0194デフォルトの名無しさん2007/03/13(火) 13:47:43
>>192
そうなんですが、原因がわからないままだと同じ事の繰り返しになるから
>>193
PC再起動してもアイコンは変わらなかったんですよ。

数日まえまではなんとも無かったから実行ファイルのサイズがでかくなったのが
原因なのかなあとか、しかし仮にそれが原因だったとしてもそうなると対処のしようがなくなる・・・
0195デフォルトの名無しさん2007/03/13(火) 13:56:51
BCB6でもあるね。
他のPCで確認して問題なければほっとくけど。
0196デフォルトの名無しさん2007/03/13(火) 13:59:38
exeを他PCにコピーしてもアイコンがボーランドアイコンのまま・・・
01971932007/03/13(火) 13:59:52
>>194
まあ、たぶん違うんだろうと思うけど。
http://leed.issp.u-tokyo.ac.jp/~takeuchi/builder/browse.cgi?index=5422
で紹介されているツールでキャッシュをフラッシュしてみるとか。

あとは、*.res消してビルドしてみるとか、
というか、EXEに含まれているアイコンがちゃんと指定しているものなのかを確認するのが先かな。
0198デフォルトの名無しさん2007/03/13(火) 14:07:27
プロジェクトのオプションでアイコンを再設定して再構築してますよ
01991932007/03/13(火) 14:13:55
>>198
いやだらさ、その行為がうまくいってないんでしょ?
だから、一つ前に戻って何やっているか考えてみなよ?
0200デフォルトの名無しさん2007/03/13(火) 14:34:17
とりあえず報告

resファイルを削除してアイコン変更して再構築でもダメ
んで、デバッグ情報付加しコードガードONして再構築で何故かアイコン復活
更にリリースにしてコードガードオフして再構築してもアイコンがちゃんとしてた。

わけわからん
0201デフォルトの名無しさん2007/03/13(火) 15:32:22
ヒント:今まで一度もそんな事にあったことありません。
0202デフォルトの名無しさん2007/03/13(火) 16:31:29
だろうな
0203デフォルトの名無しさん2007/03/13(火) 18:28:41
俺は昔あるな
結局、プロジェクト作り直したと思う
0204デフォルトの名無しさん2007/03/13(火) 18:36:32
俺は .rc ファイルに MAINICON を直接指定して回避した。
0205デフォルトの名無しさん2007/03/14(水) 06:40:14
一太郎のアイコンがワードに変わったことならあった。
0206デフォルトの名無しさん2007/03/14(水) 11:38:38
えーっと、とりあえず>>200なんだけど今朝みてみたらまたアイコンがボーランドに・・・

1.デバッグ情報付加して再構築でアイコンはOK
2.リリースして再構築でアイコンOK
3.更にリリースのまま再構築するとアイコンがあぼーん(一部のファイルのメイクならOK)

XPはアイコンキャッシュが少ない(デフォ)だとアイコンが腐るってバグがあるらしくて
とりあえずだめもとでキャッシュサイズを2048にしてやったけどやっぱダメ
まあ、出荷時には1,2をやると回避できるからいいんだけど・・・
0207デフォルトの名無しさん2007/03/14(水) 22:32:16
Delphi Unicode Controls というのもをインストールしたのですが
コンポーネントパレットに追加するにはどうしたらいいのでしょうか?
BCB6です。
0208デフォルトの名無しさん2007/03/15(木) 13:47:45
BDS2006使ってますが、これでSTLを使うと、STLソース内でEAccessViolationやらいろいろ例外が出てくるわけですが、
BCBのSTLはあんまり良くないんですか?(多分、自分が間違ってるとは思うんですが・・・

BCBでSTLを使う際、気をつけるべきことなどを教えてください。
0209デフォルトの名無しさん2007/03/15(木) 13:54:57
>>208
再現するソース見せて。
0210デフォルトの名無しさん2007/03/15(木) 14:13:31
>BCBのSTLはあんまり良くないんですか?

評判の良いSTLがバンドルされてるわけですが、何か?
0211デフォルトの名無しさん2007/03/15(木) 14:15:21
>BCBでSTLを使う際、気をつけるべきことなどを教えてください。

イテレーターでレコードを参照する事。
それから、レコードのポインタは取った直後しか信用できないお。
0212デフォルトの名無しさん2007/03/15(木) 14:34:35
>>BCBのSTLはあんまり良くないんですか?
 自分は正しいハズだ!バグだらけのSTLメ
>>?(多分、自分が間違ってるとは思うんですが・・・
 叩かれたらイヤだから一応こう言っておこうか

結論::190% >>208のプログラムバグ
例外発生の呼び出し箇所をデバッガで見れば、普通なら一発で原因はわかる。
0213デフォルトの名無しさん2007/03/15(木) 14:47:45
ま、いいじゃん。

スレ見てる人がSTLの正しい使い方と間違った使い方を理解できるんなら。

ソースキボン。
0214デフォルトの名無しさん2007/03/15(木) 15:13:08
さっさと醤油を見せろ!!
0215デフォルトの名無しさん2007/03/15(木) 15:15:33
うpした瞬間に、
数多くのレスでボコボコにされるのであった。
0216デフォルトの名無しさん2007/03/15(木) 15:17:35
うるせーばか!
02172072007/03/15(木) 18:24:31
Visual C# で Unicode を表示できました。
BCB の方が作りやすいんですが表示できないんじゃしょうがない・・・
0218デフォルトの名無しさん2007/03/15(木) 18:24:53
BCBというか、CodeGuardは信用できないね
STLとは相性悪いと思うよ
0219デフォルトの名無しさん2007/03/16(金) 10:31:56
>>218
俺のvector、今年ついにCodeGuardからエラーが出なくなった
BCB5w
0220デフォルトの名無しさん2007/03/16(金) 11:07:58
vectorを入れ子にするとエラー吐いたりしたからなぁw
0221デフォルトの名無しさん2007/03/16(金) 20:50:51
バージョン毎にSTLのベンダ変わるからたまらん(;´Д`)
0222デフォルトの名無しさん2007/03/17(土) 00:10:52
最近の知らないんだが、何になったの?

BCB5 = RW
BCB6 = STLPort

までは知ってる
0223デフォルトの名無しさん2007/03/17(土) 10:29:41
BDS2006 = Dinkmwareだっけ?
0224デフォルトの名無しさん2007/03/20(火) 22:28:20
BCB5しか知らない年寄りにやさしいスレはここですか?

多国語対応するためBoland Developper Studio 2006(trial)をXPにインストール、TntWareDelphiUnicodeControlsSetup.exeをDLして実行。よくわからんがC:\Program Files\TntWare\Delphi Unicode Controls下のDesignとSourceをインクルードとライブラリのパスに追加。
TntLibR.bpkを開く。メッセージに[警告] 認識できないオプション : M (Pascal コンパイラ)が出る。
無視してプロジェクトマネージャのTntLibR.bplを右クリックしてインストールを選ぶ。
すると[Pascal 致命的エラー] TntWideStrings.pas(19): F1054 Do not refer to TntWideStrings.pas. It works correctly in Delphi 2006.というので、泣いてTntWideStrings.pasをプロジェクトから削除する。
さらにインストールすると、パッケージ:C:\Program Files\TntWare\Delphi Unicode Controls\CBuilder\TntLibR.bplを登録できませんでした。このパッケージはデザイン時には使えません。
となる。

どうやったら上手くいくですか?
0225デフォルトの名無しさん2007/03/21(水) 22:45:48
C++で、テキストファイルの中身を標準出力に吐くものを書いてみました。

#include <iostream>
#include <fstream>
#include <string>
//...
int main(int argc, char* argv[])
{
  std::ifstream ifs("C:\\boot.ini"); // 適当なテキストファイル
  std::string s;
  while (!ifs.eof())
  {
    std::getline(ifs, s);
    std::cout << s << '\n';
  }
  return 0;
}

特に問題なく動いたんですが、CodeGuardをONにしてコンパイル・デバッグして実行すると、
CodeGuardが「関数に不正なファイル/パイプ ストリームが渡されました。」と言います。
どこか間違ってるでしょうか。ご指摘願います。
02262072007/03/21(水) 23:34:12
>>224
当方 BCB6 ですが、いきなり最終手段を。

TntLibD.bpk を開いて TntLibR.bpi と書かれている部分を削除して
インストールしたところ登録されました。

で、実際の使用なんですが、ヘッダファイルがないと言われたので
hpp をプロジェクトフォルダにコピーしてソースの方も hpp に変更。
さらに TntWare\〜\Source 内の pas をプロジェクトに追加して構築したら通りました。

ええ、どう考えても間違ってます。
正しいインストール方法が知りたいですね・・・
0227デフォルトの名無しさん2007/03/23(金) 08:52:56
>>226
いきなり最終手段ですか。奥の手として頂戴しておきます。

大陸の掲示板を見ると記事がありますが・・・・読めん
とりあえず、ありがとうございます。
0228デフォルトの名無しさん2007/03/23(金) 11:23:34
>>225
getline()やってからifs.eof()をチェックする。順番が逆。
0229デフォルトの名無しさん2007/03/24(土) 14:33:15
A->Picture = B->Picture ってやるのと
A->Pictrure->Assign(B->Picture) ってやるのはどっちが速いですかね。

両方同じ画像形式だとして。
0230デフォルトの名無しさん2007/03/24(土) 19:30:25
そのプロパティの代入は
procedure TImage.SetPicture(Value: TPicture);
begin
FPicture.Assign(Value);
end;
が呼ばれるので、効果は全く同じものだが、どっちが早いかといえば
その呼び出しのオーバーヘッドがあるとみればそりゃ下だわな
0231デフォルトの名無しさん2007/03/24(土) 21:38:33
TDriveComboBox を使ってCDなどのドライブに合わせると
IOエラーが出るのですがこれを回避できないでしょうか?

0232デフォルトの名無しさん2007/03/25(日) 01:15:11
>231
SetErrorMode(SEM_NOOPENFILEERRORBOX)でどうでしょう?もとに戻すのを忘れずに。
0233デフォルトの名無しさん2007/03/25(日) 01:44:34
>>232
ありがとう御座います
調べてそれをしたのですが、
ディスクが有りませんというエラーは消えたのですが
どうもTurbo Cの方?
のI/Oエラーと出てくる方が消えなくて困っています

説明不足で済みません
0234デフォルトの名無しさん2007/03/25(日) 01:52:38
エスパー求む。
0235デフォルトの名無しさん2007/03/25(日) 04:40:33
dstring.h だけインクルードする事は出来ますか?

「直接利用せず 'system.hpp' をインクルードしてください。」が出ます。

#include <System.hpp>でしか駄目ですかね。

0236デフォルトの名無しさん2007/03/27(火) 11:29:36
質問ですが、
BCB6を使ったアプリをVista対応したいのですが、
BDS2006(2007はDelphiしか出てないorz)等を使って、
うpグレードされたVCLでExeを作るべきなのでしょうか?

簡単にBCB6のままVista対応したいのですが、
既にVista対応された方はどうされたのでしょうか?
0237デフォルトの名無しさん2007/03/27(火) 13:26:23
Vista持ってないから知らんけどVista以外で作ったアプリでもある程度普通に動くんじゃないのか?
0238デフォルトの名無しさん2007/03/27(火) 14:14:48
BCB2006ってVista対応してるのか?マジか?

0239デフォルトの名無しさん2007/03/27(火) 19:08:11
>>236
俺は普通にBCB6で作ったアプリをVistaRC2で動作確認してVista対応としてるけど。
0240デフォルトの名無しさん2007/03/27(火) 19:51:54
>Vista対応としてるけど。

対応方法教えて下さい。








こちらは未だVi$ta用PC見積もり中orz
0241デフォルトの名無しさん2007/03/28(水) 00:35:57
sscanfが64ビットに対応していない様なのですが、
64ビットに対応した↓これと同じ事をBCB6で行うにはどうすれば良いのでしょうか?

sscanf( str, "-D%lx", &Wd );
0242デフォルトの名無しさん2007/03/28(水) 06:44:14
printf系なら"%I64d"とかだけど
scanf系は知らね
0243デフォルトの名無しさん2007/03/28(水) 20:01:08
あるコンポーネントを、フォr−ムに設置して実行→終了すると
 プロジェクト Project1.exe が EAccessViolation クラスの例外を生成しました。
という例外が出てしまいます。
どうしてこんな例外が出てしまうのでしょうか?同じことを体験した方はいませんか?

実行環境はWinXp, C++Builder6Proです。
あるコンポーネントとは、TRichEditやTCppWebBrowserやTDdeServerConv...等です。
BCB6を削除したあと、インストールし直してみましたがダメでした。
TRichEditやTCppWebBrowser等が使用するシステムファイルがぶっ壊れているのかもと考えましたが
怖くなったのですぐにその考えは頭から消し去りました。
原因か解決策があれば教えてください…よろしくお願いします。
0244デフォルトの名無しさん2007/03/28(水) 22:49:02
Delphiとかでも良く起きるので、いつも中間ファイルをバッチファイルで削除している
0245デフォルトの名無しさん2007/03/29(木) 00:08:42
>>243
フォームに設置するのみで起こるのか?
0246デフォルトの名無しさん2007/03/29(木) 09:51:10
すんません。リンク貼らさせていただきます。
過疎または隔離スレで誰も見に来ないのか、それとも質問が幼稚過ぎなのか・・不安なので
よろしくです。

くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/22-23
0247デフォルトの名無しさん2007/03/29(木) 12:30:34
>>244-245ありがとうございます。
手順の説明が足りませんでした。すみません。
BCB起動→新規作成→アプリケーション→あるコンポーネントをフォームに配置→実行→何もせず終了
で、終了時にEAccessViolationが投げられてしまうんです。
TButton, TEdit, TMemo等を配置しても、この例外は投げられませんでした。
0248デフォルトの名無しさん2007/03/29(木) 12:34:37
>>247
CodeGuardつけてみたら?
0249デフォルトの名無しさん2007/03/29(木) 19:06:35
>>248
逆にCodeGuardつけてるからだったりして。

BCB6で Update#4 入れるとCodeGuardがバグるらしいぞ。
0250デフォルトの名無しさん2007/03/29(木) 22:50:52
>>248-249ありがとうございます
CodeGuardを有効にしてみましたが、相変わらず終了時に例外が出るだけでした…
0251デフォルトの名無しさん2007/03/30(金) 10:45:48
TFormのキャプションの表示位置は常に中央ですが
これをTLabelのAlignmentのように位置を変更する方法を教えてください
0252デフォルトの名無しさん2007/03/31(土) 09:16:11
>251
> TFormのキャプションの表示位置は常に中央ですが
えっ?
0253デフォルトの名無しさん2007/04/01(日) 11:12:32
>>251
空白でも入れて調整しろ
0254デフォルトの名無しさん2007/04/01(日) 11:39:23
>251
それなんてWindows3.1?
■ このスレッドは過去ログ倉庫に格納されています