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

くだすれ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:16
ほんとにろくな答え返ってこないや。
0630デフォルトの名無しさん2006/09/29(金) 03:42:52
>ほんとにろくな答え返ってこない
それがBor信者クオリティじゃね
0631デフォルトの名無しさん2006/09/29(金) 09:59:56
つうか、>624みたいな書き方したらどこのスレでもまともな答えは返ってこんと思うが。
0632デフォルトの名無しさん2006/09/29(金) 11:29:07
>>624は荒らしだろ
0633デフォルトの名無しさん2006/09/29(金) 18:32:39
\               �U         /
  \             �U        /
             / ̄ ̄ ヽ,
            /        ',      /     _/\/\/\/|_
    \    ノ//, {0}  /¨`ヽ {0} ,ミヽ    /     \          /
     \ / く l   ヽ._.ノ   ', ゝ \       <   バーカ!  >
     / /⌒ リ   `ー'′   ' ⌒\ \    /          \
     (   ̄ ̄⌒          ⌒ ̄ _)    ̄|/\/\/\/ ̄
      ` ̄ ̄`ヽ           /´ ̄
           |            |  
  −−− ‐   ノ           |
          /            ノ        −−−−
         /           ∠_
  −−   |    f\      ノ     ̄`丶.
        |    |  ヽ__ノー─-- 、_   )    − _
.        |  |            /  /
         | |          ,'  /
    /  /  ノ           |   ,'    \
      /   /             |  /      \
   /_ノ /              ,ノ 〈           \
    (  〈              ヽ.__ \        \
     ヽ._>              \__)
0634デフォルトの名無しさん2006/09/29(金) 21:13:04
\               �U         /
  \             �U        /
             / ̄ ̄ ヽ,
            /        ',      /     _/\/\/\/|_
    \    ノ//, {e}  /¨`ヽ {e} ,ミヽ    /     \          /
     \ / く l   ヽ._.ノ   ', ゝ \       <   アホー!  >
     / /⌒ リ   `ー'′   ' ⌒\ \    /          \
     (   ̄ ̄⌒          ⌒ ̄ _)    ̄|/\/\/\/ ̄
      ` ̄ ̄`ヽ           /´ ̄
           |            |  
  −−− ‐   ノ           |
          /            ノ        −−−−
         /           ∠_
  −−   |    f\      ノ     ̄`丶.
        |    |  ヽ__ノー─-- 、_   )    − _
.        |  |            /  /
         | |          ,'  /
    /  /  ノ           |   ,'    \
      /   /             |  /      \
   /_ノ /              ,ノ 〈           \
    (  〈              ヽ.__ \        \
     ヽ._>              \__)
0635デフォルトの名無しさん2006/09/30(土) 00:03:40
>>633
>>634
初心者ですみませんが、
このAAの何が面白いのか教えてください。
あと、C++Builderのどこがいいのかもついでに。
0636デフォルトの名無しさん2006/09/30(土) 00:41:56
>>635
趣旨は違うが、>>1が言うとおりの本当に低レベルでくだらない質問だ。
くだらなすぎるから帰れ!
0637デフォルトの名無しさん2006/09/30(土) 23:22:04
>>636
どっちに過剰反応?
AA?
BCBイジメ?
どちらにしろキモイよお前。
0638デフォルトの名無しさん2006/09/30(土) 23:23:34
>>637 ごちゃごちゃ言うなら、>>635 に回答してみろよ
06396372006/10/01(日) 01:09:59
>>638
スレ違い
0640デフォルトの名無しさん2006/10/01(日) 01:13:25
>>633-637 と639
すれ違いウザ杉www
0641デフォルトの名無しさん2006/10/01(日) 03:37:35
負け戦でage続けた639の完敗だな。
06426372006/10/01(日) 22:39:26
キモイに過剰反応?wwwww
0643デフォルトの名無しさん2006/10/01(日) 23:57:22
637キモイ
0644デフォルトの名無しさん2006/10/02(月) 08:29:54
>>637
>このAAの何が面白いのか教えてください。
別に面白くないと思います

