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


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

くだすれC++Builder(超初心者用)その3



1 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 03:39:51 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、 
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 
C++Builder使いが優しくコメントを返しますが、 
お礼はC++Builderの布教と初心者の救済をお願いします。 

Borland Home Page   www.borland.co.jp/ 

<過去スレ> 
くだすれC++Builder(超初心者用) 
pc8.2ch.net/test/read.cgi/tech/1117225464/l50

くだすれC++Builder(超初心者用)その2
pc10.2ch.net/test/read.cgi/tech/1144308804/l50

<兄弟スレ> 
くだすれDelphi(超初心者用)その39
pc10.2ch.net/test/read.cgi/tech/1169386914/l50


342 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 08:43:04 ]
>>341
homepage1.nifty.com/MADIA/delphi/delphi_bbs/200703/200703_07030070.html

343 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:33:37 ]
>>342
ありがとうございます。

344 名前:デフォルトの名無しさん [2008/01/02(水) 15:07:36 ]
C++Builder2007のエディタの支援機能が誤作動してるみたいで、
改行するたびに余分な}が勝手に入力されるんだけど、これって直らないの?

誤作動するのは次のコードの前後からみたいだが。

char c[2]="\"";





345 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 23:31:40 ]
QCには出てないね。登録を依頼してみたら?

346 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:33:14 ]
Turbo C++ を始めようと思ったのですが、
.Net frame work v1.1のインストールができません。
WindowsXP SP2で、Windows Installerサービスは起動してます。
何か気をつけなければならない要素ってありますか?

347 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:00:03 ]
>346
個別にMSのサイトからダウンロードしてインストールしてみたら?
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&DisplayLang=ja
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=04dbaf2e-61ed-43f4-8d2a-ccb2bab7b8eb&DisplayLang=ja

348 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:26:53 ]
>>347
おっ うまくいきました
ありがとうございました〜

349 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:45:55 ]
Windows Updateとかでセキュリティ関係の更新プログラムを適用するのを忘れないようにね、

350 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 16:13:08 ]
C++Builder起動直後のブラウザ画面で、
どのメニューをクリックしても反応しないのですがどうしたらなおりますか?
ブラウザは普段はIE6(sp1)+Sleipnirを使っています



351 名前:350 mailto:sage [2008/01/08(火) 20:50:37 ]
IEのインターネットオプションで、bds:/を信頼済みサイトに登録してみましたが駄目でした
ここで不具合でた人いないのかなぁ・・・

メニューのヘルプ>ボーランドのホームページ
を選択すると、ブラウザでwww.borland.com/jp/が開き、
この画面では、普通にブラウジングできるので、
bds:/だから駄目なのかな、と思ったのですが・。・・

352 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:03:13 ]
バージョンくらい書けよ


353 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:35:01 ]
>>352
すいません忘れてました

Turbo C++
Borland(R) C++Builder(R) for Microsoft(R) WindowsTM Version 10.0.2288.42451
Update 2 Copyright (C) 2005 BorlandR Software Corporation. All Rights Reserved.

OS
Windows XP Home Edition
build 2600.xpsp_sp2_gdr.070227-2254 (Service Pack 2)

IE
Version 6.0.2900.2180.xpsp_sp2_gdr.070227-2264
暗号強度: 128 ビット
プロダクト ID:76492-OEM-0011903-00111
更新バージョン:; SP2; 3283;

となっています よろしくおねがいします

354 名前:デフォルトの名無しさん [2008/01/10(木) 03:09:25 ]
すいません
16進数が入ったBYTE型変数を10進数のINT型の値に変換するにはどうすればいいですか?

355 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 08:03:39 ]
「16進数が入ったBYTE型変数」
の意味が判らん。

もしかして単なるBYTE = unsigned char の配列か?
ASCIIで文字列が入ってるなら '$'を足して StrToInt とかだが
配列ならどっちが上位なのか判らんけど 256倍しながら加算すればいいだけ


「10進数のINT型の値」も意味が判らんが、後で10進数で表示したいって事なら、そんな情報は胸にしまっとけ
パック10進でって事なら、そう書け

356 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:20:38 ]
Turbo C++ Builderで、XPスタイルのボタンって作れますか?

357 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:04:00 ]
>>356
TXPManifestをパレットからフォームに適当に配置する

358 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:56:43 ]
>>357
ありがとう
もうCodeGearについていく

359 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 08:20:08 ]
俺も

360 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 13:36:25 ]
C++Builder 2007ではその必要すらないのだが



361 名前:デフォルトの名無しさん [2008/01/16(水) 22:17:55 ]
シリアルポートからのオン信号とオフ信号を受信してその間の時間を表示するだけのプログラムを
作りました、最大でも約5秒程度です、パソコンによっては遅くカウントされてしまいます。
いろいろなパソコンで試して見ましたが、パソコンのスピードやWIN2000 win xp とか関係なく
正しく計測されるパソコンもあります、何かパソコンの設定のような気もしますが
どなたかわかりますか? c++builder5 pro で作ったプログラムです。

362 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:03:39 ]
>>361
> シリアルポートからのオン信号とオフ信号を受信して

受信処理はどうなってるの?というかオン信号とオフ信号って?

> その間の時間を

どうやって取得してる?

> 何かパソコンの設定のような気もしますが

まず自分のコードを疑おう。

> どなたかわかりますか?

エスパー求むってこと?

363 名前:デフォルトの名無しさん [2008/01/16(水) 23:28:12 ]
>>362
説明不足でした。
特定コマンドをオン信号 オフ信号として判断してます。


364 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:41:13 ]
このスレには超能力者は存在していない。
阿呆の見本なら居るようだが。


365 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 07:40:26 ]
>>363 キミが困ってるのは時間表示の結果が思うようにならないって事なんだろ?
試しに複数の方法で計測してみたらどうだ?

1、VCL  Now() 関数の差
windowsAPI
2 GetTickCount()の差
3 GetMessageTime()
4、timeGetTime()
5、QueryPerformanceCounter()/QueryPerformanceFrequency


366 名前:デフォルトの名無しさん [2008/01/17(木) 08:37:09 ]
>>365
親切に対応して頂き有り難う御座います。
試してみます。

367 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:51:17 ]
あとはシリアルポートの通信速度の設定とか

368 名前:デフォルトの名無しさん [2008/01/19(土) 18:42:14 ]
C++Buider6を使ってます。

何ミリ秒後に処理を行うというプログラムを書きたいのですが、
時刻をミリ秒以下の単位で加算できるような関数はないでしょうか?
一応、単一スレッドで、複数の処理を実行しないといけないので、Sleep
による停止は出来ません。


例えば、こんな感じで使いたい:

time = getTime();

time1 += 3500;
time2 += 4000;
:

for(;;){
now = getTime();
if( now >= time1 ){
doSometing();
time1 = now + 3500
}
if( now >= time2 ){
doSometing();
time2 = now + 3500
}
:
}



369 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:54:10 ]
CodeGear C++Builder2007の評価版を使っています。
BCB5で作ったソースを読み込み実行すると
パラメータSenderは一度も使用されないと警告がでます。
気になります。
警告を外すのもなんですし。
警告が55もだされるのもいやなんですが。
みなさんはどんな感じなのでしょうか?

void __fastcall TForm1::Button8Click(TObject *Sender)

ちなみに呼び方はBCB7でOK?

370 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 20:43:28 ]
C++Builder(BCB7ではなくC++Builder2007かBCB11だと思う)を持ってないんであてずっぽなんだけど、
void __fastcall TForm1::Button8Click(TObject *)
{...
とかパラメータを型だけにして仮引数名を書かないってのはだめですか?




371 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 20:51:06 ]
(TObject *)

がっつり怒られました^^;

372 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 20:55:05 ]
あ、cppだけSenderを消したらコンパイル通りました。
いろいろやってみます。
Senderってなんだっけ?
調べてみます。ども、助かりました。

373 名前:デフォルトの名無しさん [2008/01/19(土) 21:01:26 ]
自己解決
timeGetTimeの戻値を加算で出来ました。


374 名前:370 mailto:sage [2008/01/19(土) 21:06:48 ]
Senderはそのイベントを起動したオブジェクト。この場合はButton8へのポインタが入っている。

375 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:06:59 ]
SenderのほかにShiftとかX・Y・Buttonとかあったので、
消したら警告はきれいさっぱり。
ほんとにいいのか?ま、いいか

376 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:20:42 ]
>>374
了解です。

377 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:45:26 ]
>>373
完全にオーバースペックになるけどパフォーマンスカウンタ使うと恐ろしい精度で計測できるよ

378 名前:370 mailto:sage [2008/01/19(土) 22:17:20 ]
使わないパラメータは名無しでおk

379 名前:デフォルトの名無しさん [2008/01/21(月) 16:25:37 ]
小さいアイコンを取得したくて、下記のようにしてみました。
TImage* img=new TImage(this);
img->Height=16;
img->Width=16;
Image1->Picture->Icon->Handle=LoadIcon(NULL,IDI_APPLICATION);
すると大きいアイコンの左上1/4が取得されてしまいました。
小さいアイコンをリソースから取得するにはどうすればいいのでしょうか、教えてください。


380 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:43:01 ]
LoadImageでサイズ指定してみては?



381 名前:デフォルトの名無しさん [2008/01/21(月) 19:55:02 ]
Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。
プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、

本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)

今になって分かりました。
彼らもまた、理解できていなかったのです。

プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
(何といったって、参考にしようとする市販の本さえ、 きちんと説明してくれていないのですから、
 その証拠にC言語の学習で悩む人がどんなに多いことか)

私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。

私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。

そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。

宣伝と言ってしまえば、そうなってしまうかもしれませんが、ひとりでも多くのプログラマを救いたい。

プログラムの世界そのものの実力を底あげに貢献し、
無意味なバグに、残業したり、悩んだりして欲しくないのです。

興味がある方はどうか、下のサイトをみてみてください。
mori.eco.to/

382 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:42:30 ]
日本語でおk

383 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:49:20 ]
そろそろひろゆきの目に止まって多額の広告料金請求されっぞ

384 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:03:25 ]
>379
ExtractIconEx

385 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:03:53 ]
ごめん。リソースからなら違うや

386 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:14:57 ]
>>381
おまえ、2chに宣伝出したら、広告料すごいぞ?
最初にレス書いた時の許諾事項は読んだよな?大丈夫なのか?

387 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:07:36 ]
私の年収は10億万円なので大丈夫です。

388 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 00:33:41 ]
俺の年収は一兆億円だもんね!

389 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 03:30:36 ]
TForm1->Release;
としたあと、その開放完了をWaitForSingleObjectのように低い負荷で待ちたいと考えています。
どのようにすればよいでしょうか。
よろしくお願いします。

390 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 07:50:02 ]
他のスレッドで待ちたいの?
どっちにしても、メインスレッドでメッセージポンプ回してやらないとPostMessage
しただけじゃいつまでたっても終了しないよ。



391 名前:デフォルトの名無しさん [2008/01/29(火) 10:22:48 ]
おしえてください。
下記のように定義して、abcの要素数分(5個)をdefの大きさ(x)にしたいのですが
abcを書き換えても、xが自動的に決まるように書くにはどう記述すれいいですか。
AnsiString abc[]={
"111.",
"222",
"333",
"444",
"555"
};
int def[x];


392 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:34:46 ]
>>391 こういう風に。
blogs.wankuma.com/melt/archive/2007/09/01/93176.aspx

393 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:02:17 ]
>>392
ありがとう。
_countof()はBuilderには無いんですね。エラーですた。
template <typename _CountofType, size_t _SizeOfArray>
char (*__countof_helper(_CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) sizeof(*__countof_helper(_Array))
これをこぴってきて
_countof(abc) にて要素数が簡単に取得できるようになりました。



394 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:14:23 ]
BDS2006で問題なかったプロジェクトが
2007でコンパイルしたらリソースリークが発生した。なんで?
sys\sysutils.pasの何行目とか表示してるけど、このファイルどこにあるの?
エディタのメッセージからは開けなかった。環境変数がおかしいのかな?

395 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:57:59 ]
質問です。

windows タスクバーのボリュームコントロールをプログラムから開くには?
スタート・メニューは、webから探した

HWND hTaskBar=FindWindow(PChar("Shell_TrayWnd"), NULL);
if (SetForegroundWindow(hTaskBar)){
PostMessage(hTaskBar, WM_USER+0x0104, 0, 0);
}
で開けたので、似たような方法で出来ると思うのですが???



396 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:13:23 ]
::ShellExecute(0, "open", "sndvol32.exe", 0, 0, SW_SHOWNORMAL);

397 名前:389 mailto:sage [2008/01/29(火) 21:04:42 ]
>>390
ありがとうございます。
DLLを作っているのですけれども、ホストの終了時に呼ばれる関数内でフォームを解放し、それが完了したらホストに値を返すようにしたいです。
だから別スレッドでは無いと思います。

398 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:06:13 ]
>>396
レス感謝です。

実は先ほどボンヤリとsystem32フォルダを眺めていてsndvol32.exeを見つけ
WINEXECで開けました。
メインのボリュームだけで良かったんだけど、取り合えず良しとします。

最終的にはアプリ内の自作スライドでこのマスター・ボリュームをコントロール
したくてWin32 API プログラマーズ リファレンスと格闘中です(^^;)

399 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:23:07 ]
>394
FastMMで詳細を表示させてみたら?

400 名前:394 mailto:sage [2008/02/01(金) 21:51:01 ]
すまん。俺のプログラムミスだったらしい。
原因はよくわからんが、同じ処理を2回やってたのがまずかったらしい。
AnsiStringに数字を入力するときにエラー処理として
try{
edit->Text.ToDouble();
}catch{
edit->Text="1.0";
}
みたいなコード書いてて、この処理の後に別の関数呼ぶんだけど
同じような処理の後、描画の処理になってたのを
このコードの別の関数を呼ぶ場所に描画の関数を書いたらエラーは出なくなったよ。
何でエラーが出たのかさっぱりわからん。
とりあえず自己解決しました。
FastMMはこれから作るプログラム全部に導入しようと思います
ありがとう。



401 名前:デフォルトの名無しさん [2008/02/06(水) 14:17:19 ]
OpenMPは使えますか?

402 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:40:37 ]
使えますん。


403 名前:デフォルトの名無しさん [2008/02/16(土) 13:24:18 ]
AnsiString s;
AnsiString t="";
s.printf("t=%s",t);
とすると、s が "t=(null)"
となってしまいます。
この(null)を出力させないようにするには、
s が "t="となるようにするにはどうすればいいでしょうか。


404 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:43:33 ]
s.printf("t=%s",t.c_str());

405 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:28:37 ]
>>404
早々に、さんくすです。


406 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:05:06 ]
TubroC++のIDEでhとcppを切り替えるタブが下に付いているんだけど
上に持って来ることは出来ますか?
なんか使いづらくて

407 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:07:37 ]
そんなことよりCtrl+F6押そうぜ!

408 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:06:00 ]
Ctrl+F6は窓使いの憂鬱で別のキーに設定して使ってます
昔のバージョンでは1発で目的のファイルを開けたのに
つかいにくく感じるのは自分だけなのか

409 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:40:26 ]
コンポーネントパレットが見えなくなったのですが
修復できる方法はないでしょうか

410 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:55:19 ]
レジストリのみのインストールは?



411 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:56:04 ]
メガネ買って来い

412 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 09:56:40 ]
はてな???

プログラム上からのフォルダーのリネーム
ってどうやるんでしょう?

環境XP+BCB++V5。手段は問いません。



413 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:30:12 ]
>>412
Sysutils::RenameFile(const AnsiString OldName, const AnsiString NewName);

414 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 19:57:19 ]
>>413
レス有難う

ファイルじゃなくてフォルダ
(ディレクトリ)のリネームなんですよ
RenameFile(a,b)ではエラーになりますね。
ヒントなのかな・・・読めない・・?


415 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:02:04 ]
どんなエラー出る?

416 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:18:06 ]
ありがちなところだと、パス名含めてフォルダ名が長すぎ

お手軽にMoveFileのUnicode版使えば?

417 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:52:34 ]
6.0使っています。
image->canvas->pixel[x][y] = (TColor)((a[x][y] >> 16) | (b[x][y] >> 8) | (c[x][y]))
でCanvasに書き、それを
SavePictureDialogでビットマップに保存しているのですが、
保存されるファイルが32bitのビットマップになっているようです。(ファイルサイズ的に)

これを24bitのビットマップで保存したいのですが、どのようにすれば宜しいのでしょうか?

418 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:40:53 ]
Image->Picture->Bitmap->PixelFormat

でいいんじゃね?

419 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:28:54 ]
C++Builder2007開発してます。
非BCB環境のwin2000で実行したところ、
CG32.DLLがないと怒られます。開発環境では動きます。
オプション->デバッグ->CodeGuardの有効チェックボタンfalseと
ツール->CodeGuardの環境設定->CodeGuard無効としてます。

バージョンはC++Builder(R) 2007 R2 Version 11.0.2902.10471で、
sp2とは書いていないのですが、最新と思ってます。

参考に以下のサイトを参考にしましたが、
うまくいきません。情報があれば教えてください。

tp://www.gesource.jp/weblog/archives/2007/08/cbuilder2007cg32dll.html

420 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:57:03 ]
dn.codegear.com/jp/article/36796
の追加情報にバージョンの確認方法書いてあるからまずはそれをチェックしてみれ



421 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:14:29 ]
お世話になります

追加情報

1. このパッチを適用した後も、バージョン情報ダイアログに表示されるバージョン番号は変わりませんが、
bin ディレクトリにあるファイルのタイムスタンプは、11:02になります。

bds.exeが4:04でした。
インストール4回目だわさorz

あしたやってみます。
インストールキャッシュの有無の確認方法ってありますか?
また、インストール時キャッシュの保存ってあったっけ?
情報ありがとうございました。

422 名前:417 mailto:sage [2008/03/05(水) 19:44:28 ]
>>418
出来ました!ありがとうございます。

しかし、同じコードを書いた別のプロジェクトがあるんですが、それは24bitのビットマップで保存されているんですよね。
imageコンポート上かどっかで設定が出来るんですかね

423 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:43:12 ]
TImageって無駄に冗長だからなぁ

424 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:48:52 ]
ども。
CG32.DLLの件のものです。
意気揚々とアンインスコに取り掛かり、
せいぜい1h程度と思いきや2h以上orzで、
再インスコで以下のキャッシュの削除の有無の
選択画面を期待しながら「次」を押すと
ttp://support.codegear.com/jp/article/images/36815/03000008.png
そんな画面が出ずにガンガン突き進んで
無事?完了

で、なぜキャッシュの運用を聞いてこないか
理解できない。
ちなみに、インスコプログラムのバック画像は
グリッド状のドーム天井を背景に
パルテノン神殿っぽい建物の画像で、
ttp://support.codegear.com/jp/article/images/36815/03000008.png
は12345といったプログラムコードの背景なので・・・

つかれた。情報あれば、教えてください。

