トップページ⇒tech
988コメント332KB

C Builder相談室 Part3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-5あたり。
0528510NGNG
>>527様
成る程・・・ BCBでの実装は難しいのですかねぇ〜
うーんと。ToolBarで代用とか他の道を模索してみましょうか・・・
0529デフォルトの名無しさんNGNG
>>525
>>524さんがコード書いてくれてるみたいだけど(サブクラス化の方かな?)
それはTImageを継承してコンポーネントを作るときに使う方法。
0530510NGNG
>>529
コ・コンポーネント作成ですか!!
そこまでしないとBCBでは実装出来ないと!
簡単だと思っていたんですが・・・ 大甘だったと言う事ですか・・・
0531デフォルトの名無しさんNGNG
どうやらできました。
サブクラス化までは必要ないです。TFormが受け取るメッセージをディスパッチ
すれば十分なようです。

ただし、DelphiのMLにもありますように、Panelの上にImageが乗ってたりすると
うまく行きません。

protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter);
VCL_MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave);
END_MESSAGE_MAP(TForm);

void __fastcall TForm1::CMMouseEnter(TMessage& Msg)
{
// Image1 にマウスが入った?
if (reinterpret_cast<TComponent*>(Msg.LParam) == Image1) {
// 赤く塗る
Image1->Canvas->Brush->Color = clRed;
Image1->Canvas->FillRect(Rect(0, 0, Image1->Width, Image1->Height));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CMMouseLeave(TMessage& Msg)
{
// Image1 からマウスが出た?
if (reinterpret_cast<TComponent*>(Msg.LParam) == Image1) {
// 白く塗る
Image1->Canvas->Brush->Color = clWhite;
Image1->Canvas->FillRect(Rect(0, 0, Image1->Width, Image1->Height));
}
}
0532デフォルトの名無しさんNGNG
ほんとだ。パネルに乗ってると駄目だね。
サブクラス化したほうはOKでした。
0533501NGNG
>>501ですがもう一度同じ質問宜しいですか?

漢字の練習帳みたいなマス目を作って、そこをクリックや
ドラッグするとそのマスごとに線や記号、○×などを
表示させたいのですがなにか良いコンポーネントはありませんか?

皆さん社会人のようで、土日と平日のレスの量に差がありますねw
0534デフォルトの名無しさんNGNG
>>532
サブクラスにした方がきっちり動くのは、Delphiでも同じですね。
これで胸がすっきりしました。

>>533
TLabelのCanvasに描画するだけのというのはダメ?
0535510NGNG
>>531
ぐぉーーーーーーー 本当だーーーーーーーーーーーーーーーーーー!!
出来たーーーーーーーーーーーーーーーー

んですが、Panel上に乗ってるんですよね・・・ バッチリと・・・
これは弱った・・・ いや、、、ゲームを作ってまして・・・
操作系は全てPanel上にのせてるんですね・・・ これがまた・・・

そうですか・・・ サブクラスを勉強します・・・

お付き合い下さった方、誠にありがとうございます。
0536デフォルトの名無しさんNGNG
>>535
サブクラスについてはまた後ほど書いてみます。
ただ、テレビで見たい番組があるので、ちと遅れます。

サブクラスを書くと、friend class宣言をしないと不便なことがあるかも
しれません。これは書いてみてまたお知らせします。
0537デフォルトの名無しさんNGNG
>>533
Canvasがあれば何でもいいけど、絵を保持してくれるTImageでどう?

>>535
>>530でびっくりしてるけど、コンポーネント作りは難しくないよ。
サブクラス化でやるならこんな感じ。

--- .h ---

TWndMethod OldImageWndProc;
void __fastcall ImageWndProc(TMessage& Msg);

--- .cpp ---

※置き換え
OldImageWndProc = Image1->WindowProc;
Image1->WindowProc = ImageWndProc;

※置き換える必要がなくなったら
Image1->WindowProc = OldImageWndProc;

void __fastcall TForm1::ImageWndProc(TMessage& Msg)
{
if (Msg.Msg == CM_MOUSEENTER)
{
ShowMessage("Mouse Enter");
}

OldImageWndProc(Msg);
}
0538デフォルトの名無しさんNGNG
         ∧_∧ >>536
         (´Д` ) 書き終わってリロードせずに貼ってしまいました。
         /  y/  ヽ 切腹しますた。
    Σ(m)二フ ⊂[_ノ
        (ノノノ | | | l )
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0539510NGNG
>>537
ウワァァァァァァァァァァァァァァァァァァァァァァァァァァァァァン!!! わかりません〜〜〜〜 ・・・・

・・・
・・・

.hの部分はどこに追加しますか?・・・
.cppの置き換えって・・・ ・・・なんでしょう?

ってレベルなんですね・・・ いや、、、 もっと調べまする・・・
すんません。VBからの移行組なもんですから、そこら辺りはさっぱり・・・
0540511NGNG
とりあえずWin32APIで。
VCLは初心者レベルなので勘弁w

//---------------------------------------------------------------------------
//フォームの配置はForm1(TForm)->Panel1(TPanel)->Image1(TImage)。
//動作にはWin98/NT4以降orWin95+IE3以降必須
//
TForm1 *Form1;
WNDPROC oldProc;
BOOL tmeFlag = TRUE;

LRESULT APIENTRY MyProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
/*
case WM_MOUSEHOVER://TPanelにセットしているせいか、Panel上にマウスがある時に常時流れているので使えない(;´Д`)
break;
*/

case WM_MOUSELEAVE:
//マウスが離れた時の処理
Form1->Image1->Picture->LoadFromFile("適当0.BMP");
tmeFlag = TRUE;
break;

}

return CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
oldProc = (WNDPROC)SetWindowLong(Form1->Panel1->Handle, GWL_WNDPROC, (UINT)MyProc);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
if (tmeFlag == TRUE) {
//マウス進入時の処理
Image1->Picture->LoadFromFile("適当1.BMP");
tmeFlag = FALSE;
}

TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = Panel1->Handle;
tme.dwHoverTime = HOVER_DEFAULT;
_TrackMouseEvent(&tme);

}
//---------------------------------------------------------------------------