>あと、C++Builderのどこがいいのかもついでに。
別に良いところは無いと思います
0645デフォルトの名無しさん2006/10/02(月) 15:28:53
>>637ってVB使ってる厨房とみた。
0646デフォルトの名無しさん2006/10/02(月) 16:38:30
プロジェクトファイルやソースをデスクトップからノートPCに一式コピーしてコンパイルしたのですが
遅すぎて話になりません。10分以上かかっています。ディスクアクセスもしていないようです。
原因は何でしょうか?
0647デフォルトの名無しさん2006/10/02(月) 16:43:57
int__64ってどこへ行っちゃったの?
古いソース使おうと思ったら…
0648デフォルトの名無しさん2006/10/02(月) 16:49:09
__int64のことですか
06496472006/10/02(月) 17:43:27
>>648
逝ってきます

てか、この古いソースって出元はなんなんだ?
0650デフォルトの名無しさん2006/10/02(月) 18:17:55
>>646
ノートPCの環境は?
BCBのバージョンは?
06516352006/10/04(水) 01:20:29
なんか、637のせいで酷い言われようだな。欝だ。
0652デフォルトの名無しさん2006/10/04(水) 09:36:02
>>651
お前もキモイよ
0653デフォルトの名無しさん2006/10/04(水) 10:10:58
まだ粘着してるw
0654デフォルトの名無しさん2006/10/04(水) 10:20:19
粘着してる奴は朝鮮人だろ。日本人のメンタリティではないな。
0655デフォルトの名無しさん2006/10/04(水) 13:00:00
新規作成でアプリケーションを選択して、すぐに全て保存でP1.cppとP1.bprとしました。
一旦閉じた後、プロジェクトを開いて実行すると

リンカエラー 外部シンボル'Form1'が未解決(C:\~が参照)
リンカエラー 外部シンボル'TForm1::'が未解決(C:\~が参照)

と出て実行できません。どうすればよいでしょうか。
0656デフォルトの名無しさん2006/10/04(水) 13:10:09
>>655
P1.hみてみ。TForm1の名前空間はちゃんと定義されているか?

Form1 は確かextern TForm1 *Form1; とかになっているから、
名前空間の問題が解決されればコンパイルできるはずだ。
0657デフォルトの名無しさん2006/10/04(水) 13:17:41
unit1.cpp を P1.cpp で保存したものが、P1.bpr の保存の際に生成される P1.cpp で
上書きされてるんじゃないかな。

unit1.cpp を変名しないか、P1 以外の名での保存でOKかと。
0658デフォルトの名無しさん2006/10/04(水) 13:42:33
>656
すいません。名前空間の定義の方法がわかりません。

>657
ありがとうございます。P1一式の他にU1.cpp h dfm objが生成されエラーは消えました。

デフォルトでUnit1~と保存されるものとProject1~と保存されるcppは両方とも必要ということなのでしょうか。
他のアプリケーションと区別しやすくするために変名したかったのですが、ユニット用の名前とプロジェクト用の名前をわければいいのですね。

ところで>656さんの仰られた方法で解決した場合、ユニット用のcppは無いままになってしまうと思うのですが、
これは名前空間を定義しているのがU1.cppと言うことですか?
0659デフォルトの名無しさん2006/10/04(水) 13:51:11
名前空間はhで定義されてるよ。
まあ>>657さんの方法が簡単で良いかと。
0660デフォルトの名無しさん2006/10/04(水) 15:33:00
>>657
>unit1.cpp を P1.cpp で保存したものが、P1.bpr の保存の際に生成される P1.cpp で
>上書きされてるんじゃないかな。
これがビンゴ
だから名前空間をどうこうして解決する問題じゃない