425 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:25:24 ]
某のサポートに問い合わせた方がいいような気もする。
無料インストールサポートあったでしょ。たしか。

426 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:09:31 ]
そうですね。レスありがとうございました。

427 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:16:11 ]
環境はBCB2007WINXP 行数の関係で、詰めてかきます。
以下のソースで、実行F9とビルド時S+F9では挙動がことなりよくわからなくなっています。
実行時は普通にアクティブなソフトの全パスが表示されますが、ビルドしたのを実行すると取得できません。
何かの勘違いか、コンパイラの使用知識不足としか思えません。よくないところを教えていただけないでしょうか?

#include <vcl.h>
#include <psapi.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ HWND hWnd=GetForegroundWindow();
bool blJEJ=false; DWORD dwPID; GetWindowThreadProcessId(hWnd, &dwPID);
hWnd = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID);
DWORD ReturnSize;
if(!hWnd){ ShowMessage("if(!hWnd)");//デバッグ用//ここにhWndの値をShowMessageするにはどうすりゃいいんだ? }
if(hWnd){
char buf[MAX_PATH];
HMODULE hMod; DWORD size;
EnumProcessModules(hWnd, &hMod, sizeof(hMod) ,&size);
GetModuleFileNameEx(hWnd, hMod, buf, sizeof(buf));
CloseHandle(hWnd);//これの意味がわからない。
AnsiString str=fname;  ShowMessage(str);
}
//---------------------------------------------------------------------------
へたなコードですが、素人なのでご容赦を

428 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:16:57 ]
bool blJEJ=false; DWORD dwPID; GetWindowThreadProcessId(hWnd, &dwPID);
hWnd = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID);
DWORD ReturnSize;
if(!hWnd){ ShowMessage("if(!hWnd)");/

どうも、if(!hWnd)がtrueになるみたいです。
ほとほと困りました。なにとどご支援お願いいたします。
状況説明に不足がございましたら、レスしていただければ
助かります。

429 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:03:08 ]
くだスレなんで思いつきだけど
OpenProcess() の戻り値とOSの関係とか、権限とかはOK?

430 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:19:33 ]
>>427
ShowMessage("if(!hWnd)");//デバッグ用//ここにhWndの値をShowMessageするにはどうすりゃいいんだ?
     ↓
IntToStr(hWnd) or IntToStr(hWnd) or AnsiString().sprintf("%08X", hWnd)



431 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:28:41 ]
ちょっと待て、なんでOpenProcessの戻り値をHWNDに入れてる。
OpenProcessの戻り値はHANDLE型。

432 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:52:09 ]
BCB6ってUTF8ファイルのコンパイルってできましたっけ?

能とか表があると、gccのコンパイルが失敗するので、ソースファイルをUTF8にしたいんでつよね。

433 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 10:08:31 ]
どもです。
>OpenProcessの戻り値をHWNDに入れてる。
OpenProcessの戻り値はHANDLE型。

ちょっと見えてきました。
まずは型の勉強をしてみます。
APIの型ってよくわからないんです。

でも、実行では動くのにビルドでは動かない。
ビルドはできるのに。ちくしょう!
夜やってみます。キャストの件ありがとうございます。

434 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:53:33 ]
OpenProcess()の直後
GetLastError()を調べたところ、
5が帰ってきました。
p://onegland.hp.infoseek.co.jp/wincgi/help/winerror.txt
によると5は
5: アクセスは拒否されました。
とあり、悲しい限りです。
なんらかの対策はないでしょうか?


435 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:56:41 ]
OS側が拒否しないようにセットアップしておく。

436 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:36:34 ]
OpenProcessで要求するアクセス権を必要最小限に

437 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 19:34:26 ]
dwDesiredAccessの値を全部試してみましたが、
だめでした。

「ウインドウハンドル ファイル名」でググッて
実装しているんですが。

GetForegroundWindowして、希望のexeがトップかどうかを
調べてるだけなんです。。。

ほかにいい方法ありませんか?
あきらかにAPIの問題だけど、あのスレ結構きついんだなぁ。
BCBしかわからんし。すれ違いかな?しつこくて申し訳ないです。

438 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 19:58:21 ]
というか、何がしたいのか全くわからん

439 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:09:03 ]
アクティブなウインドウが特定のアプリかどうかを
調べたいのです。

そのため、GetForegroundWindowでウインドウハンドルを求めて、
アプリ名を検出し、特定のアプリかどうかの文字列判定をしています。

というわけで、アプリ名を知りたいのではないのです。

具体的には、作ってるのはユーティリティで、特定のアプリを
操作しているときに、激しく自前ソフトを実行し、
非特定アプリを操作しているときは、特定のアプリかどうかの
判定のみを実行するのです。ぅ〜ん、うまくいかないなぁ。
実行とビルド実行でこれだけ差がでるとつらいなぁ。

440 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:29:05 ]
うちの似たようなことしてるソースだとこれで動いてるけど

HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, pid);




441 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:44:04 ]
>>440
おみごと!
どうにか動きました。よくわかんないけど。
いろいろありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:44:14 ]
フルパス必要なきゃこっちの方が手軽かも

DWORD pid;
GetWindowThreadProcessId(hWnd, &pid);

HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,pid);

PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);

bool ret = Process32First(snapshot, &pe32);
while(ret) {
if( pid == pe32.th32ProcessID ) ShowMessage(pe32.szExeFile);

ret = Process32Next(snapshot, &pe32);
}

CloseHandle(snapshot);

443 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:09:03 ]
ども。参考にさせていただきます。
9xにも対応させたいし。って対応可能??
では。

444 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 01:15:57 ]
9xはProcess32First/Nextでフルパス返してくる(NT系はファイル名のみ)
NT系でフルパス取るにはやっぱりPSAPIで取らないとだめ。

あと9x対応にするにはGetModuleFileNmaeExとEnumProcessModulesをLoadLibrary/GetProcAddressでロードしないとエラーが出る。

445 名前:デフォルトの名無しさん [2008/03/12(水) 02:01:47 ]
質問です
TListViewにて
ListView1->ViewStyle=vsReport;にして
ListView1->Columns->Items[0]->Alignment=taRightJustify;
としても、文字列表示が左寄せのままです。
他の列はちゃんと右寄せに表示されます。
先頭列を右寄せで表示するにはどうすればいいでしょうか。




446 名前:デフォルトの名無しさん [2008/03/12(水) 06:14:06 ]
TValueListEditorコンポーネントの行数設定は、どうすればできますか?

447 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 01:31:11 ]
>445
最初のカラムのAlignmentが無効なのはコモンコントロールの仕様じゃなかったっけ?

448 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:01:53 ]
リストボックスをコンボボックスのように一行で表示して
プルダウンリストで表示するプロパティを探しているのですが、
わかりません。教えていただければ助かります。
リストボックスでなくてもいいです。

コンボボックスのように入力は受け付けたくありません。
例としてはIEのインターネットオプションのプログラムタグの
HTMLエディタや電子メールといったリストボックスです。

449 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:25:27 ]
コンボボックスのStyleプロパティにcrDropDownListで問題あるの?

450 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:28:39 ]
OKでした。節穴でした。
ありがとございました。



451 名前:デフォルトの名無しさん [2008/03/20(木) 22:39:55 ]
テキストファイルを読み込ませるにはどうすればいいんですか?

今までGCCでやっていたときには同じフォルダにテキストファイル
おいておけばよかったんですが
Turbo C++に変えてからは同じフォルダに置いてもできません

452 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:50:54 ]
カレントディレクトリ?ファイル名は絶対パスで扱うほうが間違いないと思うけどね。

453 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:22:49 ]
>>452
できました
テキストファイルをプロジェクトファイルにおいていました

実行ファイルはDebug_Build内に作られるんですね

454 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:43:11 ]
WinMainの先頭に
SetCurrentDirectory(ExtractFileDir(Application->ExeName).c_str());
とか書いておけばいい

455 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 23:52:20 ]
それはちょっと…。カレントディレクトリはいつ変更されるかわからんから。

456 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 01:10:47 ]
win2000でBCB6を使用しています。
TListViewでチェックボックスを表示した場合とTCheckListBoxに表示される
チェックボックスでは見た目が違うのですが(TListViewに表示される方が枠が黒く太い)
これをTCheckListBoxで使われているようなチェックボックスに変える簡単な方法は
ないでしょうか?

457 名前:デフォルトの名無しさん [2008/03/27(木) 09:12:23 ]
教えてください。
ダイアログボックスでOKボタンが押されたときに、TEditの内容が未入力だったら
TEditにカーソルを持っていき、入力をしてもらうようにしたいと考えています。
カーソルを持っていくには、
Edit1->SetFocus();で出来たのですが
OKボタンがおされたときに、OKBtnClick(TObject *Sender)で
Edit1のなかみを調べて、何も入っていなければ
Edit1->SetFocus();を実行しても、ダイアログが閉じてしまいます。
これは、ボタンにModalResult=mrOkを指定しているからだとは思います。
OKボタンがおされたときに、Edit1がカラならEdit1へ
ちゃんと入力されていれば、そのままダイアログを閉じたいのですが
どうすればよいでしょうか。


458 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 09:23:51 ]
if (Edit1->Text.IsEmpty()) {
    Edit1->SetFocus();
    ModalResult = mrNone;
}

459 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 09:30:42 ]
TForm::OnCloseQueryで中身をチェックする

460 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 11:18:26 ]
>>458
>>459
できました。
どうもありがとうございます。




461 名前:デフォルトの名無しさん [2008/04/04(金) 07:54:34 ]
三項演算子の使い方を教えてください。
AnsiString str;
int index;
if(index!=0)
str="AAA";
else
str="BBB";
これは、
str= index!=0 ? str="AAA" : str="BBB";
このように書けば良いのはわかるのですが、
if(index!=0)
 str.printf("%d",a);
else
 str.printf("%d",b);
これの三項演算子での記述の仕方がわかりません。
indext!=0 ? (str=str.printf("%d",a)) : (str=str.printf("%d",b));
とすると、strにはstrの長さが文字として入ってしまいました。


462 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 08:04:16 ]
index!=0 ? str.printf("%d",2) : str.printf("%d",3);

463 名前:デフォルトの名無しさん [2008/04/04(金) 08:36:01 ]
>>462
できました。ありがとうございます。

すいませんがもう一つ教えてください。
if(index!=0)
 str.printf("%d",a);
else
 str="あいうえお";
の場合はどうすればよいでしょうか。
index!=0 ? str.printf("%d",a) : str="あいうえお";
ではエラーになってしまいます。


464 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 08:46:40 ]
型を合わせる
index!= 0 ? (void)str.printf("%d", a) : (void)(str = "あいうえお");

465 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 08:58:40 ]
>>464
なるほどー
すごい勉強になりました。
E2034 'AnsiString' 型は 'int' 型に変換できない
というエラーの意味が全然わからなかったのですが、
三項演算子は、両方で同じ型にしないとダメなんですね。
どうもありがとうございます。


466 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 12:25:42 ]
てゆーかさ、普通は
str = index != 0 ? "AAA" : "BBB";
とか
str.printf("%d", index != 0 ? a : b);
と書くんだよ。
あと、コンストラクタの初期化リスト等、どうしても「式」が必要な場所とか。
だから、「同じ型」の「式」が並ぶのが当然なの。「式文」じゃないから。

467 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 14:06:01 ]
質問ですが、VSSとBCBを連携させることはできますか?

468 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 15:49:54 ]
連携ってどういうふうに?
相互にobjを使うのは形式が違うから誰か変換ツール作らないと無理だけど
同じC++言語だから変換する意味無いでしょうから誰も作らない。

469 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:11:21 ]
Visual SourceSafe ?

470 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:12:28 ]
CVSならコンポあった気がしないでもない



471 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 01:04:43 ]
まさかC++の方もフリーカーソルだったりしますか?

472 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 08:13:59 ]
モチロンソウヨ

473 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:15:44 ]
絶望した

474 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:34:37 ]
GExpert?

475 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 15:13:54 ]
C++Builder2007で開発をしております。

C++Builder6で作られたプロジェクトのビルドができません。
エラー内容は以下の通りです。

[BCC32 エラー] functional(135): E2093 < 演算子が使われたがクラス string には定義が存在しない。


どなたか教えて頂けますか。

476 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 16:19:18 ]
>>472
いい事言うなあお前。
みんなが頭じゃわかっててもなかなか実践できない事を口に出して言えるなんざ大した自信だよ。
それで出来てなかったらあのインチキ占いのバアさんと一緒だぞお前。
そんなに当たり前の事を言いたかったら尼さんにでもなって言行等しくなってから説教したらどうだ。

477 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:31:56 ]
おk

478 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:25:46 ]
>>475
いい事言うなお前。

479 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:05:26 ]
>475
newsgroupで質問した人?エスパー求むってのもちょっとねぇ。
最小限の再現状況をさらしなさいな。

480 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 02:33:06 ]
>>475
最低限、エラー行を書けよ。
そんな質問の仕方では誰も答えねえぞ。




481 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:42:20 ]
型のチェックが厳密になってるから
曖昧な表現はすべて確定的表現にしないとダメよ

482 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:50:01 ]
475です。

>>479>>480>>481
質問の仕方が悪くてごめんなさい。
このエラーで困ってたのは
私(とnewsgroupで質問してた人)の関係者なのですが、解決したとのことです。
詳しい事は聞いてないのですが
エラーが出る直前にコンパイル中のCPPに#include <string>を追加したら通ったそうです。
どうもありがとうございました。

483 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:48:42 ]
>482
関係者なんですね?わかります。
ともあれnewsgroupにもなんか書いておいたほうがいいと思いますよ。

484 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:28:24 ]
批判されたら他人のせいにするのは、ゆとりの常套手段。


485 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:47:08 ]
初心者ですが質問させてください。
特殊フォルダを取得したいためSHGetSpecialFolderPath()を使いたいのですが、
定義されていないというエラーが出ます。
#include <shlobj.h>を先頭に挿入すると、さらに大量のエラーが出ます。

どうすれば、よいのでしょうか。
この系統の方法以外で特殊フォルダのパス名を取得する方法はありますか?


486 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:46:18 ]
とりあえず、質問するときにはBuilderのバージョンを書いてね。
それが礼儀っちゅうもん。
#include "shlobj.h"するには、
NO_WIN32_LEAN_AND_MEAN を追加しなければ、二重定義エラーがでる。
設定方法は、Builderのバージョンによりちょいと異なる。


487 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:09:59 ]
>>486 様

すみません、これから気をつけます。
バージョンに関してですが、Turbo C++です。
無料に引きつけられて勉強を始めましたが、国民機時代のTurbo君とは
名前だけが同じだけで後は全く別物でした。(汗)
Turbo C++をもう少し使ってみて、ものになりそうでしたら製品版の
Builderを買おうと思っています。

本題につきまして、
NO_WIN32_LEAN_AND_MEAN を#defineしましたら、問題なく動きました。
本当にありがとうございました。
今後も調べても分からないことを質問させて頂きますのでよろしく
お願いいたします。

488 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:19:36 ]
>>487
こっちのTurbo君などはいかが?
dn.codegear.com/article/21751

ちなみに新TurboのExplorerエディションはコンポーネントの追加が出来ない以外はほぼProfessionalと同等の機能持ってた気がする。
ちなみに自作や他作コンポーネントはRAD環境で使えないだけでソース上でnewすればExplorerでも使える。

489 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:57:30 ]
C++Builder6.0で、VBのMidBみたいに指定した場所の文字を抜き出すにはどうやったらいいのでしょうか?
ググったらBuilder3で、専用の関数を作ったりしてましたが・・・6.0でも簡単にはできないのでしょうか?

490 名前:489 mailto:sage [2008/05/01(木) 23:21:32 ]
あ、文字は半角のみで全角は扱いません



491 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 00:20:10 ]
文字を?c_str/dataで。文字列を?Copyで。

492 名前:489 mailto:sage [2008/05/02(金) 00:36:04 ]
ああっ、AnsiStringのSubStringとかで出来たんですね
すいませんでした&ありがとうございました

493 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 00:44:32 ]
別にAnsiString使わなくても::strncpy(dest, src + 先頭オフセット, 抜き出す長さ);でいいじゃない。

494 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 02:59:51 ]
AnsiStringがずっと便利じゃん。
バッファとか考えなくてイイ。


495 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 08:06:11 ]
速度を取るか簡便性を取るかは自由

496 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:17:55 ]
TStringGrid を継承したクラスを作ろうとしたら、「型名が必要」というエラーがでてしまいました。

新規作成→アプリケーション から、ヘッダファイルでとりあえず、classの宣言をしただけなんですが
「Unit1.h」

#include <Forms.hpp>
//---------------------------------------------------------------------------
typedef class TMyStringGrid : public TStringGrid
{ // ← ここんとこで 「[C++ エラー] Unit1.h(12): E2303 型名が必要」 と怒られます
private:
public:
__fastcall TMyStringGrid(TComponent* Owner);
}TMyStringGrid;
//---------------------------------------------------------------------------
class TForm1 : public TForm


「TStringGrid」 を「TForm」や「TCheckBox」に変更すれば、問題なくコンパイルされるので
「タイプミスか?」と何度もチェックしてみたのですが、、、

環境は
BCB6pro、cb6_upd4_pro修正パッチ適用済、WinXP pro SP2
です。ご指導の程、よろしくお願いいたします <(_ _)>

497 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:28:29 ]
>>496
まずはVCLリファレンスの読み方でも勉強しようか

TStringGrid
ユニット Grids

結論から言うと宣言されてない型から継承したクラスをどうやって作るのかと。

498 名前:496 mailto:sage [2008/05/07(水) 13:33:21 ]
すんません、自己解決しました。

#include <Grids.hpp>

これが必要だったみたいです (^^;;;;
ども、お騒がせでした

499 名前:496 mailto:sage [2008/05/07(水) 13:36:14 ]
>>497
あ、すいません、前後してしまいました
いや、なんかそこらへんのクラスに必要なヘッダってのは最初っから
インクルードされてるもんだと思ってました (^^;;;;

ありがとうございました <(_ _)>

500 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:38:16 ]
>>499
パレットからフォームにコンポーネント置けば勝手にヘッダファイルが追加されるけど、ソース上でのみ宣言だと手動でヘッダincludeしないとダメだお

ついでにtypedefはいらん気もするけど。



501 名前:496 mailto:sage [2008/05/07(水) 14:09:51 ]
>>500
なるほど、そういう仕組みでしたか。

typedef しとかないと、宣言のときに一々 class xxxx って
頭にclassをつけなきゃいけなくなると思っていたのですが、
あれ?typedef しなくても、「 class 」って記述抜きで通っちゃいました
なんでだろう????

色々とありがとうございました <(_ _)>


502 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 10:21:49 ]
そして、ドナドナ