0541510NGNG

いや、漏れが甘い夢を見ていたようです。
大人しく別の方法を模索します。

ありがとうございました。
0542デフォルトの名無しさんNGNG
なんか入り乱れてるけど、とにかく全部貼っちゃいます
>>539
ヘッダはこんな感じ

class TForm1 : public TForm
{
__published:
TImage *Image1;
private:
TWndMethod OldImageWndProc;
void __fastcall ImageWndProc(TMessage& Msg);
public:
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1();
};

cppソースはこんな感じ

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
OldImageWndProc = Image1->WindowProc;
Image1->WindowProc = ImageWndProc;
}

__fastcall TForm1::~TForm1()
{
Image1->WindowProc = OldImageWndProc;
}

void __fastcall TForm1::ImageWndProc(TMessage& Msg)
{
if (Msg.Msg == CM_MOUSEENTER)
ShowMessage("Mouse Enter");

OldImageWndProc(Msg);
}
0543デフォルトの名無しさんNGNG
とりあえず茶でも飲め
     旦~
 旦~     旦~
     ヽ )ノ    ビュンビュン
旦~ ⌒(゚д゚)ノ 旦~
    /. ( ヽ
 旦~     旦~
     旦~
0544デフォルトの名無しさんNGNG
  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ・∀・) < たまに突然盛り上がるね。
 (つ旦と)   \______________
  と_)_)
0545511NGNG
   | \
   |Д`) BCBでWin32API直叩きはやっぱり邪道かな?
   |⊂
   |
0546510NGNG

>>536様 >>511様 >>542様

出来ました〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ウキィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィ

はぁ〜 苦節1日・・・ ようやく出来ますたぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ

ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ

ご迷惑をお掛けいたすますたぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ

うれすぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ
ぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ
0547デフォルトの名無しさんNGNG
>>545
そんなことないですYO
APIも使えた方がいいに決まっとります (´・Д・`)ゝ
漏れはAPIあまり分かりませんけど…
0548510NGNG


ボソボソ・・・





何個もある場合はどうしたらいいんでしょう・・
Imageが40個もあるんですが・・
0549デフォルトの名無しさんNGNG
>545
俺もAPIで組める人尊敬ですよ
>546
おちけつ
0550デフォルトの名無しさんNGNG
>>548



                          ヤッパリw

コントロールに頼らず、画面サイズのテーブル作ってボタンの情報を格納、MouseMoveイベントで自力チェックしたほうが簡単な(・∀・)ヨカーン
0551510NGNG