>>658
>デフォルトでUnit1~と保存されるものとProject1~と保存されるcppは両方とも必要ということなのでしょうか。
"Project1"はアプリケーション
”Unit1"はフォーム
別のもの
1つのアプリケーションは複数のフォームを持つこともできるでしょ
0661デフォルトの名無しさん2006/10/04(水) 17:05:11
まっさらなフォームを二つ作ってfsMDIFormとfsMDIChildで親フォーム子フォームにしたのですが、
子フォームのサイズがオブジェクトインスペクタのものが反映されずに、実行時に変更されてしまいます。

子フォームのサイズを指定するにはどうすればいいでしょうか?
0662デフォルトの名無しさん2006/10/04(水) 21:55:42
俺なら、あえて子フォームにしない。
MDIにする意味がないかぎりは。
0663デフォルトの名無しさん2006/10/04(水) 23:26:33
>>661
子フォームのTop, Left, Width, Heightを設定する
いっぺんに済ますにはBoundsRectを設定する
0664デフォルトの名無しさん2006/10/04(水) 23:49:34
↑書き忘れた
当然、子フォームを表示するときね
0665デフォルトの名無しさん2006/10/05(木) 00:45:27
やっぱBCB使えねぇな。
0666デフォルトの名無しさん2006/10/05(木) 08:50:09
>>665
突然どうした?
発作か?
0667デフォルトの名無しさん2006/10/05(木) 09:31:25
恐らく朝鮮人がファビョったんでしょう。
0668デフォルトの名無しさん2006/10/05(木) 14:23:20
>665は日本語が不自由なだけだよ。
本当は、「私は馬鹿なのでBCBを使いこなすことができません。」と言いたかったんだよ。
0669デフォルトの名無しさん2006/10/05(木) 14:25:56
つ スルー力 ttp://slashdot.jp/articles/06/10/05/0351233.shtml

0670デフォルトの名無しさん2006/10/05(木) 14:26:44
日本語喋れないんなら祖国に帰れよ>>665
0671デフォルトの名無しさん2006/10/05(木) 14:33:07
>>666-670 Except 669
スルー頼むよ。お願いだから。
0672デフォルトの名無しさん2006/10/05(木) 15:16:30
>>671
>671
06736652006/10/05(木) 23:54:03
正直にカミングアウトします
私は朝鮮人です。日本語スコシです。
私は馬鹿なのでBCBを使いこなすことができません。
あと、ファビョってます。

でもBCBマジで使えねぇー。
0674デフォルトの名無しさん2006/10/06(金) 11:15:58
仕事でいきなりちょっとしたアプリをBCB6で作るようにいわれたVC系初心者です。
CheckListBoxを使ってるんですが、CheckBoxのように文字列のクリックでチェック状態を切り替えたいのですが、
どうすればいいでしょうか?
なにもしなければ、文字列のクリックではその行が選択状態(Selected)になるだけなので困ってます。
私のつたない頭では、OnClickでSelectedされている行のCheckedを切り替える方法くらいしか思いつきません。
そうするとチェックボックス自体をクリックしたときに、チェック状態の切り替えが2回行われ元に戻ってしまいます。
0675デフォルトの名無しさん2006/10/06(金) 12:38:51
エレガントではないかもしんないけども OnClick と OnClickCheck の両方に

CheckListBox->Checked[CheckListBox->ItemIndex] = 1 - CheckListBox->Checked[CheckListBox->ItemIndex];

なんてのを置くけば、とりあえず、希望の動作になるような気がする。

OnClick と OnClickCheck は飛んでくる順序が決まってる(かもしれない)から
それを利用する手もあり。
0676デフォルトの名無しさん2006/10/06(金) 13:35:48
>>674
とりあえず弥縫策