503 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 06:35:46 ]
unixのソースをPC上に移植したいと考えています。
・別階層に同名のファイルやフォルダって作れますか?(
・一気にサブフォルダを含めてプロジェクトに作成する事はできますか?
(一つずつ、フォルダを掘って作成しないといけませんか?ドロップできなくて..)

504 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:04:01 ]
コンポーネントのアンインストール方法

コンポーネントを試作中なのですが
コンポーネントをインストールした状態でのテストをしてみたいと考えています。
(オブジェクトインスペクタがどんな感じになるかとか。。。)
ということで

1.テストコンポーネントのインストール
2.コンポーネントのテスト
3.テストコンポーネントのアンインストール
4.コンポーネントの手直し

という手順を繰り返したいのですが
3.をどうやってやったらよいのかがわかりません

bcb6proです。
ご指導の程よろしくお願いします <(_ _)>

505 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:12:20 ]
パッケージのインストールのダイアログで該当パッケージのチェックボックスを外すでいいんじゃないの?
てかアンインストールしなくてもテスト>手直し>コンポのビルド>インストールで問題ない。

506 名前:504 mailto:sage [2008/05/09(金) 17:55:26 ]
>>505
なるほど!それでやってみます
ありがとうございました <(_ _)>

507 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:08:30 ]
複数のフォームで同一の関数を使うにはどうしたらよいのでしょうか?
ヘッダファイルのpublicに入れるだけではダメですよね?
ソフトはBCB6.0Proです。
よろしくお願いします。

508 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:35:37 ]
入門書嫁としか

509 名前:507 mailto:sage [2008/05/10(土) 00:51:44 ]
調べたところ、以下の本が良い、とのことで注文してみましたが・・・載っていますでしょうか?
田舎なので本屋に置いてないので、見てから買うことが出来ないため、来るまでわからないんです。

www.amazon.co.jp/C%2B%2BBuilder6-%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E6%B4%BB%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89-
%E5%AE%9F%E8%B7%B5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%88Vol-2%E3%80%89%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%8
3%8B%E3%83%83%E3%82%AF%E7%B7%A8-%E7%94%B0%E4%B8%AD-%E5%92%8C%E6%98%8E/dp/4877830626/ref=sr_1_22?ie=UTF8&s=books&qid=1210348178&sr=1-22

510 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 13:26:42 ]
とりあえず関数の宣言が書いてあるヘッダファイルを
全部のフォームのソースにインクルードしときゃいいんじゃね?



511 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 13:59:05 ]
派生コンポーネントでのプロパティのオーバーライド
アクセッサの再利用について。
bcb6.0pro / WinXP SP2 pro

例えば、TEdit を継承して TMyEdit というコンポーネントを作成し、
そこで、BorderStyle プロパティをオーバーライドして
BorderStyle を変更するときに、サイズも一緒に変化させるようにしたい場合、
新規の writeアクセッサ の中で従来のアクセッサを再利用することは出来ないもんでしょうか?
つまり
// QMyEdit.h
//---------------------------------------------------------------------------
class PACKAGE TMyEdit : public TEdit
{
private:
  void __fastcall SetMyBorderStyle(TBorderStyle BorderStyle);
      // Myアクセッサ宣言
  TBorderStyle FBorderStyle; // ここで再宣言?しないと
      // 「'FBorderStyle' は 'TMyEdit' のメンバーではない」 と怒られる
protected:
public:
  __fastcall TMyEdit(TComponent* Owner);
__published:
  __property TBorderStyle BorderStyle =           // プロパティオーバーライド
                        {read=FBorderStyle,
                        write=SetMyBorderStyle, // ←ここのwriteを拡張したい
                        default=bsSingle};
};
//---------------------------------------------------------------------------

512 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 14:01:05 ]
// QMyEdit.cpp
//---------------------------------------------------------------------------
void __fastcall TMyEdit::SetMyBorderStyle(TBorderStyle BorderStyle) // Myアクセッサ実装
{
  if(BorderStyle != FBorderStyle)
    if(BorderStyle == bsSingle) this->Width += 10; // なんだかんだで
    else                    this->Width -= 10; // ぐちゃぐちゃやってから

  TCustomEdit::SetBorderStyle(BorderStyle);      // 基底のアクセッサを呼び出す
}
//---------------------------------------------------------------------------

と、こんな感じのソースなのですが
[C++ エラー] QMyEdit.cpp(39): E2247 '_fastcall TCustomEdit::SetBorderStyle(const TBorderStyle)' はアクセスできない
と怒られてしまいます。
っていうかよく考えたら、元々こいつらはprivateで宣言されてるはずなので
当たり前っつっちゃ、当たり前なんですが、なんとかして SetBorderStyle ってのを
再利用できないものでしょうか?
それともやっぱり、ゴリゴリと一から実装し直さないと駄目なのものなのでしょうか?
よろしくお願い致します <(_ _)>

513 名前:507 mailto:sage [2008/05/10(土) 15:49:09 ]
>>510
それはやっているんですけど、動かないので・・・。
メインのフォームに書かれている関数なので、そのヘッダファイルは他のフォームでもインクルードしているのですが、
未定義の関数として見られてしまうんです。

514 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:40:20 ]
TEdit から継承されたBorderStyleに値を突っ込めばええだけだろ。



515 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:51:18 ]
>>513
メインフォームのメンバ関数として定義してりゃそりゃ見つからんだろ。
普通の関数にしないと。

516 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:26:48 ]
>>514
なるほどっ!!

//  this->BorderStyle = FBorderStyle; // ←これじゃBorderStyleが変わるわけがない
    TEdit::BorderStyle = FBorderStyle; // ←こっちでバッチリ!!

オーバーライドされる前のやつってのも、こうすれば使えるんっすね!!
ありがとうございましたぁーーーーっ!!!

517 名前:507 mailto:sage [2008/05/10(土) 18:55:18 ]
>>515
あー、そゆことですか
ありがとうございました

518 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:38:35 ]
>>517
C++Builderの入門書じゃなくてC/C++そのものの入門書読むことをすすめとく。
STLもvectorくらいは最低覚えとけ。

519 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:48:44 ]
プロパティエディターを登録しようとしても「'__classid' には VCL 形式のクラス型が必要」となってしまう。

enum TMyEnum {meA = 3, meB = 6, …… };
という型のプロパティを、オブジェクトインスペクタでプルダウンリストから選択して設定できるようにしたい。
ということで、プロパティエディターに TEnumProperty を使って登録しようと思ったのですが、ヘルプを参考に
  #include <DesignEditors.hpp>
  namespace Tenumproperty
  {
    void __fastcall PACKAGE Register()
    {
      RegisterPropertyEditor(__typeinfo(TMyEnum), 0L, "", __classid(TEnumProperty));
    }
  }
とやっても、
[C++ エラー] BinEdit.cpp(52): E2242 '__classid' には VCL 形式のクラス型が必要
というエラーが出て通りません。
インクルードするヘッダを <VCLEditors.hpp> と取り替えたり、両方記述してみたり、
あるいは、「Designeditors::TEnumProperty」としてみたりとか色々と試行錯誤してみましたが駄目でした。
  class DELPHICLASS TEnumProperty;
  class PASCALIMPLEMENTATION TEnumProperty : public TOrdinalProperty
というのは「VCL 形式のクラス型」ではないのでしょうか?

ご指導の程、よろしくお願いいたします。
<(_ _)>


520 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:46:19 ]
すみません。RegisterPropertyEditor のヘルプをよく読んでいませんでした。
エラーが出ていたのは、__classid(TEnumProperty) ではなく、__typeinfo(TMyEnum) の方でした。
TMyEnum はクラスではないので、
  PTypeInfo TypeInfo;
  PPropInfo PropInfo = GetPropInfo(__typeinfo(TForm), "BorderStyle");
  if (PropInfo)
    TypeInfo = *(PropInfo->PropType);
という具合にしないといけないようですが、GetPropInfo がよくわかりません。
ヘルプを見ても引数が void のものしかありませんし、
Win32API の方で GetProp というのが該当する様ですが、こちらに変えてもうまくゆきませんでした。
enum型の型情報ポインタってのは、いったいどうやったら取得できるのでしょうか (´;ω;`)




521 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:02:40 ]
ヘルプに記載はありませんでしたが、
  extern PACKAGE PPropInfo __fastcall GetPropInfo(PTypeInfo TypeInfo, const AnsiString PropName)/* overload */;
こんな関数がオーバーライドされているようでした。
コンポーネント本体のヘッダ、ソースと同じパッケージに突っ込むことで
なんとかこれで「TMyEnum型の型情報ポインタ」とやらを取得できているっぽいです。
これで、プロパティエディタを登録できたはず!
と思いきや、全然反映されていません(´;ω;`)
素のTEnumPropertyじゃ駄目なのかと、継承クラスを作ってもみましたが、やっぱりだめ
  Designintf::TPropertyAttributes __fastcall TAlignmentProperty::GetAttributes(void){
    return TPropertyAttributes() << paValueList << paRevertable;
  }
  AnsiString __fastcall TAlignmentProperty::GetValue() {
    int iValue = GetOrdValue();
    switch(iValue) { 〜中略〜
    default : return AnsiString("dtUnknown");
    }
  }
  void __fastcall TAlignmentProperty::SetValue(const AnsiString asValue) {
    if(asValue == AnsiString("dtLeftTop") ) SetOrdValue(DT_LEFT + DT_TOP + DT_SINGLELINE + DT_NOCLIP);
    else SetOrdValue(NULL);
  }
TEnumPropertyを継承したときのオーバーライドってこれで合ってますでしょうか よろしくお願いします <(_ _)>


522 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:06:01 ]
動的にフォームを出したいのですが、
TfmOption *fmOption = new TfmOption(this);
fmOption->ShowModal();
delete fmOption;

どうもうごきません。

それとモーダルもしたくないのですが、
普通にメインウィンドウと同等のウィンドウとしたいのです。
オプションで初期にはロードしたくありません

523 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 07:43:32 ]
>>522
TForm::Visibleをチェック。
新規作成したフォームはデフォルト値がfalseになってる。

524 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 10:04:48 ]
ShowModal();すると、自動的にVisible=trueに設定されるから
Visible=trueは必要ないハズ。
>>522は基本的にOKだと思う。
動かないとは、表示されないという意味なのだろうか。
モーダルにしたくないなら、
fmOption->Show();


525 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:42:51 ]
//---------------------------------------------------------------------------
void __fastcall Tform1::Button1Click(TObject *Sender)
{
*fmOption = new TfmOption(this);
fmOption->Show();

}
//---------------------------------------------------------------------------
void __fastcall Tform1::Button2Click(TObject *Sender)
{
delete fmOption;

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

//ヘッダ
private: // ユーザー宣言
TfmOption *fmOption ;

まず、*fmOptionの*すらわからずやってます。

やりたいことは、オプションのコンポーネントがおおすきるので、
fmOptionの起動に時間がかかります。
それで、exe起動時に起動画面をだし、その間にオプションを出すよていです。
自動生成フォームとして提供したら起動画面がオプションがロードされた後
出てきて意味がないのです。
で、メインフォームのprivate変数にオプション保持用の変数をもって、
ロードしたいのですが、簡単そうでむずかしくて・・・。

526 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:43:57 ]
ネット見てもShowModalしか出てこなくて。

527 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 19:21:12 ]
で?

528 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 01:06:04 ]
つかC/C++の基本だけでも勉強しないとにっちもさっちもいかなんじゃないかな。
その気がないならDelphiのほうがまだましだと思う。

529 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 17:06:13 ]
>>525も低脳だが、
>>528の方がもっと低脳

の件について

530 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 19:49:26 ]
なんでー?



531 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 19:58:38 ]
>525
ヒント:ヘルプ

532 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 17:59:51 ]
>>529
× の件
○ な件

533 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:07:55 ]
ものすごく素朴な質問なんですがエディットボックスがあるとして
buf[0]の値が255であるとき

Edit->Text.printf("%02X",buf[0]);

ヘキサの[FF]と表示されるようにしたいのですが、やはり
AnsiString ss.printf("%02X",buf[0]);
Edit->Text = ss;
のように代入するしか方法はないのでしょうか?先人の方教えて
頂けませんか?

534 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:25:01 ]
Edit->Text = AnsiString().sprintf("%02X", buf[0]);

535 名前:533 mailto:sage [2008/05/20(火) 18:45:00 ]
>>534
教えて頂きありがとうございます。長い間のモヤモヤがとれて
すっきりしました。

536 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:39:56 ]
char[100]とかで配列持ってて、
AnsiStringで受け取った入力を、char[80]から入れたいんだけど、どすればいいんすか?


537 名前:536 mailto:sage [2008/05/20(火) 19:41:10 ]
連投すんません
入力されるブツは、日本語ダス

538 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:58:30 ]
>>536
strcpy

539 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:22:05 ]
エディトボックス入力(日本語を想定)のAnsiStringの文字列長ってどうやって調べるの?

540 名前:デフォルトの名無しさん [2008/05/22(木) 21:03:52 ]
すいませんが教えてください。
BDS2006にて
VCLフォームアプリケーションを新規作成する。
TExcelApplicationをフォームに貼り付ける。
コンパイルすると
[リンカ エラー] Error: 未解決の外部参照 '__fastcall System::Variant::operator =(wchar_t *)' が
C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\BCBOFFICEXP.LIB|Excel_XP_srvr.cpp から参照されました
というエラーが出ます。
このエラーの解決方法がわかりません。
なにかをincludeしなければならないのでしょうか。




541 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:09:34 ]
ちなみに、BCB5で同じことをすると、
Excel_XP・・・となっている部分が
Excel_2K・・・となり
問題なくコンパイルは通ります。


542 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:12:15 ]
>>540
ヘッダじゃなくてライブラリファイルが抜けてるっぽいね。リンカエラーだから。


543 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:29:09 ]
imageコンポーネントでTColor型で絵を描いていきたいんだが、
BMP形式で保存すると32bitになりますよね?
そこで、PixcelFormat で pf24bitを指定すると、なぜか書けないんです。
そこで、あえて32bitを指定してもなぜか書けずに特に指定せずに
image->picture->〜 = (TColor)0xffffff
だと書ける。
ただ、保存するのは24bitのBMPにしたいんだが、ググると
ColorToRGBという関数があるみたいなんですが、
これの使い方教えて貰えませんか?ヘルプ見ても、いまいちわからなくて。
また、この関数使うのより簡単に24bitBMPへ保存できる良い方法が有れば伝授してください

544 名前:543 mailto:sage [2008/05/26(月) 23:01:57 ]
すいません。
環境は、Builder 2006です。

545 名前:543 mailto:sage [2008/05/27(火) 19:08:00 ]
自己レス
Canvasに書いてから、pf24bitを指定する事で書けました。
どうやら順番があったようです

546 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:40:21 ]
bcb2007を使っています。
dll内にフォームを用意したいのですが
うまくいきません

Form1=new TForm1(this);Form1->ShowModal();delete Form1;
うまく呼び出す方法はあるのでしょうか?

547 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:17:59 ]
C++Builder6.0でマルチスレッドのプログラムを作っています。

フォームにボタンとラベルを各1個配置し、ボタンをクリックする度に
ラベルに表示される数字が+1されるようにしてあります。
以下のコードで普通に実行するぶんには動くのですが、(※)の箇所で
ブレークを掛けてステップ実行を2回くらいやって再実行すると
フリーズ(と思うほど長時間固まる)してしまいます。
なぜなのか教えて頂けないでしょうか。

void __fastcall TAppThread::Execute(void)
{
  int  cnt;

  cnt = 0;
  count = 0;
  while ( 1 ) {
    cnt++;       //(※)
    cnt--;
    cnt++;
    Synchronize( Update );
    Suspend();
  }
}
void __fastcall TAppThread::Update()
{
  Form1->Label1->Caption = IntToStr( ++count );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if ( appThread )
    appThread->Resume();
}

548 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:43:57 ]
builder6.0を使っている初心者です。
恐縮ですが質問させてください。

プログラム上で動的にコンポーネント(TPanel)を配置しています。
そのコンポーネントにOnDragDropとOnDragOverイベントを取得させて
動作させたいのですがやり方がよく分からずうまくいきません。
初歩的な質問で申し訳ありませんが教えて頂けないでしょうか。
よろしくお願いします。