ImageListからImageへの読み出し方ってご存知ないですか?
BCB使い初めてからずっと疑問なんですが、、、 わからない・・・



教えられついでにご質問します・・・
0552510NGNG

ここまで出来ればもう・・・ 出来たも同然なんですが・・・

>>550 それを言わないで・・・ 悲しくなって来ますので・・・

ウワァァァン!!!!
0553デフォルトの名無しさんNGNG
>>551
ヘルプのTCustomImageList::GetBitmap()
0554510NGNG
くっ・・・ 出来たと思ったのに・・・

後、もう少し情報をくださーい。
ImageList2->GetBitmap(1,Image165->Picture->Bitmap);

で、、、今までの関連TImageで交互に変化させようとしました。
すると、拾ってきません。いや、正確には拾ってくるのですが、ブレークポイント
を置いてF9すると変化します。
ですが、何もしないまま素通りさせると拾ってきません・・・

タイミングの問題なんでしょうか・・・
0555510NGNG
いやもう少し具体的に・・・

CM_MOUSEENTERでImageList2のindex0のBITMAPを。
CM_MOUSELEAVEでImageList2のindex1のBITMAPを。

となっています。

で、今まで御教授頂いたCODE上でBITMAPを変化させようとしています。
所が、何も変化しなくなってしまいました。
イベントには飛んで来ています。デバッグでは変化は成功しました。

ブレークポイントも何も置かない場合のみ変化しません。
と言う事です。
0556デフォルトの名無しさんNGNG
>>554
TImage::Refresh()で再描画させてみれば?
0557デフォルトの名無しさんNGNG
ちらつくようなら、
0558510NGNG

ってか、、、、 ここにいる方達は天才ですか?
と言いますか、漏れのつたない文章を理解し更に解答まで素早く用意する・・・

マジで天才ですか? いや、言わせて下さい。



出来ました!!!!! と!




おいおい、、、漏れの3ヶ月って一体何よ・・・
VBでの . が -> に変わっただけで分からないとか。

ImageListからBITMAPが取れないとか。 なんなんだ、漏れ。
本当に自信を無くしました・・・
0559510NGNG

これで漏れの殆どの疑問が解決してしまった・・・
凄い人達もいるもんだ・・・

世の中広いなぁ〜
0560デフォルトの名無しさんNGNG
   A
  (゚o゚)<よくわからないけど、おめでとう
  (ー)ー
   ))
0561デフォルトの名無しさんNGNG
Imageのサブクラスを作成した場合(例えば名前をTMyImageとする)、
これをIDEに登録(Register)してから、Formに貼り付けて使わないと
いけませんね。
0562510NGNG
何から何までありがとうございます。

全然、関係は無いのですがBuilderはINIファイルの書き込み・読み出しとかが遅
いとかを昔MLで聞いた事があるのですが本当なのでしょうか?
また、INIに書き込む事が出来ない事があるとも聞きましたが・・・

他にゲームの設定とかを暗号化したファイルに記憶させたいのですが、私のゲーム
はインストーラを使いません。インストーラを使わなくて暗号化したファイルを作
成する事って可能なのでしょうか?
0563TeamB/2ch ◆SE69s0c2 NGNG
>BuilderはINIファイルの書き込み・読み出しとかが遅
>いとかを昔MLで聞いた事があるのですが本当なのでしょうか?
>また、INIに書き込む事が出来ない事があるとも聞きましたが・・・

CBuilder 1 のバグ。といわれると否定できませんが、まずガセでしょう。

どちらの ML でしょうか。
0564510NGNG

http://dev.sfdata.ne.jp/cbuilder/
のMLでそのような事を仰っていた方がいました。

in,outの部分を一から作った方もいらっしゃったとか。
0565デフォルトの名無しさんNGNG
>>564
ML の番号とかお判りになりますか?
http://www.sfdata.ne.jp/windev/cbuilder/
で閲覧できます。
0566TeamB/2ch ◆SE69s0c2 NGNG
おっと。名無しさんになってしまった...

".ini" で検索した結果を見る分には問題となるような投稿記事を見つけることは
できませんでした。