//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
↑あ、MouseDownだった
どっちでも大差ないけど
06786742006/10/06(金) 14:39:19
>675,676
ご教授ありがとうございます。
>675のそのままのコーディングで思い通りの動作ができたんで、これを使わせてもらいました。
たまにクリックが効かなかったり、チェックマークが点滅したりしますが、部署内で使うツールなんで問題ないことにします。
0679デフォルトの名無しさん2006/10/06(金) 15:07:47
>たまにクリックが効かなかったり、チェックマークが点滅したりしますが、
それが出ないようにしてあるのに>>676
0680デフォルトの名無しさん2006/10/06(金) 20:11:30
テケトウでOK ってことだろ
0681デフォルトの名無しさん2006/10/07(土) 16:44:39
> int n = CheckListBox1->ItemAtPos( TPoint(X,Y), true );

座標に依存しないからこっちのほうが安全かもね。
int i = CheckListBox1->ItemIndex;

0682デフォルトの名無しさん2006/10/07(土) 16:52:14
あ、なんかウソ書いた。ゴメソ
0683デフォルトの名無しさん2006/10/08(日) 00:53:12
Turbo C++に移らないのか?
0684デフォルトの名無しさん2006/10/08(日) 01:58:32
>>681
マウスクリックを拾うときは座標に基づかないとダメだよって話なのね、もともと>>676
0685デフォルトの名無しさん2006/10/08(日) 03:05:57
>>684
うん。
一応、CheckListBox1MouseDownイベントの引数で、int Xが入ってくるから
コード的には
int i = CheckListBox1->ItemIndex;
で問題ないと思う。
「座標に依存しないから〜」って発言が嘘。
0686デフォルトの名無しさん2006/10/08(日) 03:29:41
あのさー、CheckListBoxで項目のない余白部分をクリックしたらどうなる?
分かる?
わかんなきゃ、実際に試してみな

マウスクリック拾うときは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 を表示させることはできました。
今度は、アプリケーションを立ち上げたら、hello を表示させたいのですが、
メイン関数みたいなのはどのように書くのでしょうか。

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
    ShowMessage("hello");
}
この中に、ShowMessage("hello");書くとhelloが表示されました。
これがメイン関数みたいに考えれば良いでしょうか。
よろしくお願いします。
0691デフォルトの名無しさん2006/10/10(火) 23:46:01
>>690
意味不明
何がしたいのかもっと具体的かつ正確に質問すべし


>これがメイン関数みたいに考えれば良いでしょうか。
ダメです。Windowsアプリケーションの場合、メイン関数はWinMainとして別に存在します
0692デフォルトの名無しさん2006/10/10(火) 23:56:53
>>691
お返事ありがとうございます。

Project1.cpp
Unit1.cpp
あると思うんですが、ボタンを押してhelloが表示されるようにするときは
Unit1.cppの中に、ボタンのイベントを書いて表示されるようにできました。

コンパイルしたら、exeファイルできると思うんですが、
クリックしたら、helloが表示されるようにしたいです。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
イベントが起こったら→実行
ではなくて
アプリを立ち上げたら→実行
っていうことをしたいです。
0693デフォルトの名無しさん2006/10/11(水) 00:00:25
>>692
すみません。
意味の無いコード書いてしまいました。
0694デフォルトの名無しさん2006/10/11(水) 00:06:11
それならフォームのOnShowイベントでShowMessage()すればよし

いったいそれに何の意味があるのか正直分からんが
0695デフォルトの名無しさん2006/10/11(水) 00:20:39
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
       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:57
>>694
OnShowイベント調べてみます。

初心者なので、いろいろなサンプルを動かしてみている
ところなのですが、イベントが起こると実行されるというサンプル
しか見かけませんでした。

それで、exeファイルをクリックしたら実行
っていうふうにするにはどうすればよいのかと疑問に思いまして。
たとえば、exeファイルクリックしたらはじめに設定ファイルを
必ず読みに行くとか、など考えられるかもです。
0697デフォルトの名無しさん2006/10/11(水) 00:26:34
>>695
コードありがとうございます。
早速動かして勉強します。
0698デフォルトの名無しさん2006/10/11(水) 00:28:20
>>696
そういう風に自分の考えている課題を最初から質問で提示すればいいんだよ。
そのほうが適切なレスがつきやすい。

