C Builder相談室 Part3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG過去スレ・関連サイトは>>2-5あたり。
0606デフォルトの名無しさん
NGNGUnit1でpublic変数として定義してあれば、どのクラスからも見れますから、
それでもいいんじゃないでしょうか。
この場合、phensuがどのクラスに属するべき変数であるかで、externに
すべきかクラス変数にすべきか決まります。Unit1->phensuでも構わない
と思います。
ところで、バグの原因がわかりました。Unit1.cppの347行目でForm8を
表示していますが、この時点ではphensuは0です。そして、この行は
一回しか呼び出されません。
0607510
NGNG消し方わからねーー
0608デフォルトの名無しさん
NGNGBCBの場合フォーム一つにヘッダファイル一つが作られますから、
どちらでもいいと思います。
603さんのようにするには、すべてのフォームからインクルードする
ヘッダファイルを一つ作り、そこにextern宣言することになります。
0609デフォルトの名無しさん
NGNG画面の下に記事No.と削除キーを入れる所がありますので、そこに入力して
記事削除ボタンを押せばいいと思います。
0611デフォルトの名無しさん
NGNGそうなんですが、「翌年」を押した時、最初の一回目は347行も実行されるん
です。mmonth==0だからでしょう。その時におかしいのだと思います。
「翌年」を二回目以降押すと、ちゃんと1になっています。
0613510
NGNGぐわぁ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
本当だぁ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
完全なロジックミスと言う事だぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
なんとなんと恥ずかしいぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ
0614デフォルトの名無しさん
NGNG347行目でphensu=0のままForm8を表示してしまっています。
0615510
NGNGあれ? 何にもしてねーのに拾うようになったぞ?
何かしたかな・・・ F9押してコンパイルはかけたが・・・
あれ?あれ?あれ?あれ?あれ? 何故? どうして?
0616デフォルトの名無しさん
NGNG旦~
旦~ 旦~
ヽ )ノ ビュンビュン
旦~ ⌒(゚д゚)ノ 旦~
/. ( ヽ
旦~ 旦~
旦~
0617デフォルトの名無しさん
NGNG何を拾うって?
0618510
NGNGってよく見たら、347行目近辺をコメントしてしまっていた・・・
もうアフォかと・・・ 何やってんだか・・・
ってかこれって会社で出すゲームなんだよな・・・ やっちまった・・・
0619602
NGNGまぁ、自分がやっていた方法もBCBに
かぎっては(?)あながち間違いでも無いようですね。
ただ、正直なところexternの方法は知らなかった(恥)ので
ちゃんと勉強して使い分けられるようになりたいと思います。
>>510
色々大変そうだけど頑張ってくださいね。
おかげさまで、自分も勉強になりました。
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNGその通り、Form1つにつき.h1つだけどさ、
Form1内でForm2を使う時はForm2.cppでForm1.hをincludeするでしょ。
もちろん、その逆も。
そういう部分(.h)にextern無しの変数を宣言するなんて信じられないね。
0622デフォルトの名無しさん
NGNGうーむ、確かにCやC++の基本に忠実に沿えば、その通りですね。
私は他のフォームからどこかのフォームのヘッダファイルをインクルード
するなんて事はしてませんでしたから、今まで問題なかったようです。
これから気をつけます。
0623デフォルトの名無しさん
NGNG> するなんて事はしてませんでしたから、今まで問題なかったようです。
これって、動的なフォーム生成すらやったことがないってことですね。
0625デフォルトの名無しさん
NGNG仕事で使ったことがないもんですから・・・・・・
まさにBCBは遊びのツール。でもC++は真面目に勉強してるぞーーー!!
どうもDelphiの快適さから抜け出すのに時間がかかりそうです。
0626デフォルトの名無しさん
NGNGBorland Breaks New Ground with C++ Technology for Linux
http://www.borland.com/news/press_releases/2002/07_23_02_Kylix3.html
0627デフォルトの名無しさん
NGNGDelphiではusesに含めなくても他のフォーム(Unit)や
そのUnitに含まれる関数・グローバル変数等を使えるのかい?
てゆーかさ、Formに限らないけど、値の受け渡し等にinclude必須じゃん。
むしろ、includeしないで効率良くインスタンス間でデータが渡せるなら教わりたいよ。
(メッセージとかファイル/パイプ経由とかは無駄が多すぎ)
これがコンパイルを遅くしてる大きな原因なんだから。
0628デフォルトの名無しさん
NGNGコンポーネント型継承なら、実行型情報を使うといいよ
毎回検索したら遅いから、 メソッド名やプロパティ名は
最初に検索しておくといい
0630デフォルトの名無しさん
NGNGDelphiはヘッダーファイルという概念がないので uses文で取り込む
コンポーネント等を指定しますが、その癖が抜けてなかったのです。
C/C++のexternは概念的には理解しているのですが、やはり実際に
使わないと覚えられませんね。
>>628
dynamic_castを使うのですね。Senderを動的キャストして使わなけれ
ばならない場面がたくさんあり、Delphiの is や as と似ていると思いま
した。
>>629
いえいえこちらこそ大変勉強になりました。プロジェクトが無事完結す
るといいですね。
0631デフォルトの名無しさん
NGNG何を渡しているでせうか?
そのイベントハンドラを所有するフォームのOwnerプロパティ?
Application変数?メインフォーム?それともNULL?
その辺がまともな発想の範囲だと思いますが、
今回の仕事の前任者は、平気でMDI子フォームをOwnerに指定しまくっています。
個人的にはとっても気持ち悪いのですが、急ぎの仕事なので
明らかな弊害がなければ放置したいです。
とりあえず、「Owner消滅でそのフォームのOnCloseやOnDestroyが走らない事による弊害」
はないのが判明しているので、そういう甘えた気分でいるのですが・・・
皆様のご意見をお待ちしております。
0632631
NGNGTMainForm *MainForm; //メインフォーム
に
TFirstChildFormやTSecondChildForm等の子フォームクラスがあったとします。
んでもって、こんな感じです・・・
void __fastcall TFirstChildForm::Menu1Click(TObject *Sender)
{
TSecondChildForm *s = new TSecondChildForm(this);
}
これでいいのか〜?と思う次第であります。
0633困った
NGNG方法がわかりません。
VCLコンポーネント同士ならいろいろできるのは分かっているんですが、、
受け入れる情報は元ファイルのフルのパス名だけで十分です。
0634デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?hl=ja&q=DragAcceptFiles+WM_DROPFILES+builder
0635困った
NGNG0636510
NGNGまたまたまた教えてくらさい。
TreeViewの背後にBitmap等のイメージを貼り付けるのはどうやればいいん
でしょ。背後が白ではちょっとみっともないので・・・
0637デルファイの名無しさん
NGNG0638510
NGNG背景は確かに描画されましたが、Node回りが白くなってしまいます。
で、CustomDrawItemを調べたのですが、、、、 これがよくわからない・・・
HELPを見るに、自分で全て描画処理をしなければ行けないと言う事は理解出来た
のですが・・・
こんな感じで訳分からん状態っす。
TRect NodeRect;
DefaultDraw = false;
NodeRect = Node->DisplayRect(true);
TreeView1->Canvas->FillRect(NodeRect);
NodeRect = Node->DisplayRect(true);
TreeView1->Canvas->Brush->Style = bsClear;
NodeRect.Left = NodeRect.Left + (Node->Level * TreeView1->Indent);
TreeView1->Canvas->TextOutA(NodeRect.left,NodeRect.Top,Node->Text);
やりたい事はアイテム回りが貼り付けた背景と同化したいと言う事っす・・・
0639510
NGNGしまつた。これがDraw関連のコードです・・・
void __fastcall TForm1::TreeView1CustomDraw(TCustomTreeView *Sender,
const TRect &ARect, bool &DefaultDraw)
{
TCanvas *pCanvas = TreeView1->Canvas;
pCanvas->StretchDraw(ARect, Image14->Picture->Bitmap);
DefaultDraw = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1CustomDrawItem(TCustomTreeView *Sender,
TTreeNode *Node, TCustomDrawState State, bool &DefaultDraw)
{
TRect NodeRect;
DefaultDraw = false;
NodeRect = Node->DisplayRect(true);
TreeView1->Canvas->FillRect(NodeRect);
NodeRect = Node->DisplayRect(true);
TreeView1->Canvas->Brush->Style = bsClear;
NodeRect.Left = NodeRect.Left + (Node->Level * TreeView1->Indent);
TreeView1->Canvas->TextOutA(NodeRect.left,NodeRect.Top,Node->Text);
}
0640デフォルトの名無しさん
NGNG> TreeView1->Canvas->FillRect(NodeRect);
↑の代わりにCopyRectでビットマップを描画しないといけないのでは。
でも、TreeViewの背景にビットマップを表示するのはちょっと大変そう。
ヘルプにも
「背景ビットマップの描画は実際に CustomDraw によってサポートされていないため,〜」
って書いてるし。
0641510
NGNG何気に難しいんすよ・・・ 無地の白で行こうかなんて思ってたり・・・
でも画面のバランス的にはやっぱりまずいんですよね・・・
ってかずっとやってるのに未だに・・・
0642デフォルトの名無しさん
NGNGVB6からの移植で、LeftStr等の関数を使うと対比・確認がやり易くなるかと思ったんですが、
コンパイル時に「E2268 未定義の関数 'LeftStr' を呼び出した」と言われました。
0643デフォルトの名無しさん
NGNG0644642
NGNG事故レス、スンマソン見つかりますた
#include <strutils.hpp>
でした。
回線切って(以下略
0646デフォルトの名無しさん
NGNGProfessional版は、60000かぁ〜・・・
高い・・・・俺には買えない・・・・
0647デフォルトの名無しさん
NGNGシェアウェア作って売れれば元なんてすぐ取れるんですけど・・・・
0648デフォルトの名無しさん
NGNG売れればね...。
0649デフォルトの名無しさん
NGNGベクターに登録後、DL件数550件余
未だに購入どころか要望やら批判やらも含めて何のメールも来ない。
きっと、シェアウェアとか言いながら、何の制限もかけてないせいだと思いたい。
0650デフォルトの名無しさん
NGNGそれは寂しいね。あなたのソフトの質は高いのだと信じたいが、それに
しても冷たいユーザーだな。
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNGDelphiでは、DataSet.Fields[i].OnValidate という風に、入力値チェックの
イベントを呼び出すことができました。
しかし、BCBでは、TFieldsオブジェクトにValidateメソッドはありません。
だから、 DataSet->Fields[i].Validate() と書くとコンパイルエラーに
なってしまいます。これをどう解決したらよいのでしょうか?
それから、Delphiでは、イベントハンドラの有無を Assigned関数でチェック
できましたが、BCBでは同様のチェックをどのように行えばよいのでしょ
うか?
よろしくご指導のほどお願い致します。
0654デフォルトの名無しさん
NGNGDataSet->Fields[i].Validate() は2つの間違い
1、DataSet->Fields[i] は参照ではなくポインタを返す
2、Validateには・・・ヘルプをみろ
Assignedは、Delphiでは 引数無しのメソッドは () を付けないので
if xx.Onxx=nil then のように書くとOnxxxメソッドが呼ばれてしまう場合があるから必要なんだけど
C++では必要ない
CのようにNULL と比較してもいいし 論理型にポインタ型が代入される時の仕掛けを利用してもいいし
0655デフォルトの名無しさん
NGNGレスありがとうございます。
結局、次のような方法で動くようです。
1.関数が登録されているかどうかチェック
if (&DataSet->Fields->Fields[i]->Validate)のように、関数のポインタ
のアドレスをチェックする。
2.OnValidateの呼び出し
DataSet->Fields->Fields[i]->Validate(reinterpret_cast<void *>(&DataSet->Fields[i]))
しかし、まだ疑問が残ります。
2.で、確実にValidateが呼び出されているのかどうか、それから、実際の
フィールドにフォーカスを当てても、変更不可能となっていることなどです。
ここら辺の情報について、ヘルプでは情報不足で、BCB関連の書籍もない
ので、迷っています。
0656デフォルトの名無しさん
NGNGまた間違えてました。
1.関数が登録されているかどうかチェック
if (DataSet->Fields->Fields[i]->OnValidate)のように、関数のポインタ
のアドレスをチェックする。
でした。Validate()は必ず存在しているので、この関数のアドレスをテスト
するのは無意味でした。
しかしこれも合っているのかどうか怪しいです。
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG亀レススマソ。
Validate()が void * を受け取る仕様になっているため、確実に実行
されているかどうか確かめるすべがないのです。
DelphiをC++に移植する時点で生じた食い違いだと思いますが、
だましだまし使っていこうと思います。
それにしても、マニュアルなりヘルプなりにValidate()の詳しい説明
があってもいいのに( ´Д⊂ヽ。
0659デフォルトの名無しさん
NGNGというのは、Delphiで言うとどんなコード?
Delphiのコードで説明しても結構ここの人はわかるかもよ。
0660デフォルトの名無しさん
NGNGありがとうございます。
実はDelphiオフィシャルコースウェア基礎編P276のコードをBCBに移植して
いてつまづいたものです。
元のコードは、
if Assigned(DataSet.Fields[i].OnValidate) then
try
DataSet.Fields[i].OnValidate(DataSet.Fields[i]);
except
DataSet.Fields[i].FocusControl;
raise;
end;
というものです。DelphiではOnValidateという述語にいろんな意味が持たせて
あるようですが、BCBでは厳密になっており、このような書き方はできません
でした。
もしわかりましたらご指導の程宜しくお願い致します。
0661デフォルトの名無しさん
NGNGif (DataSet->Fields[i]->OnValidate)
{
try
{
DataSet->Fields[i]->OnValidate(DataSet->Fields[i]);
}
catch (...)
{
DataSet->Fields[i]->FocusControl();
throw;
}
}
0662デフォルトの名無しさん
NGNGでないかな。
0663デフォルトの名無しさん
NGNG私も最初はそのように書いたのですが、BCBのFields[]はTFields*型で
あって、TField*型でない(非常に紛らわしい)ので、OnValidate()メソッド・
イベントはメンバにないのです。
なぜこのような仕様になっているのかわかりません。
DataSet->Fields->Fields[i]のようにするとTField*型になってうまく行く
ようです。これで少し試してみます。どうもありがとうございました。
0664デフォルトの名無しさん
NGNGあっ、答えてくださっていたのですね。ありがとうございます!
0665デフォルトの名無しさん
NGNG同じようにStrings->String[i]や、Items->Item[i]で参照する。
Delphiのpropertyが、沿え字つきの間接参照を
一段省略出来る構文になっているんだと思う。
0667デフォルトの名無しさん
NGNGなるほど、そういうふうに解釈すると筋が通りますね。
Delphiの参考書と首っ引きで悩んだ末に出した答えが偶然合って
いたのか・・・・これからは論理的に理解して書けます。嬉しいです。
>>666
昔はそうだったのですね。BCBは6から初めて使っているので、
まだ全然わからないのです。Delphiと、C++を頭の中で融合させる
のに必死になっています。
0668デフォルトの名無しさん
NGNGのですが、これは仕様でしょうか?
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNGそうですよね。で、TextOutAのままにしても、Aを削ってTextOutに
しても、どちらでもコンパイルは通って、実行も正常です。
0671デフォルトの名無しさん
NGNGWinGdi.hで
#define TextOut TextOutA
てな定義がされている為 TextOutAを定義していないというエラーが出るのを防ぐ為に
どこかで誰かが TextOutAから TextOutへのJumpをさせてるのだと思うけど
どこで誰がやってるのかが判らないな
0672デフォルトの名無しさん
NGNG検索で"TextOut"を探してみましたが、どうもよくわかりません。
Vclフォルダのどこかにあると思うのですが。
自動補完でそうなるということは、何か意味があるのでしょう。
0673デフォルトの名無しさん
NGNG雲は焼け 道は乾き 日はいつまでも沈まない
心は昔死んだ 微笑にはあった事も無い
昨日なんか知らない 今日は旅を一人
けれどもどこかでお前は待っていてくれる
きっとお前は風の中で待っている
どこかで誰かがきっと待っていてくれる
血は流れ 川は裂ける 痛みは生きている印だ
いくつ峠を越えた どこにも故郷はない
泣くやつは誰だ このうえ何が欲しい
けれどもどこかでお前は待っていてくれる
きっとお前は風の中で待っている
0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG8月中には出そうなヨカーン。
0676デフォルトの名無しさん
NGNG8月は Kylix3 で忙しいから無理じゃないの?
今四半期(9月末まで)は Kylix3 なんでしょ?それともいっしょにパッチがでる?
0677デフォルトの名無しさん
NGNG何処で落とせる???
0678デフォルトの名無しさん
NGNGTFormコンストラクタのDFMリソースを必要としない形 TForm(Owner, int)
を使って新規フォームを作成し、そこにいろんなコントロールを貼り付ける
実験を行っています。
ここで疑問なのですが、各コントロールも new で生成していますが、
各コントロールのParentプロパティに親フォームを指定しておけば、親フォー
ムを delete した時に貼り付けた子コントロールも自動的に delete される
のでしょうか?それとも、一個一個 delete しなければならないのでしょうか。
ご指導宜しくお願い致します。
0679デフォルトの名無しさん
NGNGTControlのParentと、TComponentのOwnerのヘルプ見て違いを叩き込め。
0680デフォルトの名無しさん
NGNGレスありがとうございます。早速ヘルプを見てみたら、Ownerプロパティに
「オーナーのメモリが解放されると,その所有コンポーネントのメモリも解放される。
したがって,フォームが破棄されると,そのフォーム上のすべてのコンポーネント
も破棄される」
とありましたので、TFormがOwnerであると、その上に配置されたコントロールの
破棄はTFormに任せてしまってよいようですね。
また一つ勉強になりました。
0681デフォルトの名無しさん
NGNGBCB6 SP1 でてるじゃん。
日本版はまだかよ。
ttp://community.borland.com/cgi-bin/surveys/thanx.cgi?cb6reg_updates_down
0682デフォルトの名無しさん
NGNGBCB5の時は一週間もかからなかったように記憶している。
0683デフォルトの名無しさん
NGNG素のWin98だと「欠落エクスポート」ってエラー出て動かないんですけども、
SP1あてれば直りますかね?
っていうか直ってくれないと使えないよ(泣
0684デフォルトの名無しさん
NGNGimplibで該当DLLのインポートライブラリ作り直せば?
0685デフォルトの名無しさん
NGNGimplibでoleaut32.dllのインポートライブラリを作ってリンクさせてみましたがダメですた。
おとなしくBCB5使ってます。。。(シクシク
0686デフォルトの名無しさん
NGNGちゃんと素のWin98で作ったか?
0687デフォルトの名無しさん
NGNG686 はガセ。
具体的な欠落しているエクスポート名は?
関連する情報をひとつ知っているけど Win95 の問題であって Win98 なら
出荷版から問題なかったはずなので。
0688デフォルトの名無しさん
NGNG********.EXE は
欠落エクスポート OLEAUT32.DLL:173 にリンクされています。
173は10進表記ですかね? だとすれば、VarRound だと思います。
Win98のOLEAUT32.DLLには存在しないです。
0689デフォルトの名無しさん
NGNG173 は VarNeg だぞ。俺のは 98 2nd edition だが.
こんな基本的なのが落ちている。ってことは
ないとおもうんだが。
0690デフォルトの名無しさん
NGNGでもやっぱり Win98 の OLEAUT32.DLL には存在しません。
ちなみに dll のバージョンは 2.20.4122.1 です。
0691デフォルトの名無しさん
NGNGすまん。このスレ見落としてた。
俺のは
2.40.4518.0
だいぶ進んじゃってるね。コモンコントロールアップデートかけてみたら?
0692デフォルトの名無しさん
NGNGBCCDevつかってBCC単品だけで使うのには大丈夫なのに・・・
0693デフォルトの名無しさん
NGNGttp://community.borland.com/cgi-bin/surveys/thanx.cgi?cb6reg_updates_down
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNGおい!
0696デフォルトの名無しさん
NGNGゴルァ!!
ttp://www.borland.co.jp/download/cppbuild.html
0697デフォルトの名無しさん
NGNGどういうこっちゃ ⊂⌒~⊃。Д。)⊃
0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNG出すんじゃない?ねえ某。
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG笑えんよ。
0702デフォルトの名無しさん
NGNG日本語 BCB6 は最初から Update1 の修正を反映しております。
が正解。US Update1 の日付、よく見てみ。
日本語 Update2 は盆明けの気がするよ....
0703デフォルトの名無しさん
NGNGUpdate2 で、コンパイラと STL が置き換わっている。
アップデートしてからやってみたら?
0704デフォルトの名無しさん
NGNG関係者?
某はここ見てるからなぁー
0705デフォルトの名無しさん
NGNG墓掃除しながら待ってみます
■ このスレッドは過去ログ倉庫に格納されています