NT で管理者権限云々の話は、OS のセキュリティ機構の問題ですからバグとは
いえないでしょう。書込み禁止の FD に書き込めないのはなぜだ?というような
話題ですから。
0567デフォルトの名無しさんNGNG
>>562
速度とか不安があるなら↓見ておくと良いのでは

・INI ファイルを扱うもう1つのクラス
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=5#0287.txt
0568510NGNG
>>566
申し訳ございません。私も探す事が出来ませんでした・・・
見たと思ったのですが・・・

関係無い事で時間を取らせてしまいました。この場にてお詫び申し上げます。

>>567
Tmeminiですか・・・ 初めて知りますた。
iniファイルが存在してそれを初めに読み込んでキャッシュすると言う認識
で大丈夫なんですよね。

成る程。こう言う物もあるのか・・・ 速そう・・・

全然話は違いますが、ファイルを暗号化する一般的な手法ってご存知無い
ですか? 解読をやろうと思えば何でも出来るので仕方無いのですが、素
人に有効であれば良い程度の暗号化なんですが・・・
0569デフォルトの名無しさんNGNG
XORでもやっとけば?
0570デフォルトの名無しさんNGNG
pascalコードでよければ 前に書いたのがあるから使って

http://pc.2ch.net/tech/kako/1017/10178/1017803412.html
77,84
0571510NGNG
>>570
う、、、うわぁ〜 む、難しい・・・

ぜんっぜん理解出来ません。これは・・・
Delphiだからとかではなく、、、、 例えBuilderだったとしてもさっぱり・・・

XORの原理から勉強しないと・・・ 漏れの脳みそでは・・・・
0572他のプログラムの起動NGNG
簡単なプログラムランチャーを作ろうと思っています。
あるプログラムから他のプログラムを起動するのってどんな関数
がありましたっけ。DOS時代には子プロセスの起動の関数が
あったように記憶しているのですが。。。

よろしくお願いします。
0573デフォルトの名無しさんNGNG
execXX系/WinExec/CreateProces
0574510NGNG

すんません。またまた質問です。

VBとかで言うPublic変数とかグローバル変数ってBuilderではどうやるん
でしょ。hのPublicに記載するんでしょうか。前やろうとした時に全然う
まく動作しなくて。

具体的にはForm1とForm2の両方が1つないしは2つの変数の値を参照します。
変数の値により何かを分岐させようと思っているのですが・・・

XOR・・・ 難しいですねぇ〜
0575デフォルトの名無しさんNGNG
>>574

C++とは言わん。最低限Cくらいは勉強しとくことをお勧めする。
とりあえずexternを検索しる。

XORはビット演算知ってれば簡単だと思うが。というか言語ガイド読んだか?
0576デフォルトの名無しさんNGNG
>>574
Form1かForm2のどちからのヘッダーファイルのグローバル部(クラス宣言の外)
に変数を定義する。

もう一方のグローバル部にはexternを付けて変数を外部宣言する。
0577510NGNG
>>575
そうですよねぇ。VBからCを素っ飛ばしてC++に来ましたから・・・
知識が滅茶苦茶飛んでるんです。

Builderで業務アプリは組んだんですが・・・ ま、小さい小さい物ですが。
どっちにしても知識不足は認識しておりますので、勉強いたします。

ありがとうございます。
0578510NGNG
>>576
ありがとうございます。スグサマ試してみます。
0579510NGNG
ウゥ・・・ 拾ってこないっす・・・

Form1のヘッダー・・・ つまり
extern PACKAGE TForm1 *Form1;
の下に
int phensu;
と記載しました。

そして、Form2のヘッダー extern PACKAGE TForm2 *Form2;
の下に
extern phensu;
と記載しました。

そして

Form1側で phensu = 1; Form2->Show(); として

Form2のFormActivateイベントでphensuが1であればこれ、phensuが2であれば
これと分岐させようとしました・・・ 

がphensuは 0 となっており、どれにも引っ掛かりません。

この場合の期待値は 1 です・・・ 何が悪いんでしょう・・・
0580デフォルトの名無しさんNGNG
>>579
ん?俺の所で試してみたけど動くぞ。

--form1.h--
int sema;

--form1.cpp--
void __fastcall TForm1::Label1Click(TObject *Sender)
{
sema = (sema == 1) ? 0 : 1;
Form2->Show();
}

--form2.h--
extern int sema;