>たとえば、exeファイルクリックしたらはじめに設定ファイルを
>必ず読みに行くとか、など考えられるかもです。

それはメインフォームのコンストラクタでやるのが適切。
BCBではFormのOnCreateイベントを使うのは推奨されていない。
0699デフォルトの名無しさん2006/10/11(水) 00:34:31
>>698さん
教えて欲しいんですが、OnCreateが推奨でない根拠ってなんでしょうか?
バグあり、みたいな話?
0700デフォルトの名無しさん2006/10/11(水) 00:46:54
BCBのヘルプから引用
>注意 フォームのコンストラクタとのやり取りが不良になる可能性があるので,
>C++Builder で OnCreate イベントを使うことはお勧めできません(OldCreateOrder を参照)。
>かわりに,フォームコンストラクタをオーバーライドすることをお勧めします。

BCB使いには常識みたいな話なんだけど
0701デフォルトの名無しさん2006/10/11(水) 00:53:41
>>698
ありがとうございます。
メインフォームのコンストラクタですか。
今いろんなサイト調べてみたんですが、
メインフォームのコンストラクタというのは、
下記のことでよかったでしょうか。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
自身がなくて。。。
すみませんが、よろしくお願いします。
0702デフォルトの名無しさん2006/10/11(水) 00:58:56
>>701
そだよ

あんた、悪いこと言わんからBCB以前にC++の入門書読みな
あたりまえだがC++を理解してなきゃBCBは使えないよ
0703デフォルトの名無しさん2006/10/11(水) 01:13:01
>>700さん
しらんかったー!
0704デフォルトの名無しさん2006/10/11(水) 12:09:55
>>702
ありがとうございます。
がんばります。
0705デフォルトの名無しさん2006/10/11(水) 20:27:48
C++はDelphiにくらべてコード補完などが遅いのですか?

