くだすれC++Builder(超初心者用)その2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/04/06(木) 16:33:24もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
C++Builder使いが優しくコメントを返しますが、
お礼はC++Builderの布教と初心者の救済をお願いします。
Borland Home Page
http://www.borland.co.jp/
<前スレ>
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50
<兄弟スレ>
くだすれDelphi(超初心者用)その31
http://pc8.2ch.net/test/read.cgi/tech/1142594051/l50
0628デフォルトの名無しさん
2006/09/29(金) 03:13:44>>626みたいなヤシのこと言ってんだろうよwwwwwwwwwwwww
>>624
俺は無視してるが。
やるとすれば、NULLを見るのではなく、
コールバックなどで値が変化したかで判断するが。
0629デフォルトの名無しさん
2006/09/29(金) 03:27:160630デフォルトの名無しさん
2006/09/29(金) 03:42:52それがBor信者クオリティじゃね
0631デフォルトの名無しさん
2006/09/29(金) 09:59:560632デフォルトの名無しさん
2006/09/29(金) 11:29:070633デフォルトの名無しさん
2006/09/29(金) 18:32:39\ �U /
/ ̄ ̄ ヽ,
/ ', / _/\/\/\/|_
\ ノ//, {0} /¨`ヽ {0} ,ミヽ / \ /
\ / く l ヽ._.ノ ', ゝ \ < バーカ! >
/ /⌒ リ `ー'′ ' ⌒\ \ / \
(  ̄ ̄⌒ ⌒ ̄ _)  ̄|/\/\/\/ ̄
` ̄ ̄`ヽ /´ ̄
| |
−−− ‐ ノ |
/ ノ −−−−
/ ∠_
−− | f\ ノ  ̄`丶.
| | ヽ__ノー─-- 、_ ) − _
. | | / /
| | ,' /
/ / ノ | ,' \
/ / | / \
/_ノ / ,ノ 〈 \
( 〈 ヽ.__ \ \
ヽ._> \__)
0634デフォルトの名無しさん
2006/09/29(金) 21:13:04\ �U /
/ ̄ ̄ ヽ,
/ ', / _/\/\/\/|_
\ ノ//, {e} /¨`ヽ {e} ,ミヽ / \ /
\ / く l ヽ._.ノ ', ゝ \ < アホー! >
/ /⌒ リ `ー'′ ' ⌒\ \ / \
(  ̄ ̄⌒ ⌒ ̄ _)  ̄|/\/\/\/ ̄
` ̄ ̄`ヽ /´ ̄
| |
−−− ‐ ノ |
/ ノ −−−−
/ ∠_
−− | f\ ノ  ̄`丶.
| | ヽ__ノー─-- 、_ ) − _
. | | / /
| | ,' /
/ / ノ | ,' \
/ / | / \
/_ノ / ,ノ 〈 \
( 〈 ヽ.__ \ \
ヽ._> \__)
0635デフォルトの名無しさん
2006/09/30(土) 00:03:40>>634
初心者ですみませんが、
このAAの何が面白いのか教えてください。
あと、C++Builderのどこがいいのかもついでに。
0636デフォルトの名無しさん
2006/09/30(土) 00:41:56趣旨は違うが、>>1が言うとおりの本当に低レベルでくだらない質問だ。
くだらなすぎるから帰れ!
0637デフォルトの名無しさん
2006/09/30(土) 23:22:04どっちに過剰反応?
AA?
BCBイジメ?
どちらにしろキモイよお前。
0638デフォルトの名無しさん
2006/09/30(土) 23:23:340639637
2006/10/01(日) 01:09:59スレ違い
0640デフォルトの名無しさん
2006/10/01(日) 01:13:25すれ違いウザ杉www
0641デフォルトの名無しさん
2006/10/01(日) 03:37:350642637
2006/10/01(日) 22:39:260643デフォルトの名無しさん
2006/10/01(日) 23:57:220644デフォルトの名無しさん
2006/10/02(月) 08:29:54>このAAの何が面白いのか教えてください。
別に面白くないと思います
>あと、C++Builderのどこがいいのかもついでに。
別に良いところは無いと思います
0645デフォルトの名無しさん
2006/10/02(月) 15:28:530646デフォルトの名無しさん
2006/10/02(月) 16:38:30遅すぎて話になりません。10分以上かかっています。ディスクアクセスもしていないようです。
原因は何でしょうか?
0647デフォルトの名無しさん
2006/10/02(月) 16:43:57古いソース使おうと思ったら…
0648デフォルトの名無しさん
2006/10/02(月) 16:49:090650デフォルトの名無しさん
2006/10/02(月) 18:17:55ノートPCの環境は?
BCBのバージョンは?
0651635
2006/10/04(水) 01:20:290652デフォルトの名無しさん
2006/10/04(水) 09:36:02お前もキモイよ
0653デフォルトの名無しさん
2006/10/04(水) 10:10:580654デフォルトの名無しさん
2006/10/04(水) 10:20:190655デフォルトの名無しさん
2006/10/04(水) 13:00:00一旦閉じた後、プロジェクトを開いて実行すると
リンカエラー 外部シンボル'Form1'が未解決(C:\~が参照)
リンカエラー 外部シンボル'TForm1::'が未解決(C:\~が参照)
と出て実行できません。どうすればよいでしょうか。
0656デフォルトの名無しさん
2006/10/04(水) 13:10:09P1.hみてみ。TForm1の名前空間はちゃんと定義されているか?
Form1 は確かextern TForm1 *Form1; とかになっているから、
名前空間の問題が解決されればコンパイルできるはずだ。
0657デフォルトの名無しさん
2006/10/04(水) 13:17:41上書きされてるんじゃないかな。
unit1.cpp を変名しないか、P1 以外の名での保存でOKかと。
0658デフォルトの名無しさん
2006/10/04(水) 13:42:33すいません。名前空間の定義の方法がわかりません。
>657
ありがとうございます。P1一式の他にU1.cpp h dfm objが生成されエラーは消えました。
デフォルトでUnit1~と保存されるものとProject1~と保存されるcppは両方とも必要ということなのでしょうか。
他のアプリケーションと区別しやすくするために変名したかったのですが、ユニット用の名前とプロジェクト用の名前をわければいいのですね。
ところで>656さんの仰られた方法で解決した場合、ユニット用のcppは無いままになってしまうと思うのですが、
これは名前空間を定義しているのがU1.cppと言うことですか?
0659デフォルトの名無しさん
2006/10/04(水) 13:51:11まあ>>657さんの方法が簡単で良いかと。
0660デフォルトの名無しさん
2006/10/04(水) 15:33:00>unit1.cpp を P1.cpp で保存したものが、P1.bpr の保存の際に生成される P1.cpp で
>上書きされてるんじゃないかな。
これがビンゴ
だから名前空間をどうこうして解決する問題じゃない
>>658
>デフォルトでUnit1~と保存されるものとProject1~と保存されるcppは両方とも必要ということなのでしょうか。
"Project1"はアプリケーション
”Unit1"はフォーム
別のもの
1つのアプリケーションは複数のフォームを持つこともできるでしょ
0661デフォルトの名無しさん
2006/10/04(水) 17:05:11子フォームのサイズがオブジェクトインスペクタのものが反映されずに、実行時に変更されてしまいます。
子フォームのサイズを指定するにはどうすればいいでしょうか?
0662デフォルトの名無しさん
2006/10/04(水) 21:55:42MDIにする意味がないかぎりは。
0663デフォルトの名無しさん
2006/10/04(水) 23:26:33子フォームのTop, Left, Width, Heightを設定する
いっぺんに済ますにはBoundsRectを設定する
0664デフォルトの名無しさん
2006/10/04(水) 23:49:34当然、子フォームを表示するときね
0665デフォルトの名無しさん
2006/10/05(木) 00:45:270666デフォルトの名無しさん
2006/10/05(木) 08:50:09突然どうした?
発作か?
0667デフォルトの名無しさん
2006/10/05(木) 09:31:250668デフォルトの名無しさん
2006/10/05(木) 14:23:20本当は、「私は馬鹿なのでBCBを使いこなすことができません。」と言いたかったんだよ。
0669デフォルトの名無しさん
2006/10/05(木) 14:25:560670デフォルトの名無しさん
2006/10/05(木) 14:26:440671デフォルトの名無しさん
2006/10/05(木) 14:33:07スルー頼むよ。お願いだから。
0672デフォルトの名無しさん
2006/10/05(木) 15:16:30>671
0673665
2006/10/05(木) 23:54:03私は朝鮮人です。日本語スコシです。
私は馬鹿なのでBCBを使いこなすことができません。
あと、ファビョってます。
でもBCBマジで使えねぇー。
0674デフォルトの名無しさん
2006/10/06(金) 11:15:58CheckListBoxを使ってるんですが、CheckBoxのように文字列のクリックでチェック状態を切り替えたいのですが、
どうすればいいでしょうか?
なにもしなければ、文字列のクリックではその行が選択状態(Selected)になるだけなので困ってます。
私のつたない頭では、OnClickでSelectedされている行のCheckedを切り替える方法くらいしか思いつきません。
そうするとチェックボックス自体をクリックしたときに、チェック状態の切り替えが2回行われ元に戻ってしまいます。
0675デフォルトの名無しさん
2006/10/06(金) 12:38:51CheckListBox->Checked[CheckListBox->ItemIndex] = 1 - CheckListBox->Checked[CheckListBox->ItemIndex];
なんてのを置くけば、とりあえず、希望の動作になるような気がする。
OnClick と OnClickCheck は飛んでくる順序が決まってる(かもしれない)から
それを利用する手もあり。
0676デフォルトの名無しさん
2006/10/06(金) 13:35:48とりあえず弥縫策
//MouseUpイベントで
int n = CheckListBox1->ItemAtPos( TPoint(X,Y), true );
if ( n >= 0 && X > 16 )
CheckListBox1->Checked[n] = !CheckListBox1->Checked[n];
チェックボックスの幅はあてずっぽう
0677デフォルトの名無しさん
2006/10/06(金) 13:37:40どっちでも大差ないけど
0678674
2006/10/06(金) 14:39:19ご教授ありがとうございます。
>675のそのままのコーディングで思い通りの動作ができたんで、これを使わせてもらいました。
たまにクリックが効かなかったり、チェックマークが点滅したりしますが、部署内で使うツールなんで問題ないことにします。
0679デフォルトの名無しさん
2006/10/06(金) 15:07:47それが出ないようにしてあるのに>>676
0680デフォルトの名無しさん
2006/10/06(金) 20:11:300681デフォルトの名無しさん
2006/10/07(土) 16:44:39座標に依存しないからこっちのほうが安全かもね。
int i = CheckListBox1->ItemIndex;
0682デフォルトの名無しさん
2006/10/07(土) 16:52:140683デフォルトの名無しさん
2006/10/08(日) 00:53:120684デフォルトの名無しさん
2006/10/08(日) 01:58:32マウスクリックを拾うときは座標に基づかないとダメだよって話なのね、もともと>>676
0685デフォルトの名無しさん
2006/10/08(日) 03:05:57うん。
一応、CheckListBox1MouseDownイベントの引数で、int Xが入ってくるから
コード的には
int i = CheckListBox1->ItemIndex;
で問題ないと思う。
「座標に依存しないから〜」って発言が嘘。
0686デフォルトの名無しさん
2006/10/08(日) 03:29:41分かる?
わかんなきゃ、実際に試してみな
マウスクリック拾うときはCheckListBox::ItemIndexじゃダメなの
項目をクリックしてるのかどうか判定しないとダメなの
0687デフォルトの名無しさん
2006/10/08(日) 04:18:06リスト一番下の余白をクリックすると
青くなってるところのcheked状態が変わっちゃう。
ヘルプより
> ItemIndex プロパティは,リストボックスの項目リスト内で選択した項目の順番を表す数です。
納得です。^^;
0688デフォルトの名無しさん
2006/10/10(火) 14:29:33フォーム作成するようなアプリを、1つの実行ファイルで実現したいんですけど、
どのような方法があるでしょうか?
0689デフォルトの名無しさん
2006/10/10(火) 16:38:05ただそれだとフォームを表示している間、親プロセスとしての
コンソールアプリも生きてるからコンソールは表示され続ける
それを回避したかったら実行ファイルを別にするしかないだろ、多分
0690デフォルトの名無しさん
2006/10/10(火) 23:36:18今度は、アプリケーションを立ち上げたら、hello を表示させたいのですが、
メイン関数みたいなのはどのように書くのでしょうか。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ShowMessage("hello");
}
この中に、ShowMessage("hello");書くとhelloが表示されました。
これがメイン関数みたいに考えれば良いでしょうか。
よろしくお願いします。
0691デフォルトの名無しさん
2006/10/10(火) 23:46:01意味不明
何がしたいのかもっと具体的かつ正確に質問すべし
>これがメイン関数みたいに考えれば良いでしょうか。
ダメです。Windowsアプリケーションの場合、メイン関数はWinMainとして別に存在します
0692デフォルトの名無しさん
2006/10/10(火) 23:56:53お返事ありがとうございます。
Project1.cpp
Unit1.cpp
あると思うんですが、ボタンを押してhelloが表示されるようにするときは
Unit1.cppの中に、ボタンのイベントを書いて表示されるようにできました。
コンパイルしたら、exeファイルできると思うんですが、
クリックしたら、helloが表示されるようにしたいです。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
イベントが起こったら→実行
ではなくて
アプリを立ち上げたら→実行
っていうことをしたいです。
0693デフォルトの名無しさん
2006/10/11(水) 00:00:25すみません。
意味の無いコード書いてしまいました。
0694デフォルトの名無しさん
2006/10/11(水) 00:06:11いったいそれに何の意味があるのか正直分からんが
0695デフォルトの名無しさん
2006/10/11(水) 00:20:39{
ShowMessage("TForm1");
}
void __fastcall TForm1::FormShow(TObject *Sender)
{
ShowMessage("FormShow");
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ShowMessage("FormCreate");
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
ShowMessage("FormPaint");
} //こういうのを書けばイベントの発生順序の勉強になるかな?
0696デフォルトの名無しさん
2006/10/11(水) 00:20:57OnShowイベント調べてみます。
初心者なので、いろいろなサンプルを動かしてみている
ところなのですが、イベントが起こると実行されるというサンプル
しか見かけませんでした。
それで、exeファイルをクリックしたら実行
っていうふうにするにはどうすればよいのかと疑問に思いまして。
たとえば、exeファイルクリックしたらはじめに設定ファイルを
必ず読みに行くとか、など考えられるかもです。
0697デフォルトの名無しさん
2006/10/11(水) 00:26:34コードありがとうございます。
早速動かして勉強します。
0698デフォルトの名無しさん
2006/10/11(水) 00:28:20そういう風に自分の考えている課題を最初から質問で提示すればいいんだよ。
そのほうが適切なレスがつきやすい。
>たとえば、exeファイルクリックしたらはじめに設定ファイルを
>必ず読みに行くとか、など考えられるかもです。
それはメインフォームのコンストラクタでやるのが適切。
BCBではFormのOnCreateイベントを使うのは推奨されていない。
0699デフォルトの名無しさん
2006/10/11(水) 00:34:31教えて欲しいんですが、OnCreateが推奨でない根拠ってなんでしょうか?
バグあり、みたいな話?
0700デフォルトの名無しさん
2006/10/11(水) 00:46:54>注意 フォームのコンストラクタとのやり取りが不良になる可能性があるので,
>C++Builder で OnCreate イベントを使うことはお勧めできません(OldCreateOrder を参照)。
>かわりに,フォームコンストラクタをオーバーライドすることをお勧めします。
BCB使いには常識みたいな話なんだけど
0701デフォルトの名無しさん
2006/10/11(水) 00:53:41ありがとうございます。
メインフォームのコンストラクタですか。
今いろんなサイト調べてみたんですが、
メインフォームのコンストラクタというのは、
下記のことでよかったでしょうか。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
自身がなくて。。。
すみませんが、よろしくお願いします。
0702デフォルトの名無しさん
2006/10/11(水) 00:58:56そだよ
あんた、悪いこと言わんからBCB以前にC++の入門書読みな
あたりまえだがC++を理解してなきゃBCBは使えないよ
0703デフォルトの名無しさん
2006/10/11(水) 01:13:01しらんかったー!
0704デフォルトの名無しさん
2006/10/11(水) 12:09:55ありがとうございます。
がんばります。
0705デフォルトの名無しさん
2006/10/11(水) 20:27:48Hoge( と入力しただけで5秒くらい待たされたり、
変数などにマウスカーソルを乗せただけで、同じく5秒ほど待たされます。
BDS2006ですが、PCがクソなのでしょうか
0706デフォルトの名無しさん
2006/10/11(水) 20:34:20IDE SpeedFixを入れろ。
0707デフォルトの名無しさん
2006/10/11(水) 21:42:520708デフォルトの名無しさん
2006/10/11(水) 21:45:370709デフォルトの名無しさん
2006/10/12(木) 00:40:54入れてみましたが、コンパイルは速くなったものの、コード補完の速度は変わりませんでした。
IDEが生産したForm1があるUnit1.cpp内では速いんですが、
自分で作ったcpp内だと倍以上時間がかかります。
自分の書いたコードを疑ってみます。
0710デフォルトの名無しさん
2006/10/12(木) 00:49:38プリコンパイルヘッダを作成した後じゃないと補完は速くならないよ。
0711デフォルトの名無しさん
2006/10/12(木) 01:10:42先日DelphiからBCBにスイッチしたばかりで、よく分からなかったのですが、
vcl.hもプリコンパイルヘッダというものなのですね。
それと、#pragma hdrstopまでにPCHをincludeするということも分かりました。
DelphiのようにSysUtils.hppとかClasses.hppをincludeしてただけだったので、遅かったようです。
0712デフォルトの名無しさん
2006/10/12(木) 03:56:43自分で作ったアプリケーションの起ち上がるプロセスの個数を
制限したいのですが、どのような方法があるのでしょうか。
例えば、IE(ブラウザ)の場合、いくらでも窓を立ち上げることができます。
ctrl+alt+delでwindowsタスクマネージャを見ると、プロセスが
複数なのがわかります。
この個数を制限したいです。
よろしくお願いします。
0713デフォルトの名無しさん
2006/10/12(木) 05:17:530714デフォルトの名無しさん
2006/10/12(木) 13:53:42ありがとうございます。
セマフォ勉強します。なんか聞いたことあります。
ちょっと違う方法なのですが、
タスクマネージャのタスク一覧みたいに、現在動いているタスク一覧の取得して、
その中に、これから起動しようとしているプロセスの名前があったら
起動できない。というふうにするのはどうでしょうか。
他のアプリケーションのプロセス名と偶然名前が同じになってしまったとき、
起動しなくなってしまう場合があるかもしれないのですが、
もしこれを回避するには、アプリケーションのある場所のパスを比較
するということになりますでしょうか?
よろしくお願いします。
0715デフォルトの名無しさん
2006/10/12(木) 14:05:29エクスプローラからListViewにD&Dはできたのですが、
逆にListViewからエクスプローラにファイルをD&Dする方法を教えてください。
0716デフォルトの名無しさん
2006/10/12(木) 15:32:02単純にFMOとかの共有メモリに起動プロセス数書きこんどけば?
0717デフォルトの名無しさん
2006/10/12(木) 15:35:21DoDragDrop、IDropSourceあたりで検索。そこそこ面倒。
ただしこれが分かってれば他アプリからテキストや画像、URL情報のドラッグしてきても受け取れるようになる。
0718デフォルトの名無しさん
2006/10/12(木) 18:58:39onshowイベントの実行できないんですが、どこがおかしいのか教えていただけ無いでしょうか。
エラーは無いのですが、onshowイベントが起こらないで、そのままウィンドウが表示されてしまいます。
ヘッダーファイルの書き方が違うんでしょうか。
よろしくお願いします。
includeなど省略してます。
○unit1.cpp
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::FormShow(TObject *Sender)
{
ShowMessage("hello");
}
○unit1.h
class TForm1 : public TForm
{
__published:// IDE 管理のコンポーネント
void __fastcall FormShow(TObject *Sender);
private:// ユーザー宣言
public:// ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
0719デフォルトの名無しさん
2006/10/12(木) 19:08:130720デフォルトの名無しさん
2006/10/12(木) 19:25:23dfm早速調べてみます。
オブジェクトインスペクタで、OnShowイベントをダブルクリックして
書くと大丈夫でした。
builderなんとなくわかってきたかもしれません。
5時間ぐらい考えてたので泣けてきました。
でも解決してよかった。ありがとうございました。
0721デフォルトの名無しさん
2006/10/12(木) 19:31:09そうやって勉強していくもんだ。
dfmがやってることをコードで書く場合は、
this->OnShow = FormShow;
もしくは、
Form1->OnShow = FormShow;
だお。
TFormがOnShowというプロパティを持ってて、
実体はメソッドのポインタ。
VCL の Clickメソッドの中でそのプロパティがAssignされていたら実行する、
となっている。
0722デフォルトの名無しさん
2006/10/12(木) 19:33:57dfmとコードとどういう関係かっていうと、
プロパティの初期値をコードで書く代わりに、
GUI(Object Inspector)で手で設定してファイル保存したのがdfm。
Object InspectorのEventsタブに切り替えると、イベントハンドラのプロパティを目で見える。
0723デフォルトの名無しさん
2006/10/13(金) 22:53:17C++を学びたいと思い現在悪戦苦闘しています。
押されたキーコードを表示するプログラムを書いてみたのですが
キャストのところが我ながら無理矢理表示させているような気がしてなりません。
本来はどう記述するべきなのでしょうか?
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
ShowMessageFmt("%.4x", &(TVarRec)Key, 0);
}
0724デフォルトの名無しさん
2006/10/14(土) 00:14:26BCBだとVCLのFormat系使わずに、AnsiString::sprintf使うことが多いと思う。
こんな感じに。
ShowMessage(AnsiString.sprintf("%02X", Key));
0725デフォルトの名無しさん
2006/10/14(土) 02:33:47ARRAYOFCONSTマクロを使うてもある
ShowMessageFmt( "%.4x", ARRAYOFCONST((Key)) );
0726723
2006/10/14(土) 03:27:30サンクスです。
DelphiではAnsiStringはクラスではなかったのでそんなルーチンがあるとは気付いてませんでした。
また、ARRAYOFCONSTマクロはDelphiにはなかったのでこちらの方も勉強になりました。
0727デフォルトの名無しさん
2006/10/14(土) 21:51:34しょうがないので今まで使ってこなかったのですが、何が原因なのでしょうか。
■ このスレッドは過去ログ倉庫に格納されています