549 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 08:15:26 ]
抽象的すぎて意味わからんがな(´・ω・`)

550 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:23:37 ]
C++Builder6 をつかっています。

だんだんプロジェクトが大きくなってくると、デバッガのインスペクトとかで表示される値が
むちゃくちゃになってきます。回避方法ってないものでしょうか?



551 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:26:58 ]
>デバッガのインスペクトとかで表示される値が むちゃくちゃになってきます。

それは無い。

552 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:24:59 ]
そんな変数無ぇって言われる事はあるな

553 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:26:56 ]
それはプロジェクトの大小じゃなくて、
コンパイラの最適化の結果。

554 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:32:53 ]
そこは置いといて、変になることがあるってことよ

555 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:52:05 ]
BCB6では変にならないお。

プロジェクトにファイルを追加した直後は、ブレークポイントで止まらなくなるけど。
ブレークポイントで止まった後は変数が変になることはない。

556 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:13:29 ]
全然関係ないけど、うちのBCB6は

struct Hoge : vector<int> {};
Hoge hoge;

try
{
    string a;

    if (a.empty())
        throw exception();

    Test test;
}
catch (...)
{
}

これのTest(何のクラスでもいい)のデストラクタがなぜか呼ばれるんだけど、
再現する人いるかな。

557 名前:550 mailto:sage [2008/06/17(火) 12:37:45 ]
ごめん、うちのバージョンは5だった・・・。

コンパイラの最適化OFFで、

if(Instance != NULL)
{
 Instance->Data = 3;
}

とかやって、Instance->Data にブレークポイントを設定したとする。
それで、Instance の値を見ると NULL になってることがある。
プログラム自体はちゃんと動くんだけど、デバッガが、グダグダになることがある。
ダイレクトXアプリってのもあるのかなぁ?

あと、これは仕様だと思うんだけど、いつのまにか、TOpenDialog で
マイコンピュータを開くと、なにも表示されなくなった。

558 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:39:14 ]
>>557
多分、6にうpするとそんなことない。

559 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:49:03 ]
>>558
6ってもう買えないよね?

560 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:53:02 ]
あー、新規なら買えるのか。スレ汚しスマヌ。



561 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:40:40 ]
コードガードにバグがある6を今更買うの?

562 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:42:46 ]
5ならコードガード無いんじゃね?

ま、5と6使った自分なら、間違いなく6を選ぶ。

563 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:07:53 ]
5にもコードガードついてるよ。5のコードガードのバグは気づかなかった。
BDS2006 はもってるんだけど、なんかこれもバギーらしいな。
思い切って、2008 がでるまで待とうかとも思ってるんだけどね。
9月ぐらい?

printf デバッグとかもう嫌だよ・・・。

564 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:40:32 ]
デバッガで変数が正しく表示されなくなったら
パソコンを再起動
これ常識。
これで回復する。
自分のプログラムで、どっかぶち壊しまくってるんだよ。


565 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:45:00 ]
9xじゃあるまいし

566 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:52:20 ]
9xなら暴走して落ちるんだよ。
自分で自分のDSをぶちこわしているから変数がヘンになる。


567 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:11:35 ]
今時アプリがどんだけメモリ空間壊したって、PCの再起動なんて必要ないだろw
DSとか言ってるから古い人ぽいけど。

568 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:47:06 ]
じゃあFSとか言えば納得するのか


569 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:13:34 ]
メモリ空間を壊すって事は、Builder の場合、
デバッガ、コードガード、OS、の3つをすり抜けないと無理なんだけど、
そう言う事って出来るの?セキュリティホールみたいな物か?


570 名前:548 mailto:sage [2008/06/18(水) 02:27:24 ]
すみません。説明不足でした。

void __fastcall TForm1::N1Click(TObject *Sender)
{
TTabSheet* tb;
TScrollBox* sbox;
TPanel* panel;
TButton* bt;

tb = new TTabSheet(PageControl1);
tb->PageControl = PageControl1;

sbox = new TScrollBox(tb);
sbox->Parent = tb;
...
panel = new TPanel(sbox);
panel->Parent = sbox;
...
bt = new TButton(panel);
bt->Parent = panel;
...
bt->DragMode = dmAutomatic;
}

こんな感じでPageControlに新しいタブを作成し、その中にTScrollBox、
更にその中にTPanel、更にその中にTButtonを配置させています。
やりたいことは、この新しく配置したTPanel上のTButtonをマウスドラッグで
移動できるようにしたいのですがその方法がよく分からないということです。
回りくどい説明で申し訳ありません。



571 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:39:03 ]
ボタンをドラッグってどんな操作を想定してるの?ボタンはクリックするものなのに。

572 名前:548 mailto:sage [2008/06/18(水) 12:05:40 ]
>>571
マウスの操作でボタンの座標位置を変更できるようにしたいです。
「自分で追加したボタンを自分の配置したい位置につまんで移動できる」
と言った方がわかりやすいかもです・・・。

OnDragDropイベントではなくOnMouseMoveイベントを使えばもっときれいにできるのかもしれないんですが、
ここではとりあえず「ドラッグで移動して配置する」という操作だけを目的としていたので
イベントとして使いやすいと感じたDragDropを使用しています。

573 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:48:51 ]
いや、だから、ボタンをつまもうとしたらクリックになっちゃうでしょ。
でクリックしようとしたときにちょっとした操作ミスでドラッグで移動になる、と。
そんな自己満足なUIは考え直せって。

574 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:07:01 ]
そんなのレイアウトモード←→通常モードみたいな感じで切り替えれば済む問題でないの

575 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:39:38 ]
もちろんそれでもOKだと思うが。
で所望の動作はWM_NCHITTESTでHT_CAPTIONってのがお手軽。

576 名前:548 mailto:sage [2008/06/20(金) 02:47:20 ]
>>573-575
ボタンクリックとドラッグ混同の操作ミス等、言われてみたらその通りだと感じました。
アドバイス含め、対処できるように組み直したいと思います。
移動についてはさせることができました。
アドバイス、ご指摘ありがとうございました。

577 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:57:40 ]
>>576
うちも VCL 以外で近いことを以前やったことあるけど、
そのときの実装は何ピクセル以上ドラッグするとドラッグ開始、
っていうふうにしてた。

578 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:30:23 ]
古いプロジェクトをコンパイルすると

-Hr スイッチにより vcl4.h を vcl.h の代わりにインクルードします

っていうメッセージが出るんだけど、このスイッチって何処に記載されてるの?
古いプロジェクトの移行って面倒だね・・・。

579 名前:デフォルトの名無しさん [2008/06/30(月) 16:46:20 ]
Vi$taにBCB6をインスコできますか?

580 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 04:50:20 ]
V$sta捨てれ



581 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 09:39:37 ]
正直、そうしたいんですが、出来上がったexeのVi$ta検証に必要。

ところで、Vi$taってなぜかXPとマルチブートできませんよね?

582 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 09:50:06 ]
っリムーバブルフレーム

583 名前:デフォルトの名無しさん [2008/07/01(火) 19:26:51 ]
>>579
Vistaの動作検証だけなら開発は2000かXPで。
視覚スタイルは.manifest同梱で対応可。
Vistaアイコン(PNG圧縮256px)はIcoFxで可能。
res作成はVista対応SDKのrc.exeで可能。

584 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 19:49:26 ]
2000だとVistaなSDKがインスコできない罠が(;゙゚'ω゚'):

585 名前:デフォルトの名無しさん [2008/07/01(火) 22:49:40 ]
>>583
そうなのか・・・XPに入れてexeとdllだけ2000にコピーしたから気付かなかったわ。

586 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 08:57:02 ]
>>583
ビジュアルスタイル対応は、Theme Manager 使った方がいいのでは。

587 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:52:10 ]
Windows XPでTurbo C++を使っているのですが、
TButtonのCaptionの色を変えるのに、次のようなコードでは変わりませんでした。


void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Button1->Caption == "blue") {
Button1->Caption = "red";
Button1->Font->Color = clRed;
} else {
Button1->Caption = "blue";
Button1->Font->Color = clBlue;
}
}

どうしたらいいんでしょうか? アドバイスよろしくお願いします。



588 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:56:41 ]
TButtonのキャプションの文字色は変更できません。これはWindowsの仕様です。
もし文字色をシステムに従わないようにしたいのであれば、オーナドローでどうぞ。

589 名前:587 mailto:sage [2008/07/04(金) 23:06:41 ]
>>588 迅速な回答ありがとうございます

590 名前:デフォルトの名無しさん [2008/07/06(日) 01:08:29 ]
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
char *aaa;
aaa = "jpg";
if(aaa == "jpg")Button1->Caption = "jpg";
}

C言語の基本的なことだとはわかっているのですが・・・
これがtrueにならない理由って何でしょう?
基本的すぎるのか、文字列でググっても出てこないのはなぜー



591 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 01:18:27 ]
>>590
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char* aaa;
char* bbb;
aaa = "jpg";
bbb = "jpg";
ShowMessage(AnsiString().sprintf("aaa=%08X bbb=%08X", aaa, bbb));
}

592 名前:デフォルトの名無しさん [2008/07/06(日) 03:08:06 ]
メモリ壊しまくりんぐ

593 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 04:34:54 ]
リリースビルドならtrueになりそう

594 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 05:21:36 ]
char* の大きさは4byteだから、 3文字突っ込むとちょうど4byte使用するから
メモリは壊れないのではないのか。


595 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 05:24:50 ]
operator ==(const char*, const char*) {}
ができないのを今初めて知った(´・ω・`)

596 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 13:57:48 ]
>>590
if ( strcmp( aaa,"jpg" )==0 ) とすればええんでないの?

"jpg"ってすると、メモリのどっかに確保された4バイト('j','p','g',0)のアドレスを示す。
aaaに格納された"jpg"のアドレスと、ifで比較している"jpg"のアドレスが違うからfalseになる。

597 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 18:27:30 ]
>>590
char* でやらないで AnsiString でやれば動く。

598 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:36:09 ]
イベントハンドラを呼び出すとき、
Button1Click(Button1); Button1Click(Button2); Button1Click(Form1);
のどれでも動くみたいですが、Senderには普通何を与えるのが正しいの?
Senderの役割を教えてください。

//Form1上にButton1とButton2
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1Click(Button2);
}


599 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:54:20 ]
Senderはイベント呼び出し元のTagやデータ読むのに使うから、そのイベントに関連づけたいオブジェクトを指定。
たとえば拡大ボタンと縮小ボタンがあって、それぞれにイベントハンドラ書くのはアホ臭いから
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int zoom;
 TButton* button = dynamic_cast<TButton*>(Sender);
 zoom = button->Tag;
 if (zoon == 1) 拡大();
 else 縮小();
}
こんな感じで使ったりする。

ハンドラ内でSender使わないならthisで十分。

600 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 00:14:17 ]
>>599 ありがとうございます。




601 名前:デフォルトの名無しさん [2008/07/22(火) 14:35:51 ]
WindowsXPでBCB6.0を使っています。

 homepage2.nifty.com/spw/tips/GetIfTable.html
上記のサンプルプログラムを自分の環境で実行してみたのですが、以下のエラーが出てしまいます。
 [リンカ エラー] 外部シンボル 'GetIfTable' が未解決(D:\ADDRESGET\UNIT1.OBJ が参照)

ソースファイルをダウンロードして実行してみたところ、正常に動作したことから環境は間違って無いと思うのですが・・・。
インクルードファイルも同じにして、オプションのリンカやディレクトリ/条件も揃えてみましたがダメでした。
この場合、何を見たらよろしいのでしょうか?
よろしくお願いします。

602 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 14:54:57 ]
iphlpapi.libリンクしてないだろ。
bcb/lib/psdkにあるのプロジェクトに追加しる

603 名前:デフォルトの名無しさん [2008/07/22(火) 15:01:37 ]
>>602
・・・その通りでした。
インクルードで指定して、エラーも出ていないから必要無いと思い込んでました。
本当にありがとうございました。

604 名前: [2008/07/22(火) 15:12:34 ]

  ☆ チン ハラヘッタ〜
       ハラヘッタ〜
☆ チン  〃 ∧_∧
 ヽ___\(\・∀・)
  \_/ ⊂ ⊂_)
  / ̄ ̄ ̄ ̄ ̄ /|
 | ̄ ̄ ̄ ̄ ̄ ̄| |
 |淡路たまねぎ|/
   ̄ ̄ ̄ ̄ ̄ ̄

605 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 15:38:51 ]
>>603
コンパイルとリンクに違いについてもうちょっと勉強した方がいい

606 名前:デフォルトの名無しさん [2008/07/25(金) 03:16:38 ]
文字列の加工方法について質問です。

char chrBuf[1024];
AnsiString asBuf;

strcpy(chrBuf,"123456");
strcpy(asBuf.c_str(),chrBuf);
asBuf.Delete(3,3);
Label1->Caption = asBuf.c_str();

これで、「126」と表示させたいのですが、実際には「123456」となってしまうのは何故でしょうか・・・?
よろしくお願いします。

607 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 04:39:22 ]
char chrBuf[1024];
AnsiString asBuf;

strcpy(chrBuf,"123456");
asBuf = chrBuf;
asBuf.Delete(3,3);
Label1->Caption = asBuf;

とやりたいの?

Caption は AnsiString だから、AnsiString → char * → AnsiString っていう
キャストが行われると思うんだけど、これはわざと?

c_str() で確保されたメモリ空間の寿命は未確定。
コピー先として使うべきではない。

608 名前:デフォルトの名無しさん [2008/07/25(金) 10:30:26 ]
>>607
AnsiStringを加工に使いたいのですが、挙動を理解しきれてないので・・・。

homepage1.nifty.com/emil/ansistring.html」で、
>char* c_str( )
>文字列をC言語の char* 文字列で返す。返すのはあくまでも char* 型のポインタであり、
>文字列のコピーが作られるわけではない。従って、受け取った char* 文字列を安全に操作したい場合は strcpy( ) などでコピーすると良い。
と、あるのでコピーしたのですが・・・解釈が違ったのかな?

ポインタとして渡せば動作するのですね。
ありがとうございます。

609 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 10:35:12 ]
>c_str( )

は、無理して使う必要は無い。

どうしても使わないといけないときは、AnsiStringとstd::stringの渡しくらい。

例えば、

AnsiString SBuf;
string sBuf;

のとき、

sBuf = SBuf.c_str();
SBuf = sBuf.c_str();

と書く。

それ以外は、「.c_str()」を書かなくても、多分演算子がオーバーロードされてて、簡単に代入できる。

610 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:51:01 ]
>>608
解釈が違うと思う。

c_str() で得られたポインタから strcpy 等で
「自分で確保したメモリにコピーする」っていう意味。
そうすれば、自分で確保したメモリの寿命は自分で決められるから。

ttp://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-016.html

↑も参照してみて。



611 名前:デフォルトの名無しさん [2008/07/25(金) 15:16:04 ]
>>609-610
詳しい解説ありがとうございます。
入門書を見ると、「初心者はAnsiStringを使えば簡単」って書いてあるけど、実は取り扱いには注意しないといけないんですね。
暑くて頭があまり回っていませんが、がんばってみます。

612 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:20:45 ]
>>611
基本的には常に AnsiString を使って、
API とのやりとりや、標準ライブラリの呼び出しだけに c_str() を使う、
って考え方が良いと思う。

613 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:48:01 ]
>実は取り扱いには注意しないといけないんですね。

なことない。簡単。

614 名前:デフォルトの名無しさん [2008/07/25(金) 18:05:18 ]
今年買ったPCでTurboC++ Builder, WinXPでOpenGLに挑戦中なんですが,
テクスチャについて質問があります。
今, 「C++ Builder 6 コンポーネント活用ガイド&実践プログラミング Vol.8
OopenGL プログラミング編」
の「53-2 Bitmap形式のファイルを利用する」のソースコードex19を試しています。

このex19で1枚のテクスチャにbmpファイルを貼り付けているんですが, サイズが
64*64, 128*128, 256*256ならうまくいくんですが, 512*512や1024*1024のbmpを利用しようとすると
スタックオーバフローを検出して止まります。
これは, 256が4枚で512を表現したりするしかないのでしょうか?

512*512やそれ以上のサイズが使える解決方法をお願いします。

615 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 18:15:00 ]
>>614
よくわからないけど、ファイル自体をスタックに積んでるのかねぇ?
そんなコード見たことがないが。

その辺り調べてみた?

616 名前:デフォルトの名無しさん [2008/07/25(金) 18:37:34 ]
一様乱数を生成する関数のソースについて質問があります。y=1/sqrt(2)*exp(-1/2*x*x)の計算で
In function `GaussRandom':: undefined reference to 'sqrt’と In function `GaussRandom':: undefined reference to `exp'というエラーがでて実行できません。もちろん<math.h>は定義しました。
レポート課題なのでマジで困ってます。是非教えてください。ソースを下に載せておきます。ちなみにxが一様乱数で、yが正規乱数です。
double GaussRandom()
{
double x;
double y;

x=UniformRandom();
y=1/sqrt(2)*exp(-1/2*x*x);
return y;
}

double UniformRandom()
{
double x;
int r=1;

r=1229*r+351750;
x=r/1664501;

return x;
}

}






617 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 18:48:29 ]
GaussRandom()の前にUniformRandom()が定義されてないからじゃないの

618 名前:デフォルトの名無しさん [2008/07/25(金) 18:54:34 ]
>>617 今入れ換えて実行してみたのですが駄目でした。

619 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 20:02:44 ]
おかしいね、うちはそれコピペしただけの通るよ
math.hのincludeがうまくできてないのかね

620 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 21:11:48 ]
マルチポストしまくりで解決済みなんでスルーでいいよ



621 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 21:04:15 ]
>>615 スタックのサイズを大きくしたらいけました。ありがとうございます。

622 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 21:09:55 ]
>>621
とりあえず載ってるコードがダメダメな気がするから自分で書き直すことをお奨めする

623 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:36:46 ]
コンパイルするとError: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照
とでるのですが、理由がわかりません・・・。
どなたかわかる方お願いします。


624 名前:デフォルトの名無しさん [2008/07/27(日) 14:51:31 ]
フォームに配置したTButtonのOnClickイベントを、
実際にボタンを押してではなく、あるメソッド内から呼び出したいのですが
そういうことは可能ですか?

625 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 15:12:14 ]
TButton::Click()があるじゃない

626 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 15:43:56 ]
>>625
おかげさまで解決しました。
ありがとうございました。

627 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 22:16:52 ]
おすすめのエディタ教えてください!
今までC言語を始めよう!というフリーソフトを使ってきました

628 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 22:17:48 ]
>>627
スレ違い

629 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 23:24:30 ]
>>627
エディタ部分だけなら2006以降のエディタの方がいいかな
ウィンドウ構成とかは6までのIDEのほうが好きだけど

630 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 15:25:09 ]
C++Builder6からmecabを使いたいのですが、一週間以上格闘しても光が見えません(涙)
mecabの初期化すら出来ない状態なので何かアドバイス頂ければ嬉しいです。
よろしくお願いします。



631 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 15:12:29 ]
OpenProcessで使うPROCESS_ALLACCESSマクロだが、定義間違ってね?

VCその他では
#define PROCESS_ALL_ACCESS 0x001f0fff
BCCでは
#define PROCESS_ALL_ACCESS 0x001fffff
になってる。

たぶん>>427の問題もそのせい
こういうバグってどこに報告すればいいん?

632 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 15:31:13 ]
普通に0x1F0FFFになってるが。
検証コードはprintf("%08X", PROCESS_ALL_ACCESS);
環境は6pro update4

633 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 15:37:38 ]
winnt.h
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFF)
#define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
#define SYNCHRONIZE (0x00100000L)

どう見ても 001f0fff だわな



634 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 15:38:59 ]
おっと、手元のが古いだけか
駄レスすまそ

635 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 11:28:57 ]
そういうところまで疑わなきゃいけないんだな、面倒な

636 名前:デフォルトの名無しさん [2008/08/09(土) 21:33:14 ]
TEditにある数値を入力して、OnExitイベントで入力された数値を
チェックしてますが、入力値が異常でも、フォーカスが次のTEdit
にうつってしまいます。
よく考えれば当然といえば当然の結果なのですが、どうしても正常値
を入力するまでフォーカスを保持させたいのですが、行き詰ってしまい
ました。
よい解決方法がないでしょうか。よろしくお願いします。

637 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:19:30 ]
できるじゃん
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
 TEdit* edit = dynamic_cast<TEdit*>(Sender);
 if (edit->Text != AnsiString("aaa")) {
  edit->SetFocus();
 }
}

638 名前:デフォルトの名無しさん [2008/08/11(月) 15:43:16 ]
ScanLineとRGBTRIPLEについて質問です。
ネットで調べると、ScanLineで取り込んだ配列はBGRの順番に入っているのでRGBTRIPLEに入れればよいとなっていたのですが、
実際に使ってみるとずれており、4番目の数値(中身は0)があるような感じでした。
BYTEが4つある配列に入れることで動作させましたが、以下の書き方は間違っているのでしょうか?

int i,j;
int RoopMax=100; // ループ回数

DynamicArray<RGBTRIPLE*> slbuf;

slbuf.Length=RoopMax;
for (i=0 ; i<RoopMax ; i++){
slbuf[i] = (RGBTRIPLE*)ColPos[Num]->Picture->Bitmap->ScanLine[i];
}

for(i=0;i<RoopMax;i++){
for(j=0;j<RoopMax;j++){
Ra[i][j] = slbuf[i][j].rgbtRed;
Ga[i][j] = slbuf[i][j].rgbtGreen;
Ba[i][j] = slbuf[i][j].rgbtBlue;
}
}

639 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 15:56:51 ]
>>638
ビットマップが24bitならBGRの3bytes、32bitならBGRAの4bytes。