--form2.cpp--
void __fastcall TForm2::FormActivate(TObject *Sender)
{
if (sema == 1)
Label1->Caption = "Active";
else
Label1->Caption = "Form2";
}

form1のラベルをクリックする度に、form2のラベルのキャプションが変わる。
0581510NGNG
すんません。やっぱり漏れの方では動きませぬ・・・ 理由がわからない・・・

余計なものを除いてとりあえず記載しときます・・・

Form1.h

__published:// IDE 管理のコンポーネント
private:// ユーザー宣言
public:// ユーザー宣言
protected:
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
int phensu;
//---------------------------------------------------------------------------
#endif

Form2.h

__published:// IDE 管理のコンポーネント
private:// ユーザー宣言
public:// ユーザー宣言
__fastcall TForm8(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
extern int phensu;
//---------------------------------------------------------------------------
#endif
0582510NGNG
Form1.cpp

phensu = 1; Form2->Show();

Form2.cpp

void __fastcall TForm2::FormActivate(TObject *Sender)
{

ShowMessage(phensu);

if (phensu == 1)
{
}
}

上記のShowMessageでは 0 となりまする・・・
記載する場所を間違えているのでしょうね・・・ 多分・・・
0583デフォルトの名無しさんNGNG
>>581
うーんこのソースからだけではおかしなところはないですねえ。
強いて言えば"TForm8"かな?TForm2なのに?

どこかいいうpろだ教えてくだされば、こちらで試作したファイルを
まるごとうpしますよ。
0584510NGNG
>>583
ごみんなさい。Form2ですた・・・

すんません。うpを知らないんですぅ〜〜〜〜〜〜〜〜〜〜〜〜
はふぅ〜 どーしよ

探してきます。
0585510NGNG
とりあえずざっと調べてみますた。

http://50megs.com/
50MB
http://angelfire.lycos.com/
50MB・FTP
http://elitecities.com/
5MB・FTP・MAIL
http://esmartstart.com/
20MB・FTP・MAIL
http://fortunecity.com/
25 MB・FTP
http://fsn.net/
30MB・FTP・CGI
http://geocities.com/
15MB・4月からFTP有料化・MAIL
http://graffiti.net/
20MB・MAIL
http://homestead.com/
12MB
http://internettrash.com/
10MB・FTP・MAIL
http://redrival.com/
20MB・FTP
http://tripod.lycos.com/
20MB・FTP・CGI
http://web1000.com/
50MB・FTP・広告無し・アダルト向け?
http://webprovider.com/
20MB・FTP・CGI
http://www.port5.com/
portland系・15MB・FTP・CGI・SSI・PHP・SENDMAIL・広告無し
<中国語>
http://heha.net/
不明
http://uhome.net/
38MB・FTP・CGI・SSI・PHP・SENDMAIL
0586デフォルトの名無しさんNGNG
>>585
せっかくうpロダを紹介していただきましたが、どれも登録が必要な
ようですので、2ch系のうpロダにうpしました。
番号は85のDoubleFormsです。
ZIPで圧縮しました。

http://hikky.tsukaeru.jp/clip/clip.cgi
0587510NGNG

http://kari.to/upload/index.cgi
って遅かった・・・
0588510NGNG

うぅ・・・ >>586様へ

>>586様のCodeでは動きます。確かに・・・
でも漏れの方では全然・・・

試作で別の奴を作ってみました。それは動くんです・・・

でも本番の奴では動かない・・・ あぁ・・・ 理由がわからない・・・
こうなると設定がらみでしょうか・・・ 
念の為に再構築もやってみましたが変わらず・・・

こんな所でつまずくとは・・・

0589デフォルトの名無しさんNGNG
>>588
外してるかもしれんけど、intの前にvolatile付けてみるとか。最適化で
うまくいってないのかもしれないから。
0590510NGNG

何から何までありがとうございます。

volatileを付けると・・・
「phensuが複数見つかった」とコンパイラに怒られますた・・・

タイミングとかの問題でしょうか・・・ もしかして・・・
0591デフォルトの名無しさんNGNG
>>590
volatile int phensuは一つだけ、後のファイルは全部
extern volatile int phensuにしてみたら?
0592510NGNG

こいつは手強い・・・

Form1.h

volatile int phensu;

Form2.h

extern volatile int phensu;

としますた。ダメっす・・・

宣言は上記2つしか今は無いっす・・・
0593510NGNG
Form1.h側の

volatile int phensu = 100;

とかにすると100を拾ってこれるんですがねぇ〜 これじゃ〜・・・
0594デフォルトの名無しさんNGNG
メンバとかローカルに別のphensuがあるヨカン
0595510NGNG
>>594様
その可能性も疑ったのですが・・・ 今試しに

ppppppphensu

と絶対ありえない変数で試したのですが・・・ やっぱり 0 ・・・
何か不味いんでしょうかねぇ〜

Formが多すぎるんですかねぇ〜

実際のFormは今現在 8つ あり、実際にはForm1 と Form8とのやり取りに
なっています。
多いからダメってのも無いとは思うんですが・・・
0596デフォルトの名無しさんNGNG
>>592>>593
おかしいねえ・・・・ここまでしたら動きそうなものだが。
どこかにケアレスミスがあると思うよ。
0597デフォルトの名無しさんNGNG
>>595
仕事のファイルでないなら、うpしてみませんか?
0598510NGNG
>>597
そうですねぇ〜 了解です。先程のうpの場所に上げてみます・・・

ただ、やばめな所は全部削除して置きます・・・
0599510NGNG

かなりの部分を修正しまくらなくてはならない事がわかったので、そのまま
うpしますた。
87番っす。Project1
0600510NGNG
>>597
って言いますかもろ仕事がらみなんですが・・・ まあどうでもいいっす。
グローバルすら出来なけりゃ仕事もくそもないですから・・・
0601デフォルトの名無しさんNGNG
>>599>>600
了解です。Getできましたので、もし差し支えがありましたら消しておいて
下さい。今から見ます。
0602デフォルトの名無しさんNGNG
俺、へたれだからグローバル変数使いたいときは
ヘッダファイルをインクルードしていた。

この場合は、Unit8.hで
#include <Unit1.h>
して、Form8.cppの中でUnit1->phensuとしてやると。
これって、純粋な意味ではグローバル変数とは言わないんだろうか?
ひょっとして俺は、いままで生き恥を晒してきたのだろうか。。。
0603デフォルトの名無しさんNGNG
borlandのリンカは、重複したシンボルがあっても
へいきでエラーなしでリンクしちゃうから、
Form1.hをincludeしてるそれぞれの.cppで
べつのアドレス(べつのphensu)を参照してるんじゃないかな。

てゆーかさ、ふつー、.hファイルは
extern int phensu;
ってかいといて、
どれかひとつの.cppファイル(Form1.cpp)に
int phensu;
って書いて実体を確保しとくもんじゃないの?
0604510NGNG
>>602
でも実現出来てるんですよね? 漏れは実現すら出来ないなんて・・・

OH〜 MyGod・・・
0605デフォルトの名無しさんNGNG
>>603
> てゆーかさ、ふつー、.hファイルは
> extern int phensu;
> ってかいといて、
> どれかひとつの.cppファイル(Form1.cpp)に
> int phensu;
> って書いて実体を確保しとくもんじゃないの?

だよな
0606デフォルトの名無しさんNGNG
>>602
Unit1でpublic変数として定義してあれば、どのクラスからも見れますから、
それでもいいんじゃないでしょうか。

この場合、phensuがどのクラスに属するべき変数であるかで、externに
すべきかクラス変数にすべきか決まります。Unit1->phensuでも構わない
と思います。

ところで、バグの原因がわかりました。Unit1.cppの347行目でForm8を
表示していますが、この時点ではphensuは0です。そして、この行は
一回しか呼び出されません。
0607510NGNG
うpしたファイルってどうやって消すんですかねぇ〜
消し方わからねーー
0608デフォルトの名無しさんNGNG
>>603>>605
BCBの場合フォーム一つにヘッダファイル一つが作られますから、
どちらでもいいと思います。
603さんのようにするには、すべてのフォームからインクルードする
ヘッダファイルを一つ作り、そこにextern宣言することになります。
0609デフォルトの名無しさんNGNG
>>607
画面の下に記事No.と削除キーを入れる所がありますので、そこに入力して
記事削除ボタンを押せばいいと思います。
0610510NGNG

>>606
誠に申し訳ございません!!!

283行目の方です・・・ で、「翌年」を押すと問題のForm8に飛びます・・・

紛らわしくてすいません・・・ です・・・
0611デフォルトの名無しさんNGNG
>>610
そうなんですが、「翌年」を押した時、最初の一回目は347行も実行されるん
です。mmonth==0だからでしょう。その時におかしいのだと思います。

「翌年」を二回目以降押すと、ちゃんと1になっています。
0612510NGNG
>>609
すいませんでした。下の方に削除ボタンがあるのを見落としておりました。

ご迷惑をお掛け致しました。
0613510NGNG
>>611

ぐわぁ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
本当だぁ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

完全なロジックミスと言う事だぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
なんとなんと恥ずかしいぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ
0614デフォルトの名無しさんNGNG
つまり、280行でImage21Click()を呼び出していますが、Image21Click()の
347行目でphensu=0のままForm8を表示してしまっています。
0615510NGNG
?????????????????????????

あれ? 何にもしてねーのに拾うようになったぞ?
何かしたかな・・・ F9押してコンパイルはかけたが・・・

あれ?あれ?あれ?あれ?あれ? 何故? どうして?
0616デフォルトの名無しさんNGNG
とりあえず茶でも飲んで落ちつけ
     旦~
 旦~     旦~
     ヽ )ノ    ビュンビュン