Hoge( と入力しただけで5秒くらい待たされたり、
変数などにマウスカーソルを乗せただけで、同じく5秒ほど待たされます。

BDS2006ですが、PCがクソなのでしょうか
0706デフォルトの名無しさん2006/10/11(水) 20:34:20
>>705
IDE SpeedFixを入れろ。
0707デフォルトの名無しさん2006/10/11(水) 21:42:52
つ http://gimite.ddo.jp/bcbqtree/qtreemain.cgi?mode=thread&thread=515
0708デフォルトの名無しさん2006/10/11(水) 21:45:37
あ、ちなみにBDS2006にはBCB6用ではなくBCB10用な。
0709デフォルトの名無しさん2006/10/12(木) 00:40:54
ありがとうございます。

入れてみましたが、コンパイルは速くなったものの、コード補完の速度は変わりませんでした。
IDEが生産したForm1があるUnit1.cpp内では速いんですが、
自分で作ったcpp内だと倍以上時間がかかります。
自分の書いたコードを疑ってみます。
0710デフォルトの名無しさん2006/10/12(木) 00:49:38
>>709
プリコンパイルヘッダを作成した後じゃないと補完は速くならないよ。
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
OSはwindowsです。
自分で作ったアプリケーションの起ち上がるプロセスの個数を
制限したいのですが、どのような方法があるのでしょうか。

例えば、IE(ブラウザ)の場合、いくらでも窓を立ち上げることができます。
ctrl+alt+delでwindowsタスクマネージャを見ると、プロセスが
複数なのがわかります。
この個数を制限したいです。
よろしくお願いします。
0713デフォルトの名無しさん2006/10/12(木) 05:17:53
個数制限の場合はmutexじゃなくてセマフォだな。
0714デフォルトの名無しさん2006/10/12(木) 13:53:42
>>713
ありがとうございます。
セマフォ勉強します。なんか聞いたことあります。

ちょっと違う方法なのですが、
タスクマネージャのタスク一覧みたいに、現在動いているタスク一覧の取得して、
その中に、これから起動しようとしているプロセスの名前があったら
起動できない。というふうにするのはどうでしょうか。

他のアプリケーションのプロセス名と偶然名前が同じになってしまったとき、
起動しなくなってしまう場合があるかもしれないのですが、
もしこれを回避するには、アプリケーションのある場所のパスを比較
するということになりますでしょうか?
よろしくお願いします。
0715デフォルトの名無しさん2006/10/12(木) 14:05:29
すみません、教えてください。
エクスプローラからListViewにD&Dはできたのですが、
逆にListViewからエクスプローラにファイルをD&Dする方法を教えてください。
0716デフォルトの名無しさん2006/10/12(木) 15:32:02
>>714
単純にFMOとかの共有メモリに起動プロセス数書きこんどけば?
0717デフォルトの名無しさん2006/10/12(木) 15:35:21
>>715
DoDragDrop、IDropSourceあたりで検索。そこそこ面倒。
ただしこれが分かってれば他アプリからテキストや画像、URL情報のドラッグしてきても受け取れるようになる。
0718デフォルトの名無しさん2006/10/12(木) 18:58:39
c++builder6使っています。
onshowイベントの実行できないんですが、どこがおかしいのか教えていただけ無いでしょうか。
エラーは無いのですが、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:13
ヒント:dfm
0720デフォルトの名無しさん2006/10/12(木) 19:25:23
>>719
dfm早速調べてみます。

オブジェクトインスペクタで、OnShowイベントをダブルクリックして
書くと大丈夫でした。
builderなんとなくわかってきたかもしれません。

5時間ぐらい考えてたので泣けてきました。
でも解決してよかった。ありがとうございました。
0721デフォルトの名無しさん2006/10/12(木) 19:31:09
>5時間ぐらい考えてたので泣けてきました。
そうやって勉強していくもんだ。

dfmがやってることをコードで書く場合は、

this->OnShow = FormShow;
もしくは、
Form1->OnShow = FormShow;
だお。

TFormがOnShowというプロパティを持ってて、
実体はメソッドのポインタ。

VCL の Clickメソッドの中でそのプロパティがAssignされていたら実行する、
となっている。
0722デフォルトの名無しさん2006/10/12(木) 19:33:57
>dfmがやってることをコードで書く場合は、

dfmとコードとどういう関係かっていうと、
プロパティの初期値をコードで書く代わりに、
GUI(Object Inspector)で手で設定してファイル保存したのがdfm。

Object InspectorのEventsタブに切り替えると、イベントハンドラのプロパティを目で見える。
0723デフォルトの名無しさん2006/10/13(金) 22:53:17
いままでDelphiを使っていましたが、Turbo C++が出たのをきっかけに
C++を学びたいと思い現在悪戦苦闘しています。
押されたキーコードを表示するプログラムを書いてみたのですが
キャストのところが我ながら無理矢理表示させているような気がしてなりません。
本来はどう記述するべきなのでしょうか?

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
 ShowMessageFmt("%.4x", &(TVarRec)Key, 0);
}
0724デフォルトの名無しさん2006/10/14(土) 00:14:26
>>723
BCBだとVCLのFormat系使わずに、AnsiString::sprintf使うことが多いと思う。
こんな感じに。

ShowMessage(AnsiString.sprintf("%02X", Key));
0725デフォルトの名無しさん2006/10/14(土) 02:33:47
>>723
ARRAYOFCONSTマクロを使うてもある

 ShowMessageFmt( "%.4x", ARRAYOFCONST((Key)) );
07267232006/10/14(土) 03:27:30
>>724-725
サンクスです。
DelphiではAnsiStringはクラスではなかったのでそんなルーチンがあるとは気付いてませんでした。
また、ARRAYOFCONSTマクロはDelphiにはなかったのでこちらの方も勉強になりました。
0727デフォルトの名無しさん2006/10/14(土) 21:51:34
TActionManagerなどのTAction〜系を貼り付けると、コードエディタがものすごく重たくなります。
しょうがないので今まで使ってこなかったのですが、何が原因なのでしょうか。
■ このスレッドは過去ログ倉庫に格納されています