640 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 15:58:52 ]
あと、今のPCだと32bitのほうが一般に処理速度早くなるから注意。
24bitだとワード+バイト転送なのに対し、32bitはダブルワード1回ですむ



641 名前:デフォルトの名無しさん [2008/08/11(月) 16:07:26 ]
>>639-640
なるほど、ビットマップの形式によって変わるので処理としては間違ってはいないんですね。
BGRAがあることに気づきませんでした。
ありがとうございます。

642 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 17:02:27 ]
サブのスレッド(TThread)でTNotifyEventを発生させて、そのイベントによりメイン側の関数が実行されたとき
メイン側のメンバ変数の内容が見えないのですが、どうすればいいのでしょうか。
エラーが出るのではなく、関係ない数値が入っているので、別の部分を参照しているみたいです

具体的には
メイン側クラス(MainClass)、サブのスレッド(SubThread)
MainClass内で
AnsiString a;
SubThread->hogeEvent = (TNotifyEvent)&hogeFunc;
さらに
void hogeFunc(TObject* Sender)
{
MessageBox(Handle , a.c_str() , "",MB_OK);
}
として、hogeEventを発生させたとき、メイン側で既に代入したaの内容が読み取れていない
といった感じです。

よろしくお願いします。


643 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 23:46:54 ]
実行コンテキストを無視しちゃだめ。メインスレッドに属するコード部分はメインスレッドのコンテキストで
実行する。PostMessageとかSynchronizeとかを使う。

644 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:13:49 ]
>>643
ありがとうございます。

TNotifyEvent fOnHoge;
__property TNotifyEvent hogeEvent = {read=fOnHoge,write=fOnHoge};
void __fastcall TSubThread::evHoge(TObject* Sender)
{
if(hogeEvent){
hogeEvent(this);
}
として、サブスレッド内で
Synchronize((TThreadMethod)&evHoge);
を呼び出しても、解決しません。
このような書き方ではメインスレッドのコンテキストで実行されないのでしょうか。

2度も申し訳ありませんが、よろしくお願いします。


645 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 18:47:21 ]
アホな質問をお許し下さい。
Unit1.cppにくっついてるフォームForm1(Unit1.dfm)のMemo1に
Unit2.cppの処理から文字を入れたいときはどうすればよいでしょうか…
VBっぽくForm1->Memo1->Lines->Add(a);みたいにしたら出来るかなーと思ったけど駄目でした
Turbo C++を使っています。

646 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 18:48:37 ]
Unit2.hppに#include "Unit1.hpp"

647 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 18:50:14 ]
ファイル→ユニットヘッダーファイルの追加の方が楽か

648 名前:645 mailto:sage [2008/08/14(木) 19:10:20 ]
おおお
出来ました。ありがとうございます!

649 名前:デフォルトの名無しさん [2008/08/17(日) 03:27:01 ]
NI社のUSB-6008という製品を使ったことのある方はいますか?
これを使用してみたいのですが、最初にどこから手をつけていいのかわからなくって・・・。
とりあえず、DLLのインポートライブラリを作成してみようと、nidaq32.dllを使用してみたのですが、
Error nidaq32.dll: unknown file type
と、なってしまいます。

NI-DAQのバージョンは7.2
XPでBuilder6.0を使用しています。


650 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 00:43:53 ]
それインポートライブラリが悪いか、nidaq32.dll にパスが通ってない、とか。



651 名前:デフォルトの名無しさん [2008/08/18(月) 01:24:22 ]
nidaq32.dllがあるフォルダで、コマンドプロンプトから実行したのですが・・・
これってIMPLIBの使い方間違ってます?

652 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 20:02:18 ]
#include <stdio.h>
#include <System.hpp>
#pragma link "vcl.lib"
#pragma link "rtl.lib"

int main()
{
wchar_t col_caption[256];
int width;
int r0 = swscanf(L"知名性 (20)", L"%s (%d)", col_caption, &width);
printf("> %s : %d (%d)", AnsiString(col_caption).c_str(), width, r0);
}

上のコードの実行結果が期待する結果の
> 知名性 : 20 (2)
にならずに
> 知 : 4 (1)
となるのですがRTLのバグのほかになにか原因はありますでしょうか
環境はBCB6Pro#4、Win2kです。


653 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:01:04 ]
setlocale

654 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:09:17 ]
>setlocale

これって何のライブラリになるんでしょ?C++標準?VCL?
それを知らないと、#includeできないので。

あと、getlocaleってのもあるんでしょうか?

655 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:18:02 ]
ついでですが、
localelist
みたいな1式も取れるんでしょうか?

656 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:35:41 ]
setlocaleはswscanfには関係ないと思うんですの。VC2005だとちゃんと動くし。
BCBでも他の文字列ではちゃんと動いてるし。

657 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:50:06 ]
確かにBCBヘルプに
>Standard C++ Library: Class Reference
>locale
ってのがありますね。

これはクラスだからいろいろメソッド使えるかも。
でも、これで切り替えても、
AnsiToUtf8/Utf8ToAnsiのロケールとは無関係なんかなぁ。

あ〜、テストプログラム作れば良いんだが、通勤時の暑さのせいでしんどい。

658 名前:デフォルトの名無しさん [2008/08/19(火) 23:14:53 ]
>>650
インポートライブラリが悪いって、どのような現象があるのでしょうか?
BuilderのバージョンはBuild10.166ですが・・・

659 名前: ◆jButlJVlzY mailto:sage [2008/08/19(火) 23:16:05 ]
#include <iostream>

using namespace std;
int op;
char a,b,c,d,f;

int main(){
cout>>"物語の始まり">>endl;

/*
char a ="起";
char b ="承";
char c ="転";
char d ="結";
char f ="おまけ";
*/


cout << "1目次1ページ目 目次2ページ 目次3ページ 目次4ページ 目次5ペーじ おまけ" << flush;
cin >> op;
{


660 名前:デフォルトの名無しさん [2008/08/21(木) 02:12:21 ]
すいません、どなたか>>658についてわからないでしょうか。
正解でなくても、何か参考になるようなことでもいいので意見を下さい。
よろしくお願いします。



661 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 07:47:42 ]
implib nidaq32.dll nidaq32.lib と引数の順番を間違って実行して、nidaq32.dllが壊れて、その後
implib nidaq32.lib nidaq32.dll と順番を直したけどnidaq32.dllは壊れてるからエラー、とか?

一応本家にbcc用のインポートライブラリがあるみたいだけど。 ↓の一番下のzip
digital.ni.com/public.nsf/allkb/7793F4D8AFC47C1E86256E84005BBBE8

662 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 20:09:54 ]
>>649

NIDAQmxのDLLはnicaiu.dll見たいだよ?
NIDAQmxをインストールするとc:\WINDOWS\system32あたりにnicaiu.dllがあるはずだから

>implib nicaiu nicaiu.dll
でnicaiu.libを作ってリンクしてみたら?


663 名前:デフォルトの名無しさん [2008/08/22(金) 02:33:44 ]
>>661
すいません、一度壊してました・・・orz

>>662
NIDAQではなく、NIDAQmxを使うのですか!!
ありがとうございます、やってみます。

664 名前:デフォルトの名無しさん [2008/08/27(水) 17:23:50 ]
メインフォームのForm1と、 処理中ダイアログ用のForm2があって、 次のように使っています。
void __fastcall TForm1::ShowDialog()
{
Form2->Show();
for (i=0;i<100;i++) {... ;ProgressBar1->Position=i; ...}
Form2->Hide();
}
このForm2が前面に表示されている最中は、 Form1上にあるボタンをクリックしても
OnClickイベントが発生しないようにしたい(無視したい)のですが、 どうしたらいいのでしょうか?
Form2表示中にForm1上のボタンをクリックしたことによる処理が、 Form2が隠れた後に
実行されて困っています。
よろしくお願いします。

665 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 19:58:48 ]
ShowModalでもしておけば?

666 名前:664 mailto:sage [2008/08/27(水) 20:39:55 ]
>>665
ありがとうございます

667 名前:デフォルトの名無しさん [2008/08/28(木) 03:05:24 ]
8点ほど計測して、下の脳波測定のように境目をボカしたいのですが、何か良い方法はありますでしょうか?
www.speedreading.co.jp/read/riron07.html

8つの円を描き、全体をぼかすように前後左右の平均を取るように処理してみたところ、何度もやるとものすごく時間がかかるので・・・。
ぼかし処理は下のものを使用しました。
gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=135


668 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:15:29 ]
全然ダウンロードできないのですが、今日だけの現象ですか?
update.codegear.com/forms/jp_cpp_download_reg
ここに何度登録したことか。。。。

669 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:34:00 ]
now.eloqua.com/e/f2.aspx
サーバーが見つかりません

670 名前:デフォルトの名無しさん [2008/08/31(日) 00:08:20 ]
そうだね



671 名前:デフォルトの名無しさん [2008/09/06(土) 08:25:00 ]
TurboC++ Professionalは、もうどこにも売ってないのですか?


672 名前:デフォルトの名無しさん [2008/09/06(土) 10:46:04 ]
初心者質問すいません
英単語の文字数を数えるにはどうすればいいですか?

673 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:52:49 ]
AnsiString::Length()

674 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:57:35 ]
C++とC#は別物ですか?

675 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:04:33 ]
別物

676 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:15:14 ]
>>675
ありがとうございました。ここではC++という文字をよくみるのに本屋ではC#をよくみたので一緒かなと思いました
ありがとうございました

677 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:27:47 ]
実は # は

++
++

だったんだよ!


678 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 01:24:48 ]
>>677
C++が一つ増えるなら、
C#は半分だけ増えるっていうイメージなんだけど。
それだと、2つも増えてるな。

679 名前:デフォルトの名無しさん [2008/09/07(日) 02:35:29 ]
>>677
その発想は無かったわ

680 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:30:34 ]
エクスプローラの「表示」→「縮小版」みたいに、複数の画像を
サムネイル表示したいと思っています。
ttp://www2.ttcn.ne.jp/tkky/Tips/DrawGrid/drawgrid1.htm
を参考にDrawGridを使って実現しようかと思っていたのですが、
DrawGridコンポーネント1個に対して, 1つの画像しか表示できないんでしょうか?




681 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:31:12 ]
サムネイルはListView使っとけ

682 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:57:33 ]
Buliderっていう名前が明らかにマッチョ男性専用ソフトですっていってるようで怖い。
アメリカ人は本当にマッチョが好きだよな。サンフランシスコ。

683 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 04:41:14 ]
>>681
そうします。ありがとうございます

684 名前:680 mailto:sage [2008/09/09(火) 07:34:14 ]
追加の質問ですみません。
ListViewでサムネイル表示を試してみようと、
下の(1)〜(6)の手順でやってみたのですが、ビルド中に固まります。
アイコン画像サイズ256×256を越えているせいみたいなのですが,
表示されるサムネイルの画像サイズを320×240で表示するには、どうしたらいいんでしょうか?
アドバイスよろしくお願いします。
-----
(1)Form1にImageList1を貼り付ける
(2)オブジェクトインスペクタからImageList1のプロパティをWidth=320;Heiht=240;に変更
(3)ImageList1ダブルクリックして, 「追加」押して320×240の画像1枚を選択して「OK」押す
(4)Form1にListView1を貼り付ける
(5)オブジェクトインスペクタからListView1のLargeImagesプロパティでImageList1を指定
(6)オブジェクトインスペクタからListView1のItemsプロパティで「新規作成」押して「キャプション」にテストと入力して「OK」押す


685 名前:デフォルトの名無しさん [2008/09/22(月) 10:04:17 ]
メニュー項目を設定する
TMenuItemのCaptionにて
開く(&O)...
と設定されますけど、
このピリオド3個の意味を教えてください。


686 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 12:43:51 ]
押すと他のウィンドウが開くって意味がほとんどじゃ?

687 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 20:03:06 ]
>>685
ピリオドがないのは、処理がすぐ終わるけど
ピリオドがあるのは、ダイアログが出るでしょ。
それだよ。

688 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 23:25:23 ]
>>686 >>687
れすありがとうございます。
確かに...なのは、ダイアログが開く系ですね。
(& みたいな特別な機能がある訳ではなく
WindowsのUIの作法みたいなものなのですね。
とても参考になりすた。


689 名前:デフォルトの名無しさん [2008/09/28(日) 23:08:48 ]
質問です。
TFontのStyleがSet という特別な型だったのですが
設定は、Font->Style << fsBold のようにすれば良いのはヘルプに記載があったのですが
FontにfsBoldが設定されているかを調べる方法がわかりません。
どうすればいいのでしょうか。


690 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 23:34:45 ]
if ( Font->Style.Contains(fsBold) )



691 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 23:45:56 ]
>>690
できましたーーー。超ありがとうございます。


692 名前:デフォルトの名無しさん [2008/09/29(月) 23:49:18 ]
いろんなほかのプログラムのボタンを押すプログラムを作るにはどうすればいいのでしょう?
具体的には mplayerの再生ボタンや巻き戻しボタンを押したり、mediaplayerの再生ボタンを押したり
その他新しいプログラムの再生ボタンを簡単に登録して押せるようなそんなプログラムを
くみたいのですが。



693 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 00:17:51 ]
ウィンドウハンドル持ってるコントロールならBN_CLICKEDをPostすればいいじゃない。
メニューバーから操作できる機能なら、コマンドIDをメニューリソース見るか、SPY++やWinspectorでコマンドID調べてWM_COMMANDでPostすればいい。
どっちもだめならSendInputでがんばるしかない。

694 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 00:18:33 ]
簡単に説明すると、ウインドウを列挙して、中の再生ボタンのハンドルを取る。
ハンドルが取れれば、APIでごにょごにょできるでしょ。

あとはがんばれ。

695 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:50:39 ]
あぁ!そっか、難しく考えすぎてた。

ありがとうございます。

696 名前:デフォルトの名無しさん [2008/09/30(火) 20:54:22 ]
質問です。
リストボックスにD&Dでリストボックスにファイルパスを表示する
プログラムをどうすれば言いか教えていただけないでしょうか?

697 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:04:17 ]
をぃ、日本語が不自由な奴よ。
マルチポストはルール違反だぜよ。


698 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:44:16 ]
>696
"C++Builder" ファイル ドラッグアンドドロップ
でぐぐれ

699 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:15:22 ]
test


700 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:19:19 ]
ごめんなさい、プロバイダが規制くらってたのでtest書き込みしてしまいました。

質問なんですが、フォームを使ってアプリを作っており、
デバッグで配列の中身や変数を見たく、printfなんかでコンソールに表示させたいのですが
何か方法はありますか?

インスペクタ?みたいなのはどうも使いにくくて・・・
ちなみに、C++Builder6を使ってます



701 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:32:28 ]
これでどうでしょ?
ttp://msdn.microsoft.com/ja-jp/library/cc428973.aspx
でもIDEのデバッガ機能をちゃんと勉強して使ったほうが楽だと思うけどね。

702 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:08:53 ]
>>700
AllocConsole()でコンソールが開きます。コンソールのハンドルをGetStdHandle( STD_OUTPUT_HANDLE )で取得したら
SetConsoleTextAttribute()とWriteConsole()で好きな文章を色つきで出力できます。
printf() っぽく使うならこんな感じ

#include <stdio.h>
int __stdcall con_printf( const CHAR* Format, ... )
{
  const int nLengthMax = 1024;
  int nLength = 0;
  HANDLE hConsole = ::GetStdHandle( STD_OUTPUT_HANDLE );
  if( hConsole != INVALID_HANDLE_VALUE ){
    CHAR Message[ nLengthMax ];
    va_list List;
    va_start( List, Format );
    nLength = vsnprintf( Message, nLengthMax - 1, Format, List );
    va_end( List );
    DWORD dwLengthWritten;
    ::WriteConsole( hConsole, Message, (DWORD)nLength, &dwLengthWritten, NULL );
  }
  return( nLength );
}

IDEが入ってない環境とかで使えるよ。

703 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 02:04:16 ]
_open_osfhandle()とかdup2()とかを組み合わせれば
普通にそのままのprintfが使えるようになるんじゃないかね。
知らないけど。

704 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 02:44:28 ]
IDEでデバッグしてるならOutputDebugString使えばイベントウィンドウに出力されるぞ

705 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 10:34:03 ]
複数のフォームを持ったアプリを作っています。
メインフォームの初期化ルーチン(FormCreateとか)から他のフォームの初期化ルーチンを呼び出したいが、
それがまだ生成されていないのでエラーになるというケースが多くて困っています。
全てのフォームが生成された後で一括して初期化を行いたいという時にはどうすればよいのでしょうか? 
どなたか教えて下さい。


706 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:02:22 ]
メインフォームのコンストラクタで他のフォームnewすれば?

707 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:46:22 ]
>>700
解決したかも知れないけど、
TMemo 貼って Add で俺はやってる。


708 名前:デフォルトの名無しさん [2008/10/02(木) 17:46:19 ]
コンパイルした時に作成される実行ファイルの名前を、プログラム側で変更することってできます?
#ifdefで二種類作るので、間違えないようにしたいのですが・・・

709 名前:700 mailto:sage [2008/10/02(木) 18:59:26 ]
なるほど、色んなやり方があるんですね。

しかしこのスレ非常にやさしいw
ありがとうございました〜、色々とやってみて合うもの見つけてみます

710 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:43:14 ]
>>708
#pragma optionでできないものリストに「-efilename」が書かれてるから無理
objファイルならできるけど。



711 名前:デフォルトの名無しさん [2008/10/02(木) 19:56:58 ]
>>710
無理なんですか、了解です。
ありがとうございました。

712 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 20:00:24 ]
>>711
makefileで分けるといい

713 名前:705 mailto:sage [2008/10/03(金) 17:03:11 ]
>>706 どうもありがとうございます。やってみます。

714 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:02:21 ]
TwebBrowserで表示したページのセレクトボックスを変更したりボタンを押したりしたいのですが、参考になるページが見つからず途方に暮れています(他の言語は多少あるのですが・・・)
他の言語のを真似して
WebBrowser1->Document->All->GetElementsByName("hoge")[0]->selectedindex = 0;
※hogeは表示するページのソースをみて名前を調べました
などとしたのですが、「AllはIdispatchのメンバーではない」とエラーが出ます・・・
どんな書き方をすればよいのでしょうか

715 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:28:58 ]
たぶん中身をIHTMDocument2とかにして触るんじゃないかな。
昔触ったのを見たら
IHTMLDocument2Ptr doc;
doc = browser->Document;
IHTMLElementPtr body = doc->body;
とかやってた。
IHTMLDocument2Ptrとして使うには、MSHTMLかなんかをimportだかする必要があったと思うけど。

716 名前:デフォルトの名無しさん [2008/10/19(日) 04:31:46 ]
Imageに貼り付けた四角の画像を台形とかに変形させることはできますか?

717 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 04:18:55 ]
できる

718 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:48:53 ]
できるよ

