[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/09 17:28 / Filesize : 190 KB / Number-of Response : 833
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++Builder相談室 Part18



1 名前:デフォルトの名無しさん [2007/09/01(土) 09:41:22 ]
C++Builderに関する質問・回答や議論等を行う相談室スレッド。

【前スレ】
C++Builder相談室 Part17
pc11.2ch.net/test/read.cgi/tech/1162918887/

過去スレ・関連サイトは>>2-7あたり。


※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part5
pc11.2ch.net/test/read.cgi/tech/1135127048/
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.13
pc11.2ch.net/test/read.cgi/tech/1175861395/
※CodeGear(Borland)関連はこちら
【Borland】CodeGearオッチャ その5【(ノ∀`)アチャー】
pc11.2ch.net/test/read.cgi/tech/1186333161/


449 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:16:19 ]
6はちゃんとtrue返すから、5のバグだと思うけど、
それとは関係なくvector<bool>は使わないほうがいいと、
なんかの有名な本に書いてるらしい。

450 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:23:24 ]
>それとは関係なくvector<bool>は使わないほうがいいと、

kwsk

451 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:06:02 ]
>>450
&v[0] が bool* ではない

452 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:25:42 ]
>>449
Effective STLの第18項だな
vector<vool>はproxy classを使っているのでよくないんだと

453 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:26:49 ]
>proxy class

サンクス & kwsk

454 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:36:38 ]
proxy class=代理クラス

More Effective C++ 項目30

一般的にはクラスの中にクラスを作って普通ではできないような
操作を行う。

455 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:56:53 ]
442です。Web検索で中華サイトや英文サイトを彷徨った結果、なんとか解決しました。

456 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:47:15 ]
結局おまえらって糞の役にも立たなかったね。あばよ

457 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:48:08 ]
>>449
ありがとう。
VCでやってみてもtrueでした。
なんとなくわだかまりが取れました。



458 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:49:50 ]
つまりRogue Waveのバグか
こいつバグ多いねえ

459 名前:デフォルトの名無しさん [2008/02/28(木) 14:15:17 ]
std::fstreamはstd::iostreamから派生しており、std::iostreamは
std::ostreamとstd::istreamから多重継承しています。

しかしstd::ostreamを受け取る関数にstd::fstreamのオブジェクトを
渡してCodeGuardを掛けると多量のエラーメッセージが実行時に
出ます。これって仕方ないのですか?

460 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:04:15 ]
はい

461 名前:デフォルトの名無しさん [2008/02/28(木) 15:19:28 ]
糞仕様だな。アップキャストにも対応してないのか

462 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:32:24 ]
はい

463 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 22:36:44 ]
もしかして、BCBってboost::trim()使えない?


464 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:12:27 ]
はい

465 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 08:23:42 ]
いいえ


466 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:36:59 ]
バージョンくらい書けよ

467 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:12:33 ]
BCB5でTQueryを使って2秒おきにデータを取得しているのですが
数分放置しておくとソフトが落ちてしまいます。
やっていることは
Query->SQL->Clear( );
Query->SQL->Add( "select * from table1" );
Query->Open( );
Query->First( );
Query->Next( );  30件くらい
Query->SQL->Clear( );
Query->SQL->Add( "select * from table2" );
Query->Open( );  ここで落ちます
Query->First( );
Query->Next( );  10件くらい
と1つのモジュールで同じTQueryで2つのテーブルを読んでいます
TQueryを使う際になにか注意事項とかありましたら教えてください



468 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:15:17 ]
>>467
例外とかチェックした?

469 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:17:18 ]
2秒でデータを取得が終わる前に、QueryのOpen() を実行したらデータセットがメモリから破棄されて、そこにアクセスしたr落ちるんじゃね?

>TQueryを使う際になにか注意事項

2秒以内に処理が終わらなかったら、処理をスルーするって工夫要るけど。
それに加えてQuery使いまわすんじゃなくて、作り直したら?

Query = new TQuery(this);
try {
 Query->SQL->Clear();
 //処理
__finally {
 delete Query;
}

470 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:27:48 ]
>>468
try内でやっているのですがcatchにはいかずにそのまま落ちてしまいます
>>469
TTimerで2秒間隔でやっていてTimerに入るとタイマーを止めているので
一応DB読み込みが再度呼ばれることはありません。
Queryでテーブル2つを読むより毎回newしたほうがいいのでしょうか?

471 名前:467 mailto:sage [2008/03/03(月) 10:37:14 ]
ちなみに、Query1でtable1、Query2でtable2と
Queryを2つにしてやってみたのですがやっぱり強制終了してしまいます

ソフト起動時に設定
Query1->SQL->Clear( );
Query1->SQL->Add( "select * from table1" );
Query2->SQL->Clear( );
Query3->SQL->Add( "select * from table2" );

{
  Query1->Open( );
  Query1->First( );
  Query1->Next( );
  Query1->Close( );  ここで必ず強制終了します

  Query2->Open( );
  Query2->First( );
  Query2->Next( );
  Query2->Close( );
}


472 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:40:44 ]
レコード件数は可変?

1回多くNextしたりするとドカンと落ちる現象はあったような。

473 名前:467 mailto:sage [2008/03/03(月) 10:50:50 ]
>>472
可変ではありますが
query->First( );
for( int i = 0; i < query->RecordCount; i ++ ){
  query->FieldByName
  query->Next( );
}
としています・・・

ちなみに落ちる場所は同じなのですがタイミングはそれぞれで
1分で落ちる時もあれば5分で落ちる時もあります。
1回目で落ちるということは今のところありませんが・・・

474 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:52:56 ]
>for( int i = 0; i < query->RecordCount; i ++ ){

これ、マズイとオモ。

>while (!Query->Eof) {
みたく、次が有るか無いかの判定じゃないと。

上にも書いたが無いのにNextすると、catchできずにドカンと落ちる。


475 名前:467 mailto:sage [2008/03/03(月) 10:56:59 ]
>>474
うわー
やっぱりTQueryがまずいんじゃなくて処理がまずいですか・・・
今はレコード数に変化がなくその処理でレコード数が同じだったからいいとおもってましたが
見方がわるかったんですね、ありがとうございます。
その方法で試してみます。

476 名前:467 mailto:sage [2008/03/03(月) 11:06:02 ]
うう、やっぱりCloseで落ちてしまいます・・・
しかし>>474さんのやりかたはヘルプにも書いてあったので参考になりました。

ちなみにtable1の方のQueryをためしにnewして動的に作成してやってみたところ
今のところ落ちてないです。
うーん、設計時に追加したのと動的にnewしたものと何が違うのかなあ・・・
これtable2もnewで作成したqueryを使う方が安全なのかな・・・

477 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:11:49 ]
>query->FieldByName

してる最中に、該当レコードが消えてる可能性は無いの?
該当レコードが消えるなら、RequestLive を falseにしてる方が良いかなぁ。



478 名前:467 mailto:sage [2008/03/03(月) 11:30:19 ]
>>477
レコードが消えることはありませんがRequestLiveはtrueにしてます・・・

やっぱりnewで作ったqueryでやると落ちないのですが
これってRequestLiveがfalseだからなのでしょうか???
ちょっと試してみます

479 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:33:28 ]
>newで作ったquery
>RequestLiveがfalse

落ちる原因は分からないが、上記2つを揃えるQueryは氏ぬ程安定する。

480 名前:467 mailto:sage [2008/03/03(月) 11:43:17 ]
>>479
確かにnewでつくったqueryでは全く落ちなくなりました。
ちなみに、試しに当初のに戻して設計時に追加したqueryで
RequestLiveをfalseにしてやっているのですが
これもまた今のところ落ちていません。
これ2秒毎にDBを読んでいるのですが、DB読み込み時にnewするのと
起動時の最初にnewするのとどちらがいいでしょうか?

481 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:55:35 ]
>DB読み込み時にnewするのと 起動時の最初にnewするのと

Queryをグローバルとして使いまわしはソース読みにくかったりするが、上記2つは大差無いんでわ?

482 名前:467 mailto:sage [2008/03/03(月) 11:56:07 ]
皆様いろいろありがとうございました。
RequestLiveをfalseにするだけで落ちなくなりました。
なんかこれ片方向しかあれとか書いてたからこれをtrueにしないと
書き込めないとおもってtrueにしてたのですが(この同じQueryで別タイミングで書き込みもしてます)
これselect時のみのあれだったんですね。

ちなみにUniDirectionalはtrueでいいのでしょうか?
メモリ節約になるとかかいてますので

483 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:57:26 ]
>ちなみにUniDirectionalはtrueでいいのでしょうか? メモリ節約になるとかかいてますので

聞いた事歩けど、気にしたことは無い。

484 名前:467 mailto:sage [2008/03/03(月) 11:58:23 ]
>>481
そうなんですよね、グローバル化は見づらくなるのですが
なんというか2秒毎にnewしてdeleteしてって繰り返しても大丈夫なのかなとか・・・
1ヶ月とか放置するので何か昔のmallocのイメージがあってちょっと不安になったので

485 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 12:05:13 ]
>なんというか2秒毎にnewしてdeleteしてって繰り返しても大丈夫なのかなとか・・・

大量のnewや大量のdeleteは性能に関係するかも知れないが、
2秒にnewとdelteの嵐なんてC++ではちょーふつーできごと。

486 名前:467 mailto:sage [2008/03/03(月) 13:08:40 ]
>>483
これはtrueのままでも落ちるのとは無関係みたいなのでそのままにしておきます。
>>485
あ、そうなんですか。それを聞いて安心しました。
まあVCL使ってると内部で山ほどしてるでしょうし問題ないですよね。

487 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:10:45 ]
>大量のnewや大量のdeleteは性能に関係するかも知れないが、

正しくは、
>超大型メモリのnewやdeleteは
かな。



488 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:01:59 ]
心配してるのは断片化だろ? サイズの違うメモリーを確保・開放を続けると
メモリの利用箇所が虫食いになって最後は使えなくなるという。

これは今の組み込みや、昔のPCのようにメモリ容量の制限がキツイと困る問題だけど
必要なメモリの何10倍もある現代のパソコンでは問題にならない。

489 名前:デフォルトの名無しさん [2008/03/04(火) 02:14:05 ]
Windowsなら・・・きっとWindowsなら何とかしてくれる・・・

そう信じてnew-deleteしまくってます。。。

490 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 03:19:28 ]
newとdeleteをオーバーロードしてオブジェクトプールから取り出すようにする

491 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 07:24:38 ]
>>488
こういう例もありましてね
ttp://www.yoshidam.net/diary/200410.html#d05

492 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:44:15 ]
>心配してるのは断片化だろ? サイズの違うメモリーを確保・開放を続けると
>メモリの利用箇所が虫食いになって最後は使えなくなるという。

コンパイラが、スタックエリア、ヒープエリアを確保しているだろうから、それはない。



493 名前:デフォルトの名無しさん [2008/03/04(火) 18:18:24 ]
ForceDirectoriesが未解決ってエラーが出るのですが#include <FileCtrl.hpp>以外に何か必要なことってありますか?

494 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:15:12 ]
ヘルプを見なさい

495 名前:デフォルトの名無しさん [2008/03/05(水) 10:24:54 ]
知らないならレスしないでウザイだけです

496 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:44:19 ]
そうですね。知らないなら回答すべきではないです。
でも俺は知ってるからレスしました。ヘルプを見なさい。

497 名前:デフォルトの名無しさん [2008/03/05(水) 22:30:41 ]
>>495
ヘルプ読めないなら来ないで邪魔です



498 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:03:09 ]
わからない七大理由

1. 読まない ・・・説明書などを読まない。読む気などさらさらない。
2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5. 環境のせいにする ・・・自分が悪いのではなく環境が悪いと責任転嫁する。
6. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
7. バカだから ・・・バカだから。



499 名前:デフォルトの名無しさん [2008/03/06(木) 10:31:56 ]
へたれな事ですみません。。
BorlandC++Builder6を使用しています。
コンポーネントの端に「Office2k」があって、Work,Excel,Access等の制御ができそうなものがあります。
ヘルプやキーワードにも見当たらず、使い方がいまいちわかりません。
田舎にしては大きな本屋で調べても、「Office2k」に関するものはみあたりませんでした。
てか、Borland自体少ないですし。
どこかにリファレンスや参考になる資料はないでしょうか。
教えてください。
お願いします。

500 名前:デフォルトの名無しさん [2008/03/06(木) 10:35:15 ]
1つ抜けていたので追記します。
使用したいOfficeはAccessです。
ごめんなさい。。

501 名前:デフォルトの名無しさん [2008/03/06(木) 10:52:26 ]
グg(ry

502 名前:デフォルトの名無しさん [2008/03/06(木) 10:59:07 ]
各種検索サイトも見たのですが、リファレンスらしきものは発見に至りませんでした。
Excelの使用サンプルはあったのですが、Accessで使用したいことに応用はできませんでした。
どのコンポーネントをどう使えば、どうなるのかさっぱりなんです。
皆様からみればアホみたいな事ですみませんが、なにか知っていることがあれば教えてください。
お願いします。


503 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:28:38 ]
具体的に何を実現したいのかを聞くのが当たり前だと思うのだが。
具体的に何を実現したいのかさえわからないのかね。


504 名前:デフォルトの名無しさん [2008/03/06(木) 11:31:31 ]
何がしたいのかは上にも書きましたが、使い方を知るためのリファレンスを探しています。
解りにくくてすみません。


505 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:40:44 ]
www.google.co.jp/search?hl=ja&q=TAccessApplication&btnG=%E6%A4%9C%E7%B4%A2&lr=
ぐぐったらいっぱい出てくるじゃん


506 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:56:00 ]
微妙じゃね

507 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:25:30 ]
ググって実質80数件しか出ないコンポは茨の道な気ガス



508 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:27:57 ]
まあCOMコンポーネントだから、リファレンスならMSDN見るのが一番でない。
ぱっと見VBAのしか見当たらないけど。オブジェクトやメソッドの意味は調べられるし、
タイプライブラリから機械的にクラス作ってるだけだから、出来る事は同じはずda。

509 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:35:23 ]
ACCESS扱うだけならコンポーネントなんて通さなくても自分でソース書いた方が楽

510 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:43:39 ]
やることはほとんど同じだけどな

511 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:50:31 ]
C++Builderのコンポーネントは単なるOfficeのオートメーションサーバーのラッパークラスに
すぎないから、ラッパークラスのメソッド名やプロパティ名は元のオートメーションサーバーのそれと
ほぼ同じはず。つまりは、VBやVBAとほぼ同じ。
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/arch_default.asp
から、「MSDN ライブラリ アーカイブ」->「Office ソリューション開発」たどれば、よろし。



512 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:04:21 ]
COM関係は自分で理解して書いた方が楽だね
そもそも付属のコンポ、マトモに動作するかすら疑わしい

513 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:49:22 ]
人が手で書いたものじゃないんだぜ。getter/setterをプロパティにしたり、インターフェースを
スマートポインタで包んだだけのもの。

514 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:01:46 ]
まぁ、アーリーバインディングを行う場合は、C++Builderのタイプライブラリ
インポーターを使ってラッパ作成しないと死ぬが、
実際はそこまで速度要求するとは思えないからバリアントを使ったレイトバインディングで十分だとは思う。
アーリバーインディングはサーバーの特定のバージョンに依存しちゃうしね。


515 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:29:26 ]
514だけど、514の発言は気にしないでくれ。ここは、C++Builderのスレね。Delphiメインな
俺はC++Builderにバリアントなんてあるのか知らん。めんご。



516 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:50:10 ]
拡張キーワードみたいのはなくて、クラスで表現してるから見た目はいまいちだけどあるよ。

Variant v = Variant::CreateObject("Access.Application");

v.OlePropertySet("Visible", true);

517 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:00:52 ]
普通のサンプル利用するならTVariantの方がわかりやすいかもしれん
Variant、OleVariant、TVariant、好きなの使えw



518 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:09:53 ]
504は既にみんなが何を書いてるのかすら理解に苦しんでるかもしれんw

519 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:39:16 ]
すみません、他のモジュール書いてました。。
VB等とプロパティが同じなら、そこから追えそうです。
ありがとうございました。m(_ _)m


520 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:35:05 ]
C++Builder2007にはIBXついてますか?

521 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:37:24 ]
え”、付いてなかったら、自分自滅するお!

522 名前:デフォルトの名無しさん [2008/03/11(火) 10:39:39 ]
DBGridで行毎に色を変える方法を教えてください

523 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 16:40:12 ]
InterBaseのコンポーネントは一通りあるよ。C++Builder2007 Professional。
使ったこと無いけど。


524 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:16:20 ]
>>522
TDBGrid使ったことないけど、多分TDBGrid::OnDrawDataCellで記述する。

525 名前:デフォルトの名無しさん [2008/03/12(水) 18:37:11 ]
>>524
確かに色を付けることはできるのですが
イベントに来たときのRowはどうやって取得したらいいですか?

526 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:02:04 ]
>>525
こういうことをしたいのかな?
ttp://dn.codegear.com/jp/article/28144

527 名前:デフォルトの名無しさん [2008/03/13(木) 10:04:57 ]
>>526
そうそうそれです!
色の塗り方はわかるのですがイベントに入った時のRow又はレコード位置がわからないので
奇数行ならっていう条件がわからなくて・・・
それと色を塗るとテキストが消えてしまうのでStringGridみたいに
Cellsから値をとってTextOutできないのでやはりレコード位置から
データを持ってくる必要がありますか?



528 名前:デフォルトの名無しさん [2008/03/13(木) 10:06:55 ]
と、思ったのですが>>526さんのリンクにしっかりやりかた書いてますね・・・
ありがとうございました。
参考にさせていただきます

529 名前:デフォルトの名無しさん [2008/03/13(木) 10:38:43 ]
うーん・・・
やっぱりColumn->Field->DataSet->RecNoが常に-1になってしまって
行の判別ができないです・・・
何故RecNoが-1になっちゃうのでしょうか?

530 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:35:54 ]
データベースによってはRecNoは無効になる。というかそういうRDBMSのほうが多いのでは?

531 名前:デフォルトの名無しさん [2008/03/13(木) 13:19:28 ]
ヘルプにも-1になるって書いてますねこれ。
TQuery使ってるのですがどうやってレコード番号というか
グリッドの行を識別したらいいんでしょうか

532 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 15:37:18 ]
RDBのテーブル設計で、Int型のレコード番号つけてそれをプライマリキーにするだろ、jk。

533 名前:デフォルトの名無しさん [2008/03/13(木) 15:46:02 ]
そんな頭の悪いレスを望んではいません

534 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 17:36:52 ]
イベントハンドラでセルのTop座標が受け取れるので、それをセルの高さで割って見てはどうだろう

535 名前:デフォルトの名無しさん [2008/03/13(木) 17:40:14 ]
す、スクロールしていたら・・・

536 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:40:07 ]
VCLコンポーネントでマルチスレッドをする方法はないでしょうか。
TImageがフォームに二つあり、極端に大きな画像を両方に読み込ませたいとか。

537 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 07:49:21 ]
互いに別の空間で動いていたら問題ないけどね
同じメモリをアクセスする場合は1wordアクセスにするか、出来ないなら排他処理する。
メソッドポインタが2wordになる事に注意して書けば大丈夫でしょう。

Loadする場合は、
1, まずParentを外し、フォームの参照をnilにしておく。
(フォームでそのImageを間違って参照しないように)

2, LoadFromFileまでは別スレッドで行う為の 1word のグローバル変数のフラグを立てる
3,読み終わったら、そのスレッドからフォームにメッセージを送る。
 メッセージでフォームの参照とParentを元にも戻す

A,B 2つある場合は、それぞれフラグを別にして、読み込みスレッドは1つで
片方が処理終わってからフラグを見てBを読む。



538 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 08:02:57 ]
ここはBuilder相談室。


539 名前:デフォルトの名無しさん [2008/03/14(金) 08:25:35 ]
>>536
JPEGやらPNGやらで展開処理が重くてマルチスレッド(マルチコア対応)化したいというのなら
展開用スレッド作ってそれぞれ展開してsynchronizeだかなんだかでVCL割り込んでフォームのTImageに紐づければよくね?

540 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:24:15 ]
いつも御世話になります。
フォームを徐々に透明化して行きフェードアウトするコードを書いています。
for文がPCの処理に依存している為、
どんな環境でも(ある程度)同じ間隔で
透明度の変化を希望しています。
なにか良い手はないでしょうか?
システム版画利案が痛いですが。ソース晒します。

for(int it=100;it>0;it--){
fmShow->fcfmShowTransparency(it);
Sleep(1);
Application->ProcessMessages();
}
void __fastcall TfmShow :: fcfmShowTransparency(int intTransparency){
//ツールチップの透明度を設定
int intMyTransparency=(int)((double)intTransparency*2.55); // *255/100
fmShow->AlphaBlendValue=intMyTransparency;
}
環境winXP bcb2007

541 名前:デフォルトの名無しさん [2008/03/16(日) 19:44:40 ]
>>540
::Sleep()で時間稼ぐとか

542 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:51:31 ]
>>540
フェードアウトに掛ける時間を決めて、経過時間から不透明度を設定するというのは?

// 1000msでFO(簡略化コード。※バグあり)
DWORD dwStart = ::timeGetTime();
while( 1 ){
  int nOpaque = 255 - ( ( ::timeGetTime() - dwStart ) * 255 ) / 1000;
  if( nOpaque < 0 ){
    break;
  }
  Form->AlphaBlendValue = nOpaque;
  Application->ProcessMessages();
  ::Sleep( 1 );
}
Form->AlphaBlendValue = 0;

時間が厳密じゃなくてもいいのなら、タイマイベントでいいと思うけど。

543 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 20:05:48 ]
::AnimateWindow(Handle, 1000, AW_HIDE | AW_BLEND);

544 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 20:32:44 ]
>>541>>542>>543
ありがとうございます。
AnimateWindowが正解でした。
レベルが低くて申し訳ないです。


545 名前:デフォルトの名無しさん [2008/03/16(日) 22:01:36 ]
AnimateWindowなんてAPIあったのか・・・俺も使おうかな。

546 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:03:37 ]
 ::Sleep( 1 );
この「::」ってなんですか?

547 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:29:55 ]
Global scope



548 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:33:15 ]
つけなかったらどうなるの?
どんな影響が。。。
気が向いたらオシエテ

549 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:35:02 ]
そのコードの書いてある名前空間内(グローバル名前空間内でないとする)に
Sleep という名前の関数なりなんなりを作った場合に
そちらが使われてしまう。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<190KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef