C++Builder相談室 Part15
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/21(日) 17:48:30過去スレ・関連サイトは>>2-7あたり。
0008デフォルトの名無しさん
2005/08/21(日) 19:08:09(・∀・)乙カレー
0009デフォルトの名無しさん
2005/08/21(日) 19:24:02ちまたには、version 4 や 6 の本は普通に出版されているが、5 の本はほとんど
見たことが無い。
6 の本を買うと仮定すると、本の解説で 5 と 6 の違いが気になるわけだが、どこ
ら辺に違いがあるか気になるもんだ。
6 の本でもほとんど支障なく学習できるんだったらいいけど。
0010デフォルトの名無しさん
2005/08/21(日) 22:40:304→5のタイミングが短すぎたんだっけ?
別に6本でも問題無いでしょ。VCLはあんま変わってないし。
0011デフォルトの名無しさん
2005/08/22(月) 00:15:59と思う。
Delphi→BCBへの変換は、ほとんど一対一に対応しているので、一度Object
Pascalを読めるようになれば、Delphiの本で十分。
0012デフォルトの名無しさん
2005/08/22(月) 17:34:01ショートカットのイベントハンドラのようなものを実装するにはどうすればいいのでしょうか?
0013デフォルトの名無しさん
2005/08/22(月) 21:58:45Pascalは知ってる。一冊の本をよく読んで練習問題のプログラムを書いたりしてた。
正に、Delphiの基礎学力をつけるのが目的でPascalを学習してたからな。
Object Pascalの学習はまだこれからだけど。
そういえば、VCL相談室というスレであってもいいなあ。
でも、言語を区別しておかないと、Object Pascalの知識の無い人には困るか。
0014デフォルトの名無しさん
2005/08/22(月) 22:41:49なんかの難解なマクロを使わないといけない。
あれ初心者には絶対理解不可能だと思った。逆にDelphiとBCBを両方使ってる
と、「なんでmessageが無いんじゃゴルァ!」という事ですぐに見つけるわけだ。
BCBはC++の延長線上にある自然な拡張がされてない。全部Delphiの動作を
エミュレートするようにされてしまってる。VCLがObject Pascal用にしか作られていな
いので仕方ないとは言え、手抜きだなぁ。でもそのお陰で、Delphi用に作られた
コンポーネントの有り難みを享受できるのも確かだが。
0015デフォルトの名無しさん
2005/08/23(火) 00:10:00>BEGIN_MESSAGE_HANDLER
別に難解とは思わないが、その辺のBCB独自の拡張を簡単簡潔に網羅した
マニュアルが用意してあればいいんだがなぁ。
0016デフォルトの名無しさん
2005/08/23(火) 00:45:35付属のあのごついマニュアルなんて、中身はHELPと全く同じだしな。
Open配列を真似るARRAYOFCONSTマクロなんか、ソース見てみると、
苦心の跡というよりはやっつけ仕事のように見える。
0017デフォルトの名無しさん
2005/08/23(火) 00:52:32__classid, __closure, __declspec(の一部), __property, __publishedと。
messageはあれば便利って程度だから、追加されなかったんでない?必要最低限のだけ追加したって感じで。
BEGIN_MESSAGE_HANDLER〜のマクロは、なんかダサいから使わないで、ウィンドウプロシージャでディスパッチしてる。
関数にするまでもない短いコードもよくあるしね。
0018デフォルトの名無しさん
2005/08/23(火) 00:58:31プロパティはdefaultが使えないんだよね。もっともそれをやっちゃあ、
C++の名前照合規則をぶっ壊してしまうわけなんでやめたんだろうけど。
0019デフォルトの名無しさん
2005/08/23(火) 01:11:58え、使えない?
0020デフォルトの名無しさん
2005/08/23(火) 01:16:41ごめん。使えないというより、Delphiとの意味が違ってる。
Delphiだと、クラス変数名書いただけで、あるプロパティが使われたでしょ。
BCBは初期値設定の意味になってる。
0021デフォルトの名無しさん
2005/08/23(火) 01:35:12あ配列プロパティのdefaultか。普通のプロパティのは同じ意味だよね?
C++だとoperator[]があるからかな。ただBCBはVCLクラスがnewで作んなきゃいけないから、operator[]が定義されてても何か見た目がよくないね。
TStringList* pStrings = new TStringList();
:
(*pStrings)[0] = "hoge" は格好わるいから普通、pStrings->Strings[0] = "hoge" だろうね。
参照使えばDelphiぽくできるけど、いちいちちょっとね。
TStringList& strings = *pStrings;
strings[0] = "hoge";
0022デフォルトの名無しさん
2005/08/23(火) 01:44:57はい、そうですぅ。済みません。
じゃじゃ馬BCB6で遊んでます。コンパイル速度も、今時のCPUなら十分速いし、
ちょっとしたGUIツールを作るにはぴったりです。
でも新製品が出ませんねorz
0023デフォルトの名無しさん
2005/08/23(火) 04:16:53こんなんがあるせいで、理解が少し遅れた。
ひたすら無駄なマクロ。
0024デフォルトの名無しさん
2005/08/23(火) 04:32:16後は次の所に放り投げれば済む話なんですよね。
Windowsのメッセージがチェイン構造になっているのは、初めて知った時は
ひたすら気持ち悪かった。
0025デフォルトの名無しさん
2005/08/23(火) 12:33:10皆が何言ってるかさっぱりワカランorz
0026デフォルトの名無しさん
2005/08/23(火) 13:41:44冬に出るだろ。
Delphi2006が‥‥
0027デフォルトの名無しさん
2005/08/23(火) 16:17:12を使って300行のCプログラムをコンパイルしました。
しかしコマンドプロンプトからEXEファイルを実行しても全く動作しません。
試しにそのEXEファイルのソースのmainの一番最初に、print("check..");とか入れてみましたが、
こちらも表示されませんでした。
Cのプログラムでこんな事ってあるのでしょうか?
コンパイラに原因は無いですよね・・・?
0028デフォルトの名無しさん
2005/08/23(火) 16:18:27を使って300行のCプログラムをコンパイルしました。
しかしコマンドプロンプトからEXEファイルを実行しても全く動作しません。
試しにそのEXEファイルのソースのmainの一番最初に、print("check..");とか入れてみましたが、
こちらも表示されませんでした。
Cのプログラムでこんな事ってあるのでしょうか?
コンパイラに原因は無いですよね・・・?
0029デフォルトの名無しさん
2005/08/23(火) 16:22:58よくあるのが、「DOS窓が一瞬開いてすぐ閉じるんですけど」って質問だけど、DOS窓も表示されない?
あとBCCはこっちのスレね↓
タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/
0030デフォルトの名無しさん
2005/08/23(火) 16:29:30いえ、
test.cppを以下のようにコンパイル、実行しました
C:\ディレクトリ>bcc32 test.cpp
C:\ディレクトリ>省略(コンパイルが通ります)
そこで、text.exe(exeまで打たないと何故か実行できない)を実行します。
C;\ディレクトリ>text.exe (enter押します
test
C:\ディレクトリ>
このように出て、main関数が実行されません。
上のURLのところ行ってみます。
0031デフォルトの名無しさん
2005/08/23(火) 17:00:27exeまで打たないと実行できないってヒジョーにアヤしげだなぁ
0032デフォルトの名無しさん
2005/08/23(火) 17:04:58testの間違いです。。。
怪しげって何が怪しいんでしょうKA。
0033デフォルトの名無しさん
2005/08/23(火) 17:10:10いや、何かそこに理由がありそうだなぁ、と。全然わかんないんだけどね。役立たずで申し訳ない
0034デフォルトの名無しさん
2005/08/23(火) 17:25:14分からないのにスレ違いのネタ引っ張るなよ。
0035デフォルトの名無しさん
2005/08/23(火) 17:28:070036デフォルトの名無しさん
2005/08/23(火) 17:31:05って何( ´∀`)?
ってか、本当にコンパイル通ってるのかYO!
#include <stdio.h>
int main()
{
print("check");
return 0;
}
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
エラー E2268 test.cpp 5: 未定義の関数 'print' を呼び出した(関数 main() )
*** 1 errors in Compile ***
0037デフォルトの名無しさん
2005/08/23(火) 22:23:27タイプミスですた・・・ww
0038デフォルトの名無しさん
2005/08/23(火) 22:55:340039デフォルトの名無しさん
2005/08/24(水) 00:16:42実行しているのか? つーか、test をtextと書いたり、printとか何とか、
実際にやった内容と違うことばっかり書いて質問されてもなぁ・・・
問題の切り分けをするなら、300行のナントカは、ともかく、最低限、
printfが1行だけある main() をコンパイルしてみて、できた実行ファイルを、
ルートからフルパスで指定して動かしてみること。
変なパスが通っていて、ヨソにあるexeを実行していたりしないか?
あと、"check.." って、もしかして、改行マークなし? バッファのフラッシュを
しないなら、\nがいるんじゃないかな。
いずれにせよ、完全にスレ違いなので、続きは誘導先でやってくれ。
0040デフォルトの名無しさん
2005/08/24(水) 00:47:59004140
2005/08/24(水) 00:48:420042デフォルトの名無しさん
2005/08/24(水) 08:42:39なんてあるわけないし。 100%間違いなく、操作間違ってる。
0043デフォルトの名無しさん
2005/08/24(水) 11:35:30Transparentをtrueにするとたまにグラフが描画されなくなります。
なんとなく、Canvasからはみ出たときに起こるのですが
これの対処法を教えてください。
0044デフォルトの名無しさん
2005/08/24(水) 12:19:18まずは「なんとなく」の部分をはっきりさせるべし
0045デフォルトの名無しさん
2005/08/24(水) 12:22:03Transparentをtrueにしたとき透明表示される色は特に指定しなければ
確か一番左下のドットの色だっけか?
まずはsageようか。
0046デフォルトの名無しさん
2005/08/24(水) 13:20:48sage厨はスルーで
0047デフォルトの名無しさん
2005/08/24(水) 13:44:48ありがとうございます。
「一番左下のドットの色」で全ての謎がとけました。
グラフを描画する時にCanvasからはみだしてもちゃんと描画されるときと
されない時で描画されない時は左下のドットに描画してる時でした。
予めTransparentColorに色を与えておいて見事に解決しました。
0048デフォルトの名無しさん
2005/08/24(水) 17:32:45新党日本
0049デフォルトの名無しさん
2005/08/24(水) 18:08:290050デフォルトの名無しさん
2005/08/24(水) 18:14:300051デフォルトの名無しさん
2005/08/24(水) 22:05:150052デフォルトの名無しさん
2005/08/24(水) 22:16:57form->Show();
0053デフォルトの名無しさん
2005/08/27(土) 10:05:22MySQLのSSL通信機能はver4.1から正式にサポートされたものなんですが…。
005430
2005/08/30(火) 00:02:36あるグローバル変数を配列を数千×数千で定義していたので出来ませんでした。
百×百位にしてコンパイルしたら実行できました。
しかし実行には.EXEつけないと無理ですが・・・。
0055デフォルトの名無しさん
2005/08/30(火) 00:50:31うーん、まだまだあやしい。。。 けど、このスレで続けるのは変だから、
うだうだ書くのはやめておくね。
0056デフォルトの名無しさん
2005/08/31(水) 14:08:58『グローバル変数』なら配列の要素が大きくてもそこまで問題じゃないんじゃね?
仮にintで2000x2000だとしたら約15MBくらい
『オート変数』の間違いでは・・・
あと、exeつけないと実行できないんだったら、コマンドプロンプトで『notepad』は起動するんか?
0057デフォルトの名無しさん
2005/08/31(水) 22:03:56>>38を声に出して百回読め、このあきめくら。
0058デフォルトの名無しさん
2005/08/31(水) 22:53:550059デフォルトの名無しさん
2005/08/31(水) 23:16:09ファイル(F)-新規作成(N)のフォームタブに
自作のフォームを追加したいのですが、方法がよくわかりません。
プロジェクト(P)-リポジトリに追加(T)で追加できそうなのはわかったのですが、
フォームを新規作成した状態では、リポジトリに追加(T)は無効になっています。
どのようにすれば、自作フォームを追加できるでしょうか。
よろしくお願いします。
0060デフォルトの名無しさん
2005/09/01(木) 00:05:04フォーム右クリックで「リポジトリに追加」
0061デフォルトの名無しさん
2005/09/01(木) 00:52:43さんくすです。出来ました。
右クリックにあったんですね。気づきませんですた。
0062デフォルトの名無しさん
2005/09/03(土) 18:16:430063デフォルトの名無しさん
2005/09/03(土) 18:23:000064デフォルトの名無しさん
2005/09/03(土) 20:02:330065デフォルトの名無しさん
2005/09/04(日) 00:36:16http://thunder.prohosting.com/~cbdn/k009.htm
0066デフォルトの名無しさん
2005/09/04(日) 05:06:55サイズは48×48
DrawIconEx(Image1->Canvas->Handle, 0, 0, Application->Icon->Handle, 48, 48, 0, 0, DI_NORMAL);
0067デフォルトの名無しさん
2005/09/04(日) 12:28:100068デフォルトの名無しさん
2005/09/04(日) 12:31:170069デフォルトの名無しさん
2005/09/04(日) 12:55:46double 型の変数から Currency 型の変数に値を変換して設定するための
標準的な関数がありそうな気がします(いや、きっとあるはず)が、見つけ
られません・・・
おしえてくださいませ。m(_._)m
ちなみに・・・
文字列⇔Currency は、StrToCurr, CurrToStr
Currency → double は operator double()
など、その周辺はすぐ見つけられますね。
こういった逆引きって結構時間かかりまっすねぇ・・・
#Variant 型を経由しなきゃダメなんて落ちじゃないですよねー。
0070デフォルトの名無しさん
2005/09/04(日) 13:02:52__fastcall Currency(double val);
0071デフォルトの名無しさん
2005/09/04(日) 13:04:080072デフォルトの名無しさん
2005/09/04(日) 13:05:320073デフォルトの名無しさん
2005/09/05(月) 17:06:170074デフォルトの名無しさん
2005/09/07(水) 13:22:45メインフォームから動的に作成した子フォームを
MDI親フォームとする方法を教えてください。
0075デフォルトの名無しさん
2005/09/08(木) 01:08:11TFormはfsMDIChildeのとき、問答無用でメインフォームを親フォームにするみたいだな。
つうわけで無理っぽい。
0076デフォルトの名無しさん
2005/09/08(木) 01:48:16しないだろう。
ユーザは減っていくだけ!!
もし、DELPHI2006無償配布を多くしたら復活の道あるのに。。
0077デフォルトの名無しさん
2005/09/08(木) 06:13:33http://www.geocities.jp/octbery/program.html
・画像処理・エフェクトの準備
・グレースケール : 画像を白黒画像に変換
・2値化 : 特定のレベルをしきい値として、しきい値より明るいピクセルは白に、暗いピクセルは黒に変換
・階調の反転 : 画像の階調を反転
・ポスタリゼーション : 画像の階調を変える
・wipein : 画像をワイプイン
・wipeout : 画像をワイプアウト
・fadein : 画像をフェードインする
・fadeout : 画像をフェードアウトする
タイマー関連
・プログラムの実行時間を計測
その他
・コントロールの再描画時のちらつきを減らす
・midi音源から音を鳴らす
0078デフォルトの名無しさん
2005/09/08(木) 08:42:26やっぱりorz
ありがとうございました
0079デフォルトの名無しさん
2005/09/08(木) 09:33:19Windows API SystemParametersInfo()を使用します。
Example:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRect r ;
SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
Form1->Top = r.Top;
Form1->Left = r.Left;
Form1->Width = r.Right - r.Left;
Form1->Height = r.Bottom - r.Top;
}
0080デフォルトの名無しさん
2005/09/08(木) 10:04:590081デフォルトの名無しさん
2005/09/08(木) 10:55:02CreateParamsがオーバーライド出きる様に変更されてて、
生成処理差し替え出きると思ったが。
0082質問者
2005/09/08(木) 11:33:29MDIChildのフォームの親フォーム(MDIForm)はメインフォームの子フォーム
である事が絶対でありメインフォーム自体を変更するのは無しです。
この方法は可能ですか?
0083Image
2005/09/08(木) 11:44:47その際ScanLineを使いたいと思っています。
Delphiではできたのですが、C++Bulderではよくわかりません。
変数の宣言等等含め教えていただけたらと思います。
0084デフォルトの名無しさん
2005/09/08(木) 11:51:51たとえば24bit幅100pixelなビットマップの12行目を黒に塗りつぶす場合
int line = 12;
char* ptr = static_cast<char*>(Bitmap->Scanline[line]);
for(int i =0; i<100; i++)
{
*ptr = 0; ptr++; //青
*ptr = 0; ptr++; //赤
*ptr = 0; ptr++; //緑
}
あとは考えれ。
0085Image
2005/09/08(木) 12:34:43回答ありがとうございます。
ごめんなさい。理解が追いつかないです。
配列に読み込んだデータImage[100][100]があるとすると
それはどのように扱うのですか?
0086デフォルトの名無しさん
2005/09/08(木) 13:07:36ちょっとわからん
0087デフォルトの名無しさん
2005/09/08(木) 13:38:34Scanlineの返す値が何なのか理解してるか?
0088Image
2005/09/08(木) 13:44:09ちなみにDelphiでは以下のように書きました。
for y:=0 to ysize-1 do
begin
p:=bmp.ScanLine[y];
{y列めのデータのアドレスにポインタをセット}
for x:=0 to xsize-1 do
begin
c:=xy[y,x]-(wl-(ww div 2));
c:=(c*256) div ww;
if c > 255 then c:=255;
if c < 0 then c:=0;
p^[x].r:=c ;
p^[x].g:=c ;
p^[x].b:=c ;
end;
end;
form1.image1.Canvas.Draw(0,0,bmp);
end;
0089Image
2005/09/08(木) 14:22:23Bitmap->Scanline[line]
Bitmapの一列分のデータを返すものだとなんとなくですが
理解しています。
ただ、
BitMap.LoadFromFile('C:\Program Files\Common Files\Borland Shared\
Images\Splash\256color\factory.bmp');
みたいな感じに、先にBitmapに画像を読み込んでいるわけではないので
そのあたりがどのようになるか知りたかったわけです。
説明が悪くすみません。
0090デフォルトの名無しさん
2005/09/08(木) 17:40:38予め読み込んでいない Bitmap は真っ白なビットマップです。
Scanline[y] が返すポインタは型なしですが、その内容は PixelFormat に依存します。
pf32bit ---- PRGBQuad
pf24bit ---- PRGBTriple
pf8bit 以下 ---- PByte
ですから適切にキャストすると色データにアクセスできます。
逆にいうと ScanLine を使う前に PixelFormat が確定している必要があります。
0091デフォルトの名無しさん
2005/09/08(木) 21:26:17void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRect r ;
SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
Form1->Top = r.Top;
Form1->Left = r.Left;
Form1->Width = r.Right - r.Left;
Form1->Height = r.Bottom - r.Top;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Top = Screen->WorkAreaRect.Top;
Form1->Left = Screen->WorkAreaRect.Left;
Form1->Width = Screen->WorkAreaRect.Right - Screen->WorkAreaRect.Left;
Form1->Height = Screen->WorkAreaRect.Bottom - Screen->WorkAreaRect.Top;
}
0092デフォルトの名無しさん
2005/09/08(木) 21:37:37{
TRect r ;
r = Screen->WorkAreaRect;
Form1->Top = r.Top;
Form1->Left = r.Left;
Form1->Width = r.Right - r.Left;
Form1->Height = r.Bottom - r.Top;
}
0093デフォルトの名無しさん
2005/09/08(木) 21:56:560094デフォルトの名無しさん
2005/09/09(金) 00:52:13{
Caption = Screen->DefaultIme;
}
0095デフォルトの名無しさん
2005/09/09(金) 00:59:30Form1->BoundsRect = Monitor->WorkareaRect;
0096デフォルトの名無しさん
2005/09/09(金) 10:09:23{
Button1->Caption = "C++Builder";
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1->Perform(BM_CLICK, 0, 0);
}
0097デフォルトの名無しさん
2005/09/10(土) 06:01:33OnIdleイベントはTApplicationのイベントなのです。
なので、Applicationに割り当てます。
場所はコンストラクタが良いでしょう。
//Formのコンストラクタで
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application->OnIdle = IdleHandler;
}
0098デフォルトの名無しさん
2005/09/10(土) 10:13:25.exe内の関数を.dllに入れて呼び出す場合は実行速度は
大して変わりないのでしょうか?
0099デフォルトの名無しさん
2005/09/10(土) 10:15:25変わらない
0100デフォルトの名無しさん
2005/09/10(土) 10:18:41010198
2005/09/10(土) 10:38:42なるほど、処理速度自体は変わらないけど起動時読み込みにより
遅くなるって事ですね。
起動が遅くなる度合いは関数の数に関係なく.dllの数によるものですか?
0102デフォルトの名無しさん
2005/09/12(月) 04:14:24http://blog.livedoor.jp/junki560/
0103デフォルトの名無しさん
2005/09/12(月) 05:38:10機動は早くなるよ
0104デフォルトの名無しさん
2005/09/12(月) 07:35:51どのような方法が、良いのでしょうか?
起動時にOSの言語を判定して、キャプションやフォントを変更していく以外に何はよい方法はないでしょうか?
0105デフォルトの名無しさん
2005/09/12(月) 11:15:28http://www.plustarnet.com/aspil/Programming/cpp01.htm
//コンストラクタ(constructor)とデストラクタ(destructor)
__fastcall ~TForm1();
__fastcall TForm1::~TForm1()
{
delete pBitmap;
delete pBitmap2;
delete tmpImage;
pixelinfolist->Clear();
delete pixelinfolist;
pixelinfolist2->Clear();
delete pixelinfolist2;
}
0106デフォルトの名無しさん
2005/09/12(月) 22:16:05リソースdllを丸ごとすげ替える方法がある。
ヘルプ読め
0107デフォルトの名無しさん
2005/09/12(月) 23:58:34ヘルプを読んでみたのですが、フォームの内容をDLLに保存する方法がよく分かりません
■ このスレッドは過去ログ倉庫に格納されています