719 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:03:10 ]
AnsiStringsの中に何も入っていない場合、c_str()で比較してチェックすることはできますか?
if(c_str()=="")やif(c_str()==NULL)と書いても素通りしますよね。
Lengthが0かどうかでチェックをしているので問題は無いのですが、気になったのでよろしくお願いします。

720 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 16:20:53 ]
IsEmpty()




721 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 17:14:13 ]
素通りっつーのはよく分からんが、そもそも「if(c_str()=="")やif(c_str()==NULL)」って書き方おかしくね?
c_str使うんならstrcmpとか使おうぜ。
AnsiStringとchar型文字列の比較なら普通に==で良いとも思うけどな。

722 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 17:56:44 ]
>>720
専用の関数があったんですね、ありがとうございます。

>>721
素通りというのは""やNULLで比較しても、何か文字が入っているような動きをしていたものですから。
まだAnsiStringを理解してないかもです。
strcmpも使ってみたのですが、動きは同じだったので・・・。


ところで、フォルダ名をチェックするのに最後に\がついているかを見て、無かったら\を付けたいのですが、
これってどうやればいいんでしょう?
AnsiLastCharで拾おうとしてのですが、うまくいかないので、よろしくお願いします。

723 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 18:11:14 ]
IncludeTrailingBackslash()

724 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:05:07 ]
>>723
処理してくれる関数があったんですね。
ありがとうございます。

725 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 20:18:52 ]
IncludeTrailingPathDelimiterがあればそちらを使うのが望ましい。

726 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:47:30 ]
Imageを2枚重ねて、下に写真、上に色を塗るようにしています。
上のImageに半透明や透明色を塗ることってできるのでしょうか?

半透明で調べてもフォームやボタンはあるのですが・・・。
すいませんが、どなたか方法を教えて頂けないでしょうか。

727 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:24:39 ]
実際には透明色や半透明色ってのはないからなぁ。アルファブレンド?

728 名前:デフォルトの名無しさん [2008/10/25(土) 19:16:29 ]
計算した数字をEdit1,Edit2,Edit3に出したのですが、
それをMemo1にすべて書き出しExcelで読み込んだときにA欄B欄C欄と分けて出したいのですが
いったいどのようにすればいいんでしょうか?
Edit1->Text=a;
Edit2->Text=b;
Edit3->Text=c;

Memo1->Lines->Strings[0]=a;
Memo1->Lines->Strings[1]=b;
Memo1->Lines->Strings[2]=c;

今こんな感じで書いてるのですが全然わかりません・・
どなたかよろしければアドバイスお願いします。



729 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:10:23 ]
コンマ区切りにすればいいってことじゃなくて?

730 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:45:41 ]
>>729
あ、コンマ区切りで数列を出せばExcelでは枠別に表示されるんですね
ありがとうございます!
よろしければどなたかコンマ区切りでEdit1から3までの数字を一つのMemo1に出す
方法を教えていただけないでしょうか



731 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:20:40 ]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Add(AnsiString().sprintf("%s,%s,%s", Edit1->Text, Edit2->Text, Edit3->Text));
}

732 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:03:38 ]
BCBで使えるRS-232Cコンポーネントで安定しているのってありますでしょうか?
現在はHmCommを使用しているのですが、USB-232C変換器が物によって正常に通信できたりタイミングがずれたりするので、
別の物を試してみたいのですが・・・良い物がありましたら紹介してください。
よろしくお願いします。

733 名前:デフォルトの名無しさん [2008/10/26(日) 18:23:25 ]
TMemoryStream* ms=new TMemoryStream();
char *mTop=(char*)(ms->Memory);
char *mEnd=pTop+(ms->Size);
と記述すると
W8072 問題のあるポインタ演算
という警告が出ます。
警告の出ない正しい記述方法を教えてください。


734 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:51:08 ]
ms->Sizeの型が__int64だからintにキャストすれば出ないよ

735 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:19:32 ]
>>732

ttp://www.geocities.jp/in_subaru/erslib/index-erslib16.html
これ使ってごらん。
コンポーネントじゃないけど、ヘッダファイルだけで動作する。

初期化に2行、出し入れに数行、後始末に1行ぐらい書けばいいので
PICとやり取りするのに簡単だから使ってる。

でも、USBのシリアル変換機はもともと不安定だからなぁ・・・。

736 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:15:44 ]
>>734
解決しました。ありがとうございます。


737 名前:732 mailto:sage [2008/10/27(月) 00:45:44 ]
>>735
ありがとうございます。
シンプルで良さそうですね。
ちょっと使ってみます。

ノートPCが前提なので、USBのシリアル変換機を使用して安定してないといけないんです・・・。

738 名前:デフォルトの名無しさん [2008/10/27(月) 15:18:20 ]
A, B, C, D, E, 00:00, f, g, h, i, j, k, l,
A1, B1,C1,D1,E1, 00:00, f1, g1, h1, i1, j1, k1, l1,
A2, B2,C2,D2,E2, 00:00, f2, g2, h2, i2, j2, k2, l2,

というコンマ区切りの何百行のデータがあり、j(1.2.3・・・)の部分だけ読み込みたいのですが
どういう風にやればいいですか。よろしくお願いします。
 


739 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:37:37 ]
>>726
写真ともう一枚の32bppなTBitmap用意、アルファブレンドしてTImageに転送するしかないと思う。
アルファチャンネル扱えるTBitmap継承クラスも何種類か公開されてるから難しい物じゃない。

写真じゃないほうにペイントするとかだったら、TImageのイベントで取ったストロークの情報でペイント描画用のTBitmapに描けばいいだけだし。

>>738
ただのCSVファイルじゃん(・ε・)

740 名前:738 [2008/10/27(月) 15:48:54 ]
少し説明不足でしたが、テキストで読み込んでMemoに表示させたいのです。



741 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:06:44 ]
>>738
要するに 00:00 を取り除くって事?

742 名前:738 [2008/10/27(月) 16:10:52 ]
>>741

j(1.2.3・・・)の部分だけをmemoに表示させたいのです。

743 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:13:33 ]
>>j(1.2.3・・・) の意味がわからん

744 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:14:48 ]
Memoに j1, j2, j3 とかって表示させたいの?

745 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:19:37 ]
だからcsvファイル扱うクラス書いて、各行から11列目の値をTMemoに突っ込めばいいだけじゃ‥‥

746 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:24:14 ]
こういうの見るとBCB2009でregex使いたくなるな

747 名前:738 [2008/10/27(月) 16:33:42 ]
はい。

Memo1
j 
j1
j2
j3



な感じで。


748 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:40:05 ]
>>738
そんなん単に先頭からカンマを10こ読み飛ばせばいいだけじゃん。
strXXX系の関数使うまでもなく。

とみんな思うんだろうけど、暇だったのでVCLのヘルプみてみた。
TStrings::DelimiterとTStrings::DelimitedTextなんてものがあるのな。

TStringList* Data = new TStringList;
Data->Delimiter = ',';
Data->DelimitedText = "aa,bb,cc,dd,ee";
Caption = Data->Strings[3]; // ddが表示される

ただしBCB5以前は無理かもしれない。あしからず。

749 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:49:38 ]
こんなんとか。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::ifstream ifs("File1.txt");
std::string str, s2;

if (!ifs) {
Memo1->Lines->Add("File1 not found.");
}

while (std::getline(ifs, str)) {
std::string::size_type pos = str.find('j'), pos2;
if (pos != std::string::npos) {
s2 = "j";
if (pos < str.size() && (pos2 = str.find(',', pos)) != std::string::npos) {
s2 += str.substr(pos + 1, pos2 - pos - 1);
}
Memo1->Lines->Add(AnsiString(s2.c_str()));
}
}
}

750 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:58:54 ]
くだスレが役に立ってry



751 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:36:22 ]
ないってことか

752 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 14:44:59 ]
すいません、プログラム上でスクロールバーが動いたことにするには、どのようにすればよいのでしょうか?
Positionの値を変えるのでは無く、マウスで操作した時の動きをさせたいのですが・・・。

753 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 15:28:27 ]
イベント呼べばいいんでないの?

754 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 15:58:04 ]
イベントは、呼ばれるものじゃねえのか。
イベントはさすがに呼べねえだろ。


755 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:56:44 ]
自分でOnChange呼べつったんだ馬鹿かお前

756 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:21:13 ]
>>755
Are you a big baka ?
スクロールした結果、OnChange()が発生するのであって
OnChange()を自前で呼んでも無意味じゃん。


757 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:25:37 ]
もも・・・
しかして>>755
OnChange()を呼べばスクロールが発生するとでも思っているのかぁ
プププ


758 名前:755 mailto:sage [2008/10/28(火) 19:00:09 ]
私のために争うのはもうやめてっ

プログラム上からイベントを発生させる方法ってあります?

759 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:06:50 ]
自分宛にメッセージ投げればいいと思うよ

760 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:13:14 ]
>>755
嘘はいかんな



761 名前:752 mailto:sage [2008/10/29(水) 02:51:14 ]
名前間違えた、こっちだ
どうやってやればいいんでしょう・・・?

762 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 01:22:01 ]
標準のボタンの背景や形を変えることってできますか?
BitBtnは画像を配置すると文字が消えてしまうので、他に何か方法は無いでしょうか?
よろしくお願いします。

763 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 15:51:47 ]
>>762
起動時bitbtnにするDIBにフォントを使って字を書いてしまえばいいじゃないかw
元の画像は普通のボタンから抜くなりなんなりすればいいジャマイカ

そしてそれをフリーで後悔すれば….
と思う前に誰かすでに作ってないかとかおもってググ…

764 名前:デフォルトの名無しさん [2008/11/01(土) 15:52:23 ]
同じフォルダにあるテキストデータA001〜A020を同時に読み込んで
その中の計算を行いそれを50個またテキストデータとして保存したいのですが
テキストデータを同時に読む込むプログラムとそしてそれを同時に書き出す方法が
どうしてもわかりません。よければアドバイスお願いします。

765 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 17:32:46 ]
いちどきに読み込むことや書き出すことはできてもどうじに読んだり書き出したりするのは非常に困難です

766 名前:デフォルトの名無しさん [2008/11/01(土) 18:48:32 ]
>>765
すみません、説明不足だったようです。
同時にではなくたとえばA001〜020で読み込む場合にfor文などで回して
自動ですべてを順に読み込み書き出すようにしたいのです


767 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:10:09 ]
>>766
for文で回して順に読み込み書き出しすればいいと思うよ

と思ったが「同じフォルダにあるテキストデータ」ってファイルのこと?
ならファイルを順繰りに読んで希望のファイルだけ読み込み書き出しすれば良いんじゃないかね

768 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:51:35 ]
TStringList使っとけ

769 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 23:37:20 ]
具体的に何をする方法がわからんのか
そのへんが全然わからんから
エスパーじゃないから
答えようがねえなぁ
文章から類推すると、何もかもまったくわからんようにしか見えんが。


770 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 13:55:50 ]
教えてください。


private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
 progressBar1->Maximum = shikou_kaisu; /* 最大値 */
 progressBar1->Visible = true;
 label8->Text = "処理中";
 label8->ForeColor = System::Drawing::Color::Red;

 for(i=0; i<shikou_kaisu; i++){
  rnd(kibou_kosu);  //自作関数呼び出し
  Sleep(1);
 }

};
このようにshikou_kaisuには10000を入れていまして、1万回のループに入る前に
プログレスバーを出し、label8の文字色を赤にし、処理中と書き換えているのですが
どちらとも(プログレスバーもlabel書き換えも)for文が終了したあとに処理されてしまいます。
なぜでしょうか?



771 名前:デフォルトの名無しさん mailto:age [2008/11/02(日) 14:03:05 ]
連投すみません。

あともう一つ教えてください。

出力ウィンドウに、テスト的に変数の値などを表示させたいのですが、

Console::WriteLine("aaa");
などとしてもまったく表示されません。何か方法はありますでしょうか?
よろしくお願いします。

772 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:27:08 ]
>>770 誤爆?
ここは、
くだすれC++Builder(超初心者用)その3



773 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:57:22 ]
>>772
すみません。間違えました><

774 名前:デフォルトの名無しさん [2008/11/03(月) 18:05:44 ]
読み込みと保存について質問なんですが
バイナリ形式のファイル読み込んで、その内容を同じファイル名でテキスト形式に置き換えて保存したいのですが
それを手動保存するのではなく自動で同じファイルネームでそのフォルダ内に生成されるプログラムを作りたいのですがどのようにすればよいのでしょうか


775 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:49:03 ]
>>774
スレ違い
C/C++の宿題を片付けます 117代目
pc11.2ch.net/test/read.cgi/tech/1225320579/
こっちだな


776 名前:デフォルトの名無しさん mailto:save [2008/11/03(月) 18:55:33 ]
>>775
すいません、これをSaveDialogやOpenDialogなどを用いてc++builderで
実行しなくてはいけないのですが読み込んだファイルを同じ名前のテキスト形式で自動生成する保存の方法を教えていただけないでしょうか

777 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:46:17 ]
>>776
君の質問に回答できる奴はエスパー


778 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:06:21 ]
そんな事できません
バイナリの中身が構造体だったり、浮動小数点と整数が
交互に書かれていたりする時どうやって判別するのですか?

コンピュータから見るとどちらもただの0と1の羅列ですよ?

779 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 04:10:55 ]
00010111000 とかをテキストで保存するんだろ。

780 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 12:41:53 ]
それはファイルダンプじゃん。




781 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 13:44:41 ]
失礼します。
OpenDialogを使用して、指定したフォルダからファイルを読み込みたいのですが、
最初の動作ではInitialDirに指定フォルダ名が入っているのにも関わらず、デフォルトのフォルダが表示されてしまいます。
再起動しても変わりません。
でも、他の動作で指定フォルダを開くと、最初のOpenDialogも指定フォルダを開けるようになります。
フォルダ名を指定した後、確定させる方法があるのでしょうか?
よろしくお願いします。


if(FolderTXT.IsEmpty()){ // フォルダ指定無し
OpenDialog1->InitialDir = ExtractFilePath(Application->ExeName)+"DATA";
}else{
OpenDialog1->InitialDir = FolderTXT+"DATA";
}

// フォルダオープン
if(OpenDialog1->Execute()){
if(FileExists(OpenDialog1->FileName)){
fn=OpenDialog1->FileName;
}
}

※FolderTXTにフォルダ名が入っています。

782 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 14:14:42 ]
Execute()する前に
DirectoryExists(OpenDialog1->InitialDir)
してみい
falseが返ってくるからさ




783 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 14:41:37 ]
そうじゃなくて

FileNameにフルパスでいれときゃいい

784 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 15:16:55 ]
>>782
はい、falseでした。
一度動くようになると、PCを再起動してもtrueですね・・・。
なぜでしょう?

>>783
汚い書き方ですが、
OpenDialog1->FileName = OpenDialog1->InitialDir;
をExecute()の前に置いたら動作しました。
Execute()で最初に開くフォルダはFileNameのフォルダで、InitialDirでは無いってことでよろしいでしょうか?

785 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 17:13:51 ]
さっさと教えてくださいよ。グズは嫌いですよ。
こっちも忙しいんだから早くして下さいね。

786 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:57:41 ]
>>784
>一度動くようになると
パスが通ってるから。
想定される状況で通るように場合分けしたら?
フォルダを開くという概念がどうもね。

787 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:01:27 ]
ShowMessage()で表示したメッセージを
指定時間後に自動的に閉じることって可能でしょうか?
可能であればどうすればいいのでしょうか?

788 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:24:43 ]
根性

789 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:47:09 ]
>>787
TSplashForm

790 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:35:09 ]
タイマーで閉じればいいじゃん。




791 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:16:07 ]
タイマーイベントを設定して

Close();
Release();

で閉じれるね

792 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:51:27 ]
Delphi/C++Builderにはスプラッシュウィンドウが用意されてなかったっけ?

793 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:17:33 ]
VC++には昔っからあるのにね。
ってか、大麻付きダイアログを作ればいいだけだけど。


794 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:38:46 ]
面倒くさい。とか言ってる奴がBCB使うわけで。

795 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:41:38 ]
あるある

796 名前:デフォルトの名無しさん [2008/11/10(月) 16:04:46 ]
for (int I = 1; I <=9 ; I++){

  pass = ID +"0"+IntToStr(I);
  fp = fopen(pass.c_str(), "rb" );
  fread(data,2,10,fp);
   fclose(fp);
}

と途中まで作ったのですが、この9個の読み込んだ配列データ(data)を9個別々に
A1〜A9(AnsiString)で格納したいのですがやりかたがわからないのでアドバイスください。

A1にはID01の読み込んだ配列データ・・・A9にはID09の配列データです。

797 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:16:55 ]
AnsiStringの配列じゃダメなのか?

798 名前:796 [2008/11/10(月) 16:25:20 ]
>>797
AnsiStringでいいです。別のところでそれぞれの配列を使って計算したいので。。
どういう風に書けば9個格納できるでしょうか。

799 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:36:03 ]
AnsiStringの配列でいいじゃないかw

800 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:46:49 ]
普通に配列使おうぜ?

char wk[128];
AnsiString A[10];
for (int I = 1; I <=9 ; I++){

  pass = ID +"0"+IntToStr(I);
  fp = fopen(pass.c_str(), "rb" );
  fread(wk,2,10,fp);
   fclose(fp);
A[i] = wk;
}



801 名前:796 [2008/11/10(月) 17:26:07 ]
>>800

うまくいきません。
Memo1->Lines->Add(A1)で確認してみたのですがうまく読み込めていませんでした。

読み込むファイルが数百行というのは関係あるのでしょうか。

A1 = 1回目に読み込んだ配列
A2 ・・・
という感じでやりたいのですが。。。

とりあえずがんばってやってみます。

802 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:35:33 ]
>>801
んじゃさ、TStringList使えばいいんでないの?

TStringList *sl = TStringList();
sl->LoadFromFile("ファイル名"");
for( int i = 0; i < sl->Count; i ++ ){
  aa = sl->Strings[i];
}
こんな感じでどうよ?

803 名前:デフォルトの名無しさん [2008/11/10(月) 17:59:23 ]
Memoに表示された20行の数字をkekkaに入れたくて

AnsiString kekka;

for(int I=0;I<20; I++){

kekka = Memo1->Lines->Strings[I];
    }

という風に試したのですがMemo1に表示させてある内容と違う値が出てしまいました。
わからないのでアドバイスください。


804 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:44:15 ]
>>803
kekkaは一つしか無いでしょ。
Memo1->Lines->Stringis[I]は20個あるでしょ。
20回ループまわしてもkekkaは一つしか無いでしょ。

805 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:28:51 ]
>>803
っていうか俺のTStringListは無視か!!
それにkekkaを配列にすりゃいいって最初に言っただろう!

806 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 14:56:40 ]
頭の中だけでなんとなく考えてるんだろうなぁ・・・
それで出来るようになるのってちゃんとしたプログラムがいくつも書けるようになってからだろうに。
クラス図とかメモリマップとか妄想絵図とか、何でもいいからソースコード以外の何かで書いてみたら
自分がどこに引っかかってるのか分かるような気がする。