旦~ ⌒(゚д゚)ノ 旦~
    /. ( ヽ
 旦~     旦~
     旦~
0617デフォルトの名無しさんNGNG
>>615
何を拾うって?
0618510NGNG
とりあえず・・・ 落ち着きます・・・ ふぅ〜

ってよく見たら、347行目近辺をコメントしてしまっていた・・・
もうアフォかと・・・ 何やってんだか・・・

ってかこれって会社で出すゲームなんだよな・・・ やっちまった・・・
0619602NGNG
みなさん、いろいろとありがとうございます。
まぁ、自分がやっていた方法もBCBに
かぎっては(?)あながち間違いでも無いようですね。

ただ、正直なところexternの方法は知らなかった(恥)ので
ちゃんと勉強して使い分けられるようになりたいと思います。

>>510
色々大変そうだけど頑張ってくださいね。
おかげさまで、自分も勉強になりました。
0620デフォルトの名無しさんNGNG
(´・Д・`) b グッドラック
0621デフォルトの名無しさんNGNG
>608
その通り、Form1つにつき.h1つだけどさ、
Form1内でForm2を使う時はForm2.cppでForm1.hをincludeするでしょ。
もちろん、その逆も。
そういう部分(.h)にextern無しの変数を宣言するなんて信じられないね。
0622デフォルトの名無しさんNGNG
>>621
うーむ、確かにCやC++の基本に忠実に沿えば、その通りですね。
私は他のフォームからどこかのフォームのヘッダファイルをインクルード
するなんて事はしてませんでしたから、今まで問題なかったようです。

これから気をつけます。
0623デフォルトの名無しさんNGNG
> 私は他のフォームからどこかのフォームのヘッダファイルをインクルード
> するなんて事はしてませんでしたから、今まで問題なかったようです。

これって、動的なフォーム生成すらやったことがないってことですね。
0624510NGNG
>>619
頑張ります・・・ こんな所でつまずいてばっかりですけど・・・
ギャグですね・・・ もはや・・
0625デフォルトの名無しさんNGNG
>>623
仕事で使ったことがないもんですから・・・・・・
まさにBCBは遊びのツール。でもC++は真面目に勉強してるぞーーー!!
どうもDelphiの快適さから抜け出すのに時間がかかりそうです。
0626デフォルトの名無しさんNGNG
Borland Kylix 3
Borland Breaks New Ground with C++ Technology for Linux
http://www.borland.com/news/press_releases/2002/07_23_02_Kylix3.html
0627デフォルトの名無しさんNGNG
>625
Delphiではusesに含めなくても他のフォーム(Unit)や
そのUnitに含まれる関数・グローバル変数等を使えるのかい?

てゆーかさ、Formに限らないけど、値の受け渡し等にinclude必須じゃん。
むしろ、includeしないで効率良くインスタンス間でデータが渡せるなら教わりたいよ。
(メッセージとかファイル/パイプ経由とかは無駄が多すぎ)
これがコンパイルを遅くしてる大きな原因なんだから。
■ このスレッドは過去ログ倉庫に格納されています