807 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:02:06 ]
プログラミングに限らず、段取りをすっ飛ばした想像しか出来ない奴っているからな。

808 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:27:18 ]
んだんだ。
妄想を紙に書いてみると
自分のアホさが
よくわかる。


809 名前:デフォルトの名無しさん [2008/11/13(木) 10:39:08 ]
非常に今更な感があるけど出来たら教えて欲しいことが・・・

・BCB5
・複数のカラム追加したListViewを設置
・上記カラムの1つはAutoSize

このListViewにデータを流し込んだ時に後から発生した
縦スクロールバー分の幅が自動調整されないんだけど
これを自動調整するには何がベストなんでしょうか?

今は仕方なくデータを流し込んだ後にListViewの幅を
-1 >> +1として調整してます

810 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:58:48 ]
何で調整したいんだ?
ListViewの幅か?カラムか?



811 名前:デフォルトの名無しさん [2008/11/13(木) 11:53:38 ]
カラムの方
右端が発生したスクロールバーで隠れるのよ・・・

812 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 10:51:35 ]
TListView::OnInsertでTListView::ClientWidth読んで調整すればいいんじゃない?

813 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 12:48:11 ]
C++B 6をつかっています。

・やりたいこと
クライアントアプリ(C++B)からPostgreSQLへ接続したい。
・やったこと
1.Windows版 Postgres8.2.6(日本語版)をインストール
(インストールのさいC開発モジュールも一緒にインストールしました)
2.インストールされたlibpq.dllを使って、impdll libpq-bc.lib libpq.dll
3.できたlibpq-bc.libをアプリフォルダへコピー
4.Postgresのincludeフォルダにある、libpq-fe.hをアプリフォルダへコピー
5.プロジェクトの追加から、libpq-bc.libを追加。

6.myapp.hに #include "libpq-fe.h"
7.myapp.cppで、とりあえず接続テスト PQconnectdbを実行

コンパイルすると
[リンカ エラー] 外部シンボル '_PQconnectdb' が未解決(略\APPLICATION\MYAPP.OBJ が参照)
と出て、うまくいきません。

足りない操作、間違った操作をやっていたら教えてください。
お願いします。

814 名前:デフォルトの名無しさん [2008/11/17(月) 15:35:15 ]
”バリアントの型変換が不正です”って出たのですがどういうときに出るんですか?

815 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:39:13 ]
バリアントの型変換が不正な時に出るんだろうよ

816 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:56:25 ]
バリアントの型変換が不正な時に出るんだよ

817 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:59:29 ]
バリアントの型変換が不正な時に出るんよ

818 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:00:01 ]
バリアントの型変換が不正な時に出るよ

819 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:19:59 ]
バリウム飲んだから白いうんこが出るんだよ

820 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:25:56 ]
お前らあんまり荒らすな
プログラム板がID制になってもいいのか



821 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:28:33 ]
>ID制
大賛成

822 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:29:03 ]
ごみん

823 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:46:11 ]
大貧民

824 名前:814 [2008/11/17(月) 19:14:13 ]
ありがとうございます。解決しました

825 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 19:24:18 ]
むしろID制にしてくれ

826 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:41:26 ]
むしろBe強制に

827 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 10:17:08 ]
むしろ実名が表示されちゃうでいいよもう

828 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 10:32:49 ]
実名が表示されたら俺が超紳士なことがバレちゃうじゃないかやめろ

829 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 10:47:53 ]
んじゃ(仮名)てつけば問題ないよな

830 名前:811 [2008/11/18(火) 16:14:59 ]
>>812
変化するイベントで自分で再設定すれば出来るのは知っているんですが
コンポーネントのサイズ変更を行えば自動でやってくれる以上
なんとかそれを直接行えないかなと思ってるんですか・・・



831 名前:デフォルトの名無しさん [2008/11/21(金) 18:14:21 ]
memo1にcsv形式で書き出したのですがコンマ区切りで2列目の配列と4列目の配列だけをCommaTextなどを使って最後まで
読み込みA1とA2にTStringlistとして格納したいのですが格納したいのですがどのようなプログラムにすればよいのでしょうか。
 0001, -2.06167, -719.351, EEE
 0002, -2.05553, -710.148, RRR
 0003, -2.04654, -698.637, EEE
 0004, -2.04326, -689.907, RRR
         ・
         ・
         ・
 1499, -2.03713, -678.463, RRR
 1500, -2.03099, -667.071, RRR

このような感じの配列で1500行並んでいます。


832 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:24:18 ]
どういう風に格納したいんだ

833 名前:デフォルトの名無しさん [2008/11/21(金) 18:34:24 ]
2番目の列だけの格納をx 4番目の列だけの格納をyとしたときに

Memo2にLoadFromfileなどでxを書き出すと
-2.06167
-2.05553
-2.04654
-2.04326

  ・

yを書き出すと
EEE
RRR
EEE
RRR
(空白の場合もあるのでそれも一行として数える)



などといった具合にxとyに格納したいのです。
TStringといいましたが格納の仕方がそれだけしかしらないので
AnsiStringなどでもできるのでしたらどちらかアドバイスお願いします。

834 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 19:34:06 ]
memo1に自分で書き出しているのなら、あとふたつTStringListを用意しておいて、memo1に各行を出力する裏で同時に書き込めばいいんじゃないの?

for( int i = 0; i < 1500; i++ ){
  memo1->Lines->Add( 1行分のcsv文字列 );
  x->Add( 2列目の情報 );
  y->Add( 4列目の情報 );
}

どうしてもmemo1の内容を再利用するしかないなら項目分離用TStringListを用意して

TStringList* Values;
Values->Delimiter = ',';
for( int i = 0; i < 1500; i++ ){
  Values->DelimitedText = memo1->Lines->Strings[ i ];
  x->Add( Values->Strings[ 1 ] ); //2列目の情報
  y->Add( Values->Strings[ 3 ] ); //4列目の情報
}


835 名前:デフォルトの名無しさん [2008/11/23(日) 17:20:19 ]
>>834
遅くなってしまってすいません、そして説明不足でした・・・。
できればMemo1の内容を再利用したいのですが、c++builderのバージョンが5なので
Delimiterが使えないようなのです・・・

お手数ですがDelimitedText以外での表し方を教えていただけないでしょうか。


836 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 18:50:25 ]
じゃあこんなかんじで
TStringList* Values;
for( int i = 0; i < 1500; i++ ){
  Values->CommaText = memo1->Lines->Strings[ i ];
  x->Add( Values->Strings[ 1 ].Trim() ); //2列目の情報
  y->Add( Values->Strings[ 3 ].Trim() ); //4列目の情報
}

837 名前:デフォルトの名無しさん [2008/11/23(日) 19:30:27 ]
>>836

返信ありがとうございます.
おっしゃられたようにButton1にこのように付け加えてMemo2とMemo3に書き出すようにしたいのですが
Memo1に排出されたあとボタンを押すと読み込み違反が起こってしまいます。
これは何が原因となってるんでしょうか Memo2と3に書き出すプログラムは後から付け加えたものなので
それ以前のところでエラーが起こっているようです。

TStringList* Values;
TStringList* x;
TStringList* y;


for( int i = 0; i<Memo1->Lines->Count; i++ ){  //1500行のみとは限らない場合があるため
Values->CommaText = Memo1->Lines->Strings[ i ];
x->Add( Values->Strings[ 1 ].Trim() );
y->Add( Values->Strings[ 3 ].Trim() );

Memo2->Lines->AddStrings(x);
Memo3->Lines->AddStrings(y);
}

838 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 20:05:59 ]
ちゃんと Values、x、y は new して使ってる?
TStringList* Values = new TStringList;
使用後
delete Values;

839 名前:デフォルトの名無しさん [2008/11/24(月) 19:39:22 ]
new TStringListは入れてませんでした。ありがとうございます。

{
TStringList* Values = new TStringList;
TStringList* x = new TStringList;
TStringList* y = new TStringList;


for( int i = 0; i<Memo1->Lines->Count; i++ ){
Values->CommaText = Memo1->Lines->Strings[ i ];
x->Add( Values->Strings[ 1 ].Trim() );
y->Add( Values->Strings[ 3 ].Trim() );

Memo2->Lines->AddStrings(x);
Memo3->Lines->AddStrings(y);

delete Values;
delete x;
delete y;
}
}

このような形でやってみて読み込み違反は回避できたのですが、次はリストの
インデックスは範囲を超えていますといわれてしまいます。
CSV形式なのですがコンマの後、数字の桁数を合わせようと半角スペースもついてしまっており
それまで読み込んでいるので、それが原因だとは思うのですが.Trim()がついているので
実際何が原因なのかわからない状況です;
またEEE,RRRのところは空行であるときもありその際にはスペースがつけられているのですが
そこをEEE,RRRだけでなく同じ行数文だけスペースも含め格納したいのですが、これは無理でしょうか?


840 名前:デフォルトの名無しさん [2008/11/24(月) 19:53:32 ]
 0001, -2.06167, -719.351, EEE
 0002, -2.05553, -710.148, RRR
 0003, -2.04654, -698.637, EEE
 0004, -2.04326, -689.907, RRR
 0005, -2.04440, -898.545,
 0006, -2,03434, -434.434, EEE
 0007, -2,67665, -775,443,
 0008, -2.34443, -566,886, RRR
         ・
         ・
         ・
実際このような感じのCSV形式の配列で格納したい配列は
  xに            yに
-2.06167          EEE
-2.05553          RRR
-2.04654          EEE
-2.04326          RRR
-2.04440         (空行)
-2,03434          EEE
-2,67665         (空行)
-2.34443          RRR
   ・            ・
   ・            ・
   ・            ・

このようにTStringで格納していきたいのです。
無理難題を言ってしまいすいません。



841 名前:デフォルトの名無しさん [2008/11/24(月) 19:55:12 ]
delete の位置は何度も変えてみましたが結果は同じでした。
もしよろしければアドバイスお願いします。

842 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 00:27:26 ]
>>839 試行錯誤中のコードだろうけど、どうみても一度しかnewしていない変数を
ループ中で何度もdeleteするのがおかしいことに気付かないとまずいよ。

Memo2にxをAddStringsするのもループを抜けてからじゃないと、
1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,…みたいに行の登録が重複する。
Memo1が1500行だとMemo2、Memo3は(Σk=n(n+1)/2になるので)1125750行になってしまうよ。
それだけ大きいとTMemoコンポーネントのメモリ制限に引っかかってるんじゃないかな?
てかMemo2、Memo3が最初からあるのならx、yなんて不要。直接入れればいい。

4つめがEEEでもRRRでもなく空の時にスペース三つ出力したいなら

this->Memo2->Lines->Clear();
this->Memo3->Lines->Clear();
TStringList* Values = new TStringList;
AnsiString asSpacer = " "; //スペース三つ
for( int i = 0; i < Memo1->Lines->Count; i++ ){
  Values->CommaText = Memo1->Lines->Strings[ i ];
  this->Memo2->Lines->Add( Values->Strings[ 1 ].Trim() );
  AnsiString as4thValue = Values->Strings[ 3 ].Trim();
  this->Memo3->Lines->Add( as4thValue.IsEmpty() ? asSpacer : as4thValue );
}
delete Values;

あと >>840 で出ているデータが本物のデータからのコピーなら、ピリオドとカンマが
入力ミスで混ざってて、自動で正しく分離する事は無理。

843 名前:デフォルトの名無しさん [2008/11/28(金) 02:16:31 ]
32BitのBitmapへ色を塗る時、アルファチャンネルの指定はどのように行えばよろしいのでしょうか?
TColorは24bit専用なのでしょうか?完全な白の時は透過になるのですが、それ以外は全く透過しません。
色によって透過度を変えたいのですが、上手くいかないのが現状です。
PixelFormatで32bitの指定はしているのですが・・・。
すいませんがよろしくお願いします。

844 名前:デフォルトの名無しさん [2008/11/28(金) 11:26:00 ]
教えてください。
BDS2006を使っています。
ファイルの数が多くなってきたので
ヘッダファイルを、header1.hというファイルにまとめて
#include "Main.h"
#include "About.h"
・・・
という感じに記述して
.cppファイルの方には、
#include header1.h
と記述するようにしました。
このように変更してから、
再構築を行い、プログラムを実行し
バージョン情報を表示すると、EClassNotFound
TImageが見つかりませんというエラーがたまに出るようになりました。
About.cppをコンパイルし直すと正常に動作します。
他のクラスでも同じように、エラーが発生し再コンパイルすると正常になることがあります。
どうしてこのようなことが発生し、どうすれば回避できるのでしょうか。
ヘッダをまとめて1個のファイルにしてしまうのはダメなのでしょうか。


845 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 14:26:15 ]
一度プリコンパイルヘッダ消せ

846 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 15:43:04 ]
いいやお前が消えろ!

847 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 15:49:08 ]
ヒント:あらしはスルーwww

848 名前:デフォルトの名無しさん [2008/11/29(土) 01:55:44 ]
すいません、どなたか>>843にも答えていただけないでしょうか。

849 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 09:34:25 ]
ファイルのサイズを取得したくて
TSearchRecのSize変数から取ったのですが、
ファイルサイズが大きいと戻り値がマイナスになってしまいます。
大きいファイルサイズでも正確に取得するには
どうすればいいのでしょうか。

850 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:20:56 ]
APIのFindFirstFile、GetFileSize、GetFileSizeEx



851 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:22:52 ]
もしくはバージョンうp。今はTSearchRecのSizeは__int64になってるらしいので。

852 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:33:20 ]
TSearchRec.FindData.nFileSizeHigh
TSearchRec.FindData.nFileSizeLow

853 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:34:58 ]
あ、そうか。失礼。

854 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:44:27 ]
>>848
これで行けるはずなんだが・・・うーんわからん
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* bt = new Graphics::TBitmap;
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 100, 0};
TCanvas* ti = Image1->Canvas;
RGBQUAD rgbq;

bt->Width = 256;
bt->Height = 256;
bt->PixelFormat = pf32bit;

for (int i = 0; i < 255; i++) {
int* sc = reinterpret_cast<int*>(bt->ScanLine[i]);
for (int j = 0; j < 255; j++) {
rgbq.rgbBlue = i;
rgbq.rgbGreen = j;
sc[j] = reinterpret_cast<int&>(rgbq);
}
}

BOOL RESULT =
::AlphaBlend(ti->Handle, 0, 0, Image1->Width, Image1->Height,
bt->Handle, 0, 0, bt->Width, bt->Height,
blend);
if (RESULT == FALSE) {
Application->MessageBox(L"失敗!", L"", MB_OK);
}
delete bt;
}

855 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 00:35:28 ]
>>843
Win32スレで聞いているうちにバグの原因がわかったので、
AlphaBlend per Pixelのプログラムを貼っておきます。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* bt = new Graphics::TBitmap;
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
TImage* ti = Image1;
RGBQUAD rgbq;

bt->Width = 256;
bt->Height = 256;
bt->PixelFormat = pf32bit;

int k = 0;
for (int i = 0; i < 255; i++, k++) {
int* sc = reinterpret_cast<int*>(bt->ScanLine[i]);
for (int j = 0; j < 255; j++) {
rgbq.rgbBlue = i;
rgbq.rgbGreen = j;
rgbq.rgbRed = 0;
rgbq.rgbReserved = k;
sc[j] = reinterpret_cast<int&>(rgbq);
}
}
BOOL RESULT =
::AlphaBlend(ti->Canvas->Handle, 0, 0, ti->Width, ti->Height,
bt->Canvas->Handle, 0, 0, bt->Width, bt->Height,
blend);
int err = GetLastError();
const wchar_t* str = WideString().sprintf(L"失敗!%d", err).c_bstr();

856 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 00:36:10 ]
if (RESULT == FALSE) {
Application->NormalizeTopMosts();
Application->MessageBox(str, L"AlphaBlend()でエラーが起きました", MB_OK);
Application->RestoreTopMosts();
}

delete bt;
}

857 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 00:42:59 ]
補足ですが、rgbq.rgbReserved must be zero.とMSDNには書いて
ありますが、これがまさにアルファ値そのものです。

ですからここにアルファ値をセットしてAlphaBlend()を呼び出せば、
期待通りの結果が得られます。

もちろんPixelFormatはpf32bitでなければなりません。

858 名前:843 mailto:sage [2008/11/30(日) 19:35:36 ]
>>855-857
丁寧にありがとうございます。
WideStringのところでひっかかったり、AlphaBlendが見つからなかったり(wingdi.hをインクルードするだけじゃダメなのかな?)していてまだ確認できていませんが、
いろいろ調べてやってみます。
ありがとうございました。

859 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 20:26:46 ]
>>858
BCB6だと、AlphaBlend()やTransparentBlt()使うときインポートライブラリ作らないといけないよ。

implib.exe msimg32.lib msimg32.dll でインポートライブラリを作り
tlib.exe lib\import32.lib + msimg32.lib 上記dll内のAPIをimport32.libに追加
これでいつでもAlphaBlend()が使えるはず。(BCB5以前ならネットからAlphaBlend()の関数定義もコピって来る)

>>855 は多分BCB2009にあわせてユニコード使ってるだけなので、BCB2007以前ならWideStringの代わりにAnsiString使えばいいよ。

860 名前:843 mailto:sage [2008/11/30(日) 21:16:16 ]
>>859
はい、BCB6を使用しています。
CBuilder6\Lib\Psdkに同名のファイルがあるので、パスが通っていれば良いのかと思っていました。
インポートライブラリを作成したところ、動作しました。
ありがとうございます。


ところで実行結果ですが、これでよろしいのでしょうか?
www3.uploda.org/uporg1823015.jpg.html

rgbq.rgbReserved = k;の部分で透明度が変わるはず・・・ですよね?
ti->Transparent = true;
ti->Canvas->Brush->Style = bsClear;
を入れてみてもダメでした。



861 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:14:10 ]
>>860
それで合っています。
どうしても疑問に思われるなら、rgbq.rgbReservedにいろんなアルファ値(0〜255)
を入れてやってみて下さい。

862 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:16:02 ]
例えばrgbq.rgbReserved = 100; にしたりすると
明らかに実行結果が変わります。

あとこういうグラデーション画面ではなくて、画像のbitmapを
使うとよくわかります。

863 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:21:09 ]
ti->Canvas->Brush->Color = clRed;
ti->Canvas->FillRect(Rect(0, 0, 255, 255));

こんな感じでImageコントロールを赤色で塗りつぶしてから
AlphaBlend()を掛けるとよく効果がわかります。
デフォルトでは白色ですからわかりにくいと思います。

864 名前:843 mailto:sage [2008/11/30(日) 22:38:05 ]
すいません、やっと理解できました。
ひとつのImageで二つの画像を重ね合わせるのですね。
これを二つのImageで行うことは不可能でしょうか?
下の画像に、上のImageを透明〜半透明色で塗った物を重ねたかったので。

Formをアルファブレンドした場合、全体を均一に同じ透明度で半透明になってしまいますよね?

865 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:46:24 ]
>>864
AlphaBlend()に与えるパラメータBLENFUNCTIONの最後のパラメータが
0だと、3つ目のパラメータが全体に与える透過度になります。

しかし今回はピクセル毎に透過度を指定する方法を敢えて選んでいます。
そちらのやり方を欲しておられるように読めたので。

その時は3番目のパラメータを255に、4番目のパラメータをAC_SRC_ALPHA
にして、rgbReservedにピクセル毎のアルファ値を入れる事になるのは説明
した通りです。

もし上のImageを透明〜半透明色で塗った物を合成したいのならば、二回
AlphaBlend()を呼び出さなければなりません。

866 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:48:04 ]
と言うのも、AlphaBlend()関数はソースのアルファ値しか参考にしない
ようになっているからです。MSDNをよく読んで見て下さい。

つまり上の画像を別の単色の画像か何かでアルファブレンド、次いで
その画像を下の画像とアルファブレンド、という二段階になります。

867 名前:843 mailto:sage [2008/12/01(月) 00:48:02 ]
上の画像に模様をつけて、それをさらにマウスで変形させようとするとすっごく大変なことになりそうですね。
ありがとうございましたー。

868 名前:デフォルトの名無しさん [2008/12/04(木) 17:03:59 ]
>>842
アドバイスありがとうございます!そして返事が遅れて本当にすいません;
これでやってみたのですが2列目の情報はMemo2に書き出すことができたのですが
4列目の情報を書き出そうとするとなぜかエラーがでてしまい。リストのインデックスが範囲を超えていますとでてしまいます。
原因がどうしてもわからず、困っています。
何かよい書き出し方法はもしくは格納方法はないでしょうか?
当方C++builder5を使用しています。

格納方法もしくは書き出し方法はEEEやRRRがないときは元のテキストのようにスペースとして一行あけて
書き出したいのですがどなたかよろしければアドバイスお願いします。


869 名前:843 mailto:sage [2008/12/05(金) 19:42:25 ]
たびたびすいません。
>>855>>863を加えたのですが
rgbq.rgbReserved = k; のkを0にすると、以下のようになりますよね。
www2.uploda.org/uporg1833847.jpg.html

透過度を0にすれば上にかかる色は消えますが、色の濃さは残るようで赤色にグラデーションがかかってしまいます。
濃さも消すことはできないのでしょうか?

870 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 20:02:48 ]
>>868
「4つめがEEEでもRRRでもなく空の時」って「Values->Strings[ 3 ]」が生成されないってことはないよな?
ブレイクポイント貼るかステップ実行するかして、どのリストからどんな風にはみ出してるのかデバッガ使って変数の値見ておいで。



871 名前:843 mailto:sage [2008/12/05(金) 22:13:17 ]
>>869ですが、自己解決しました

872 名前:デフォルトの名無しさん [2008/12/20(土) 20:13:43 ]
memo1 memo2
5.6    0
6.1    0
6.1    0
7.2 ←  0
10     1
9.0    1
10     1
4.0    1
7.5 ←  0
5.9    0
5.4    0
5.5    0
5.4 ←  0
10     1
10     1
4.5    1
5.2 ←  0
6.1    0
・     ・
・     ・
・     ・


このようにMemo1とMemo2に書き出されており0は正常値、1はエラー値でそれに対応する値が左の数字です。
1が出た場合前後の0の値から線形補間をしていきたいのですがどのように組んでいけばよいのでしょうか
上記の場合であれば(7.2と7.5の間で線形補間、5.4と5.2の間で線形補間)といった感じです。

873 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:16:46 ]
memo2 の値が 1 なら前後に 0 を検索して
0 があったらその値とそこまでの距離を使って
線形補完すればよろし。

ところで端に 1 があった場合はどうすんの?

874 名前:デフォルトの名無しさん [2008/12/20(土) 20:19:20 ]
AnsiString A,B;
int s,u;
u = 0;
for( int i = 0;i<Memo2->Lines->Count; i++ ){
if(Memo2->Lines->Strings[i] == '1'){
A = Memo2->Lines->Strings[i-1];
s = StrToInt(i);
u = StrToInt(i);
while(Memo2->Lines->Strings[u] == 0){
u++;
}
















}

875 名前:デフォルトの名無しさん [2008/12/20(土) 20:20:31 ]
B = Memo1->Lines->Strings[u];
for(int X = s; X< u+1; X++){
Memo1->Lines->Strings[X] = (B - A)/(u+1) * X + A;
Memo2->Lines->Strings[X] = 0;
}
u = 0;
}
このような感じで組んでみたのですが線形補間もうまくできておらず、
エラーが起こる場合もあります、よろしければアドバイスお願いします

876 名前:デフォルトの名無しさん [2008/12/20(土) 20:22:45 ]
>>873
返信ありがとうございます。
その場合は手動で0が端にくるようにしたいと思います。

877 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:23:24 ]
>>873
memo1 のデータを保存する必要がないなら、
memo1 のデータをあらかじめ補間した値ですげ替えておけば良い。
メモリに余裕があるなら、memo1 とは別にそういうテーブルを用意してもいい。
最初に一気に補間すると時間がかかるなら無理かもしれないが。

878 名前:デフォルトの名無しさん [2008/12/20(土) 20:26:01 ]
すいません、バージョンはc++builder5です。

879 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:34:28 ]
memo1 を書き換えたのでいいのね。

文字列を引き算したり
A に Memo2 の値を入れたり
整数を StrToInt したり
'0' じゃなくて 0 と比較してたり
X の範囲がおかしかったり
線形補間の分母がおかしかったり
おかしいところがありすぎて困っちゃう。

あと、今はまあいいんだけど、
最終的には補間後に i を補間の終了した地点にまで移動させた方が効率がいい。

880 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:35:26 ]
こういうことが起こるのも、変数名が 1 文字で分かりにくいからってのはあると思うぜ。
変数名は分かりやすい意味のある名前をつけよう。



881 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 21:39:53 ]
>>879 >>880
返信、アドバイスありがとうございます><
プログラム知識も浅く見様見真似で作ったのでこんな形になってしまいました・・
おかしい言われたところも自分ではどのようにして変えていけばよいのかわからず
困り果てています。
線形補間をしてmemo1に書き換えるにはどのようにプログラムを組めばよいでしょうか・・


882 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 22:08:35 ]
こっちもどうアドバイスしていいのかわからんレベルなんだが…。
とりあえず考え方として
Memoから値を文字列→数値に変換して配列とかvectorに格納する
数値に必要に応じて線形補完する
数値を文字列に変換してMemoに格納する
というように、やるべきことを自分が理解できるところまで分解してみてはいかが?
自分で理解できないものを作ることはできないんだし。

883 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 07:27:35 ]
Memoとかコントロールに入っている値を取りだしてどうこうしてまた
戻す操作は一般に遅いので>>882さんみたいにvectorに入れる
など考えた方がいいよ

884 名前:デフォルトの名無しさん [2008/12/21(日) 16:35:08 ]
vectorの格納とはいったいどういうものなんでしょうか?
今日調べていたのですが使い方もわからずじまいでした;
動作速度は遅くてもよいので具体的にこのように
memo1とmemo2を見比べてエラー値のあった部分は前後の0(正常値)から
線形補間していきmemo3のように線形補間された配列を書き出すプログラムを作りたいのですが
どのように書いていけばよいのでしょうか?
お手数ですがよろしくお願いします。
memo1 memo2 memo3
5.6    0    5.6
6.1    0    6.1
6.1    0    6.1
7.2 ←  0    7.2
10     1    7.26
9.0    1    7.32
10     1    7.38
4.0    1    7.44
7.5 ←  0    7.5
5.9    0    5.9
5.4    0    5.4
5.5    0    5.5
5.4 ←  0    5.4
10     1    5.35
10     1    5.3
4.5    1    5.25
5.2 ←  0    5.2
6.1    0    6.2
・     ・    ・
・     ・    ・




885 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:30:23 ]
身近に聞ける人はいないのん?
そりゃ答え教える事はできるけど・・・
今後もずっと聞き続けるのん? って話だしなあ。

886 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:32:06 ]
C++には型ってものがあってだな、ってところから説明が必要なのか?
Vectorがわからないなら配列でいいんで、せめてそのくらいは勉強しようね。
で、丸投げならそういうスレにいってもらうとして、そうでなければ、
あなたが同じことをやるとしたらどうやってそれを実現するのか、を手順として
分解していって、それをプログラムとしてコーディングする、という手順で。
とりあえず文字列は数値計算できないものなので、これを一旦doubleにして、
計算して、終わったら文字列に戻す…てなふうに。

887 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:54:17 ]
こういう単純な変換をするなら、
スクリプト言語使った方が楽だと思うんだがね。

888 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:58:26 ]
>>884
とりあえずアルゴリズム云々以前ぽいけど、BCBに因る問題だけは説明。

Memo2->Lines->Strings[ i ] は文字ではなく文字列なので
Memo2->Lines->Strings[ i ] == '1' や Memo2->Line->Strings[ i ] == 0 ではいけない。
比較するのなら Memo2->Line->Strings[ i ] == "1" とする。

Memo1のデータは数字に見えても実際は文字列なのでそのままでは計算できない。
なので一旦 ToDouble() メソッドを使って小数型にする。
(AnsiString::ToInt() や StrToInt() では整数になるので 5.4 とかは 5 に切り上げられてしまう)
※例として Memo1 の値を半分にして Memo3 に格納。
Memo3->lines->Add( Memo1->Lines->Strings[ i ].ToDouble() / 2.0 );

889 名前:デフォルトの名無しさん [2008/12/22(月) 16:18:17 ]
TDateTime と COleDateTime って、 double 値として見れば等価ですか?

890 名前:884 [2008/12/22(月) 18:25:02 ]
for( int i = 0;i<Memo2->Lines->Count; i++ ){
if(Memo2->Lines->Strings[i] == "1"){
c = i;

while(Memo2->Lines->Strings[c] == "0"){
c++;
}
Memo3->Lines->Add(c-i);
for(int x = i; x<c; x++){
Memo2->Lines->Strings[x] = 0;
}
c = 0;
}
}

線形補間をする上でエラー値の1がどれだけ続くのかを調べるために
上の方法でやってみたのですがうまくいかないのです。(常にcとiの値が同じで0になってしまう)

どこに問題があるのかアドバイスの方よろしくお願いします。



891 名前:デフォルトの名無しさん [2008/12/29(月) 18:17:29 ]
プログラム内でA1,A2,A3,A4,A5,B1,B2,B3,B4,B5,C1,C2,C3,C4,C5
に計算した値が入っていて、

Memo1

A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
C1,C2,C3,C4,C5

というCSV形式でMemo1出力したいのですがどういう風に書けばいいですか?

892 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 19:23:03 ]
1個ずつ出力して下さい。
ループが欲しけりゃ配列にして下さい。

893 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:15:46 ]
TBitBtnやTToolBarで使えるビットマップデータはどこで入手できますか?
インストールされたフォルダを探してもサンプル用のがちょっとあるだけだし、
いちいち作るの大変だし…

894 名前:デフォルトの名無しさん [2009/01/06(火) 23:25:37 ]
C++Builder 2009 のトライアル版を使い始めたのですが、
良い関連書籍は無いでしょうか?初心者向けの。。。
今日ヨドバシに行ったのですが、VC++の本ばかりで、
C++Builder関連は3冊くらい(応用編のような感じ)しかありませんでした。

895 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 09:19:24 ]
Delphiの本と開発者ガイドで大抵は事足りる。

896 名前:デフォルトの名無しさん [2009/01/12(月) 21:25:18 ]
ユーザーが商品コードを入力(Edit1)して検索ボタン(Button1)を押したら、
商品名(Label1)を表示したいのですが、
ACCESSのDLookupのような命令はどう書けば良いでしょうか?


897 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:51:53 ]
また>>896みたいな阿呆が沸いてきたな
情報を小出しにするのはヤメレ


898 名前:896 [2009/01/12(月) 23:50:12 ]
>>897
阿呆な質問だったみたいですいません。
サーバーにあるMySQLの商品テーブル接続まではうまく行って、
テストで特定のEdit欄に商品名を表示することまでは出来たのです。

で次は、Editに商品コードを入力して検索ボタンを押したら、
Labelに該当する商品名を表示させたいと思ったんですが、そこが
うまくいかなくて。

TADOConnectionコンポーネントでADO接続。
TADOTableで商品テーブルと接続。
TDataSourceを配置。

IF文で、Text1のコードで商品テーブルの商品コードを検索し、
該当のコードがあればそのレコードの商品名を返せば良い。
というのはわかるんですが。
コンポーネント活用ガイド&実践プログラミング〈Vol.3〉データベーステクニック編
を読みながら書いても、2009版ではエラーが出てしまって。
全然解決しないもので、困ってました。

899 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 14:42:37 ]
エラーと漠然と書かれても、コンパイルエラーなのか実行時エラーなのかもわからんし、
答えようもない。



900 名前:896 mailto:sage [2009/01/13(火) 19:41:05 ]
すいません。
Lookupで自己解決しました。



901 名前:デフォルトの名無しさん [2009/01/14(水) 16:06:50 ]
計算をしたとき算出した小数の値が8.4345356554E248のようにEを含んだ値になってしまうのですが
これをEを含ませず、また答えとして小数点6桁程度に抑えたいのですがどのようにすればよいのでしょうか?
上記の答えは double A;で宣言したときになったものでfloat A;で宣言するとオーバーフローとエラーがでてしまいます。

902 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 17:25:58 ]
>>901
ひとまずグーグル先生に「書式 sprintf」と聞いてみたらいいと思うよ。

903 名前:デフォルトの名無しさん [2009/01/14(水) 18:12:23 ]
>>902
返信ありがとうございます。
サイトでは何度も確認していたのですが、c++builderでは下のように書き出しており
%●●という形で小数点の値を6桁と指定して残りを切り捨てという形に仕方はどうしてもわかりません。

宣言文の箇所で小数点の桁数の指定、またEなど数字以外のものを使用させないようにすることはできないでしょうか?
基本的なことなのかもしれませんがどうしてもわかりません;

double A;
---(計算)----
Memo1->Lines->Add(A);
このような感じです

904 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 18:26:04 ]
>>903
www9.plala.or.jp/sgwr-t/c/sec05.html


905 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 18:27:03 ]
>>903
ひとまずグーグル先生に「書式 sprintf」と聞いてみたらいいと思うよ。

906 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 18:58:37 ]
>>903
Memo1->Lines->Add(AnsiString.sprintf("自分で考えてね", A));
って書けばいいよ。

907 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 02:14:20 ]
手元に環境が無いため、曖昧な質問ですいません。

日本語環境(XP SP3&BCB6)で作成したものを英語版のWindowsXPで実行すると、表示がおかしくなるようなことってありますか?
Imageの中の表示がおかしいだけでなく、コンポーネントの配置や大きさもずれていたりします。
表示等に2byte文字は使っていないつもりです。
グラボとかの問題でもこのようなことは発生することってありますか?
よろしくお願いします。

908 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 17:27:03 ]
>>907
設計時のフォームのフォントのCharsetが気になるな。

フォームのコンストラクタでthis->Font = Screen->IconFont;して
表示崩れ直るか確認してみたら?(ParentFont=trueの状態で)

909 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 23:49:09 ]
>>908
返事ありがとうございます。
this->Fontでは表示は崩れませんでした。
ただ、CharsetはシフトJISになっていました。
これによって位置がずれたりするのでしょうか?

910 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 16:21:09 ]
>>909
charsetが影響するよ。実行時環境のcharsetが特定できないなら、
好みのフォント設定後、this->Font->Charset = Screen->Font->Charset
でいいんじゃないかな。

英語XPでも、言語オプションの非ユニコードアプリを何語と解釈するかを「日本語」に
セットすることで日本語XPと同じ表示にできるよ(フォントがインストールされていれば)



911 名前:デフォルトの名無しさん [2009/01/26(月) 16:04:21 ]
アプリを起動するときvcl60.bplが見つからない。のエラーが出るときは、
「共有RTL DLLを使う」のチェックを外してコンパイルすると
vcl60.bplをいっしょに配布しないで良いですが、
hoge.dllファイルを配布しない方法はないでしょうか?

ttp://me.me.tokushima-u.ac.jp/~miw/H8/pukiwiki/index.php?BCB%A4%C7%A4%CEDLL%A4%CE%BB%C8%A4%A4%CA%FD
このページ見ると、静的、動的どちらにしてもプログラムの見えるところに
dllファイルを置かないとだめなようですが。

912 名前:デフォルトの名無しさん [2009/01/26(月) 16:37:23 ]
hoge.dllはあなた独自のdllだから一緒に配布しちゃえばいいんでないの

913 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:07:32 ]
>>912
レスありがとうございます。
ttp://www.gesource.jp/programming/bcb/22.html
こういうページもあったのでやってみましたが、dllが同じフォルダにないと
起動したときにエラーでちゃいます。
できるのはbuilderのライブラリだけですか。

いろいろ検索してるとgccのページが出てくるんですが、
静的リンクでコンパイルするとサイズが大きくなると書いてあったので
てっきり実行ファイルの中にライブラリが埋め込まれる感じで
ライブラリが要らなくなるものだと思いました。

静的ライブラリも動的ライブラリもいっしょに配らないとだめで、
ロードされるタイミングだけなんですね。

914 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:43:42 ]
自作でDLLを作成して呼び出すようにしたのが悪いんだろ
DLLも全部一緒くたに中に書いてしまえ

915 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:45:34 ]
もしかしてスタティックリンクライブラリとDLLの区別がついてないんじゃないか

916 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:46:35 ]
ていうか、DLLのソースorOMF形式のobjまたはlib(インポートライブラリじゃなくてスタティックリンクライブラリのほう)はないのか?
それがあるならプロジェクトにobjやlib放り込めばDLLいらないんだが。

917 名前:911 mailto:sage [2009/01/26(月) 18:32:24 ]
>>914-916
レスありがとうございます。

>インポートライブラリじゃなくてスタティックリンクライブラリのほう
なるほど、検索すると出てきました。拡張子が同じでも本物と
ちょっと違うのがあって、implibで作ったのはインポートライブラリ。
スタティックリンクライブラリを作ってやってみます。

918 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:59:45 ]
リストボックスに入りきらない場合、水平スクロールバーを出したいのですが、どのように設定したらよいのでしょうか?

919 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:31:42 ]
LB_SETHORIZONTALEXTENT

920 名前:デフォルトの名無しさん [2009/02/19(木) 11:52:00 ]
c++builderって指名ユーザーライセンスという形態を取っているみたいですが、
自宅用に買ったc++builderを会社のマシンに(もちろん使うのは自分のみ)
インストールして使うのは有りなんでしょうか?




921 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 12:06:50 ]
>>920
ありでしょ。
不安なら問い合わせてみれば?

922 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 20:42:32 ]
アカデミックからスタンダードにライセンスをアップグレードすることって出来ますか?







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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