08/01/16 00:04:00
>>356
TXPManifestをパレットからフォームに適当に配置する
358:デフォルトの名無しさん
08/01/16 00:56:43
>>357
ありがとう
もうCodeGearについていく
359:デフォルトの名無しさん
08/01/16 08:20:08
俺も
360:デフォルトの名無しさん
08/01/16 13:36:25
C++Builder 2007ではその必要すらないのだが
361:デフォルトの名無しさん
08/01/16 22:17:55
シリアルポートからのオン信号とオフ信号を受信してその間の時間を表示するだけのプログラムを
作りました、最大でも約5秒程度です、パソコンによっては遅くカウントされてしまいます。
いろいろなパソコンで試して見ましたが、パソコンのスピードやWIN2000 win xp とか関係なく
正しく計測されるパソコンもあります、何かパソコンの設定のような気もしますが
どなたかわかりますか? c++builder5 pro で作ったプログラムです。
362:デフォルトの名無しさん
08/01/16 23:03:39
>>361
> シリアルポートからのオン信号とオフ信号を受信して
受信処理はどうなってるの?というかオン信号とオフ信号って?
> その間の時間を
どうやって取得してる?
> 何かパソコンの設定のような気もしますが
まず自分のコードを疑おう。
> どなたかわかりますか?
エスパー求むってこと?
363:デフォルトの名無しさん
08/01/16 23:28:12
>>362
説明不足でした。
特定コマンドをオン信号 オフ信号として判断してます。
364:デフォルトの名無しさん
08/01/16 23:41:13
このスレには超能力者は存在していない。
阿呆の見本なら居るようだが。
365:デフォルトの名無しさん
08/01/17 07:40:26
>>363 キミが困ってるのは時間表示の結果が思うようにならないって事なんだろ?
試しに複数の方法で計測してみたらどうだ?
1、VCL Now() 関数の差
windowsAPI
2 GetTickCount()の差
3 GetMessageTime()
4、timeGetTime()
5、QueryPerformanceCounter()/QueryPerformanceFrequency
366:デフォルトの名無しさん
08/01/17 08:37:09
>>365
親切に対応して頂き有り難う御座います。
試してみます。
367:デフォルトの名無しさん
08/01/17 09:51:17
あとはシリアルポートの通信速度の設定とか
368:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/19 19:54:10
CodeGear C++Builder2007の評価版を使っています。
BCB5で作ったソースを読み込み実行すると
パラメータSenderは一度も使用されないと警告がでます。
気になります。
警告を外すのもなんですし。
警告が55もだされるのもいやなんですが。
みなさんはどんな感じなのでしょうか?
void __fastcall TForm1::Button8Click(TObject *Sender)
ちなみに呼び方はBCB7でOK?
370:デフォルトの名無しさん
08/01/19 20:43:28
C++Builder(BCB7ではなくC++Builder2007かBCB11だと思う)を持ってないんであてずっぽなんだけど、
void __fastcall TForm1::Button8Click(TObject *)
{...
とかパラメータを型だけにして仮引数名を書かないってのはだめですか?
371:デフォルトの名無しさん
08/01/19 20:51:06
(TObject *)
がっつり怒られました^^;
372:デフォルトの名無しさん
08/01/19 20:55:05
あ、cppだけSenderを消したらコンパイル通りました。
いろいろやってみます。
Senderってなんだっけ?
調べてみます。ども、助かりました。
373:デフォルトの名無しさん
08/01/19 21:01:26
自己解決
timeGetTimeの戻値を加算で出来ました。
374:370
08/01/19 21:06:48
Senderはそのイベントを起動したオブジェクト。この場合はButton8へのポインタが入っている。
375:デフォルトの名無しさん
08/01/19 21:06:59
SenderのほかにShiftとかX・Y・Buttonとかあったので、
消したら警告はきれいさっぱり。
ほんとにいいのか?ま、いいか
376:デフォルトの名無しさん
08/01/19 21:20:42
>>374
了解です。
377:デフォルトの名無しさん
08/01/19 21:45:26
>>373
完全にオーバースペックになるけどパフォーマンスカウンタ使うと恐ろしい精度で計測できるよ
378:370
08/01/19 22:17:20
使わないパラメータは名無しでおk
379:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/21 16:43:01
LoadImageでサイズ指定してみては?
381:デフォルトの名無しさん
08/01/21 19:55:02
Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。
プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
今になって分かりました。
彼らもまた、理解できていなかったのです。
プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
(何といったって、参考にしようとする市販の本さえ、 きちんと説明してくれていないのですから、
その証拠にC言語の学習で悩む人がどんなに多いことか)
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
宣伝と言ってしまえば、そうなってしまうかもしれませんが、ひとりでも多くのプログラマを救いたい。
プログラムの世界そのものの実力を底あげに貢献し、
無意味なバグに、残業したり、悩んだりして欲しくないのです。
興味がある方はどうか、下のサイトをみてみてください。
URLリンク(mori.eco.to)
382:デフォルトの名無しさん
08/01/21 21:42:30
日本語でおk
383:デフォルトの名無しさん
08/01/21 21:49:20
そろそろひろゆきの目に止まって多額の広告料金請求されっぞ
384:デフォルトの名無しさん
08/01/22 00:03:25
>379
ExtractIconEx
385:デフォルトの名無しさん
08/01/22 00:03:53
ごめん。リソースからなら違うや
386:デフォルトの名無しさん
08/01/22 00:14:57
>>381
おまえ、2chに宣伝出したら、広告料すごいぞ?
最初にレス書いた時の許諾事項は読んだよな?大丈夫なのか?
387:デフォルトの名無しさん
08/01/22 10:07:36
私の年収は10億万円なので大丈夫です。
388:デフォルトの名無しさん
08/01/23 00:33:41
俺の年収は一兆億円だもんね!
389:デフォルトの名無しさん
08/01/29 03:30:36
TForm1->Release;
としたあと、その開放完了をWaitForSingleObjectのように低い負荷で待ちたいと考えています。
どのようにすればよいでしょうか。
よろしくお願いします。
390:デフォルトの名無しさん
08/01/29 07:50:02
他のスレッドで待ちたいの?
どっちにしても、メインスレッドでメッセージポンプ回してやらないとPostMessage
しただけじゃいつまでたっても終了しないよ。
391:デフォルトの名無しさん
08/01/29 10:22:48
おしえてください。
下記のように定義して、abcの要素数分(5個)をdefの大きさ(x)にしたいのですが
abcを書き換えても、xが自動的に決まるように書くにはどう記述すれいいですか。
AnsiString abc[]={
"111.",
"222",
"333",
"444",
"555"
};
int def[x];
392:デフォルトの名無しさん
08/01/29 12:34:46
>>391 こういう風に。
URLリンク(blogs.wankuma.com)
393:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/29 17:14:23
BDS2006で問題なかったプロジェクトが
2007でコンパイルしたらリソースリークが発生した。なんで?
sys\sysutils.pasの何行目とか表示してるけど、このファイルどこにあるの?
エディタのメッセージからは開けなかった。環境変数がおかしいのかな?
395:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/29 19:13:23
::ShellExecute(0, "open", "sndvol32.exe", 0, 0, SW_SHOWNORMAL);
397:389
08/01/29 21:04:42
>>390
ありがとうございます。
DLLを作っているのですけれども、ホストの終了時に呼ばれる関数内でフォームを解放し、それが完了したらホストに値を返すようにしたいです。
だから別スレッドでは無いと思います。
398:デフォルトの名無しさん
08/01/29 21:06:13
>>396
レス感謝です。
実は先ほどボンヤリとsystem32フォルダを眺めていてsndvol32.exeを見つけ
WINEXECで開けました。
メインのボリュームだけで良かったんだけど、取り合えず良しとします。
最終的にはアプリ内の自作スライドでこのマスター・ボリュームをコントロール
したくてWin32 API プログラマーズ リファレンスと格闘中です(^^;)
399:デフォルトの名無しさん
08/01/29 23:23:07
>394
FastMMで詳細を表示させてみたら?
400:394
08/02/01 21:51:01
すまん。俺のプログラムミスだったらしい。
原因はよくわからんが、同じ処理を2回やってたのがまずかったらしい。
AnsiStringに数字を入力するときにエラー処理として
try{
edit->Text.ToDouble();
}catch{
edit->Text="1.0";
}
みたいなコード書いてて、この処理の後に別の関数呼ぶんだけど
同じような処理の後、描画の処理になってたのを
このコードの別の関数を呼ぶ場所に描画の関数を書いたらエラーは出なくなったよ。
何でエラーが出たのかさっぱりわからん。
とりあえず自己解決しました。
FastMMはこれから作るプログラム全部に導入しようと思います
ありがとう。
401:デフォルトの名無しさん
08/02/06 14:17:19
OpenMPは使えますか?
402:デフォルトの名無しさん
08/02/07 06:40:37
使えますん。
403:デフォルトの名無しさん
08/02/16 13:24:18
AnsiString s;
AnsiString t="";
s.printf("t=%s",t);
とすると、s が "t=(null)"
となってしまいます。
この(null)を出力させないようにするには、
s が "t="となるようにするにはどうすればいいでしょうか。
404:デフォルトの名無しさん
08/02/16 13:43:33
s.printf("t=%s",t.c_str());
405:デフォルトの名無しさん
08/02/16 14:28:37
>>404
早々に、さんくすです。
406:デフォルトの名無しさん
08/02/27 10:05:06
TubroC++のIDEでhとcppを切り替えるタブが下に付いているんだけど
上に持って来ることは出来ますか?
なんか使いづらくて
407:デフォルトの名無しさん
08/02/27 12:07:37
そんなことよりCtrl+F6押そうぜ!
408:デフォルトの名無しさん
08/02/28 01:06:00
Ctrl+F6は窓使いの憂鬱で別のキーに設定して使ってます
昔のバージョンでは1発で目的のファイルを開けたのに
つかいにくく感じるのは自分だけなのか
409:デフォルトの名無しさん
08/03/02 15:40:26
コンポーネントパレットが見えなくなったのですが
修復できる方法はないでしょうか
410:デフォルトの名無しさん
08/03/02 17:55:19
レジストリのみのインストールは?
411:デフォルトの名無しさん
08/03/02 17:56:04
メガネ買って来い
412:デフォルトの名無しさん
08/03/04 09:56:40
はてな???
プログラム上からのフォルダーのリネーム
ってどうやるんでしょう?
環境XP+BCB++V5。手段は問いません。
413:デフォルトの名無しさん
08/03/04 10:30:12
>>412
Sysutils::RenameFile(const AnsiString OldName, const AnsiString NewName);
414:デフォルトの名無しさん
08/03/04 19:57:19
>>413
レス有難う
ファイルじゃなくてフォルダ
(ディレクトリ)のリネームなんですよ
RenameFile(a,b)ではエラーになりますね。
ヒントなのかな・・・読めない・・?
415:デフォルトの名無しさん
08/03/04 21:02:04
どんなエラー出る?
416:デフォルトの名無しさん
08/03/04 21:18:06
ありがちなところだと、パス名含めてフォルダ名が長すぎ
お手軽にMoveFileのUnicode版使えば?
417:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/04 22:40:53
Image->Picture->Bitmap->PixelFormat
でいいんじゃね?
419:デフォルトの名無しさん
08/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とは書いていないのですが、最新と思ってます。
参考に以下のサイトを参考にしましたが、
うまくいきません。情報があれば教えてください。
URLリンク(www.gesource.jp)
420:デフォルトの名無しさん
08/03/05 00:57:03
URLリンク(dn.codegear.com)
の追加情報にバージョンの確認方法書いてあるからまずはそれをチェックしてみれ
421:デフォルトの名無しさん
08/03/05 01:14:29
お世話になります
追加情報
1. このパッチを適用した後も、バージョン情報ダイアログに表示されるバージョン番号は変わりませんが、
bin ディレクトリにあるファイルのタイムスタンプは、11:02になります。
bds.exeが4:04でした。
インストール4回目だわさorz
あしたやってみます。
インストールキャッシュの有無の確認方法ってありますか?
また、インストール時キャッシュの保存ってあったっけ?
情報ありがとうございました。
422:417
08/03/05 19:44:28
>>418
出来ました!ありがとうございます。
しかし、同じコードを書いた別のプロジェクトがあるんですが、それは24bitのビットマップで保存されているんですよね。
imageコンポート上かどっかで設定が出来るんですかね
423:デフォルトの名無しさん
08/03/05 21:43:12
TImageって無駄に冗長だからなぁ
424:デフォルトの名無しさん
08/03/05 22:48:52
ども。
CG32.DLLの件のものです。
意気揚々とアンインスコに取り掛かり、
せいぜい1h程度と思いきや2h以上orzで、
再インスコで以下のキャッシュの削除の有無の
選択画面を期待しながら「次」を押すと
URLリンク(support.codegear.com)
そんな画面が出ずにガンガン突き進んで
無事?完了
で、なぜキャッシュの運用を聞いてこないか
理解できない。
ちなみに、インスコプログラムのバック画像は
グリッド状のドーム天井を背景に
パルテノン神殿っぽい建物の画像で、
URLリンク(support.codegear.com)
は12345といったプログラムコードの背景なので・・・
つかれた。情報あれば、教えてください。
425:デフォルトの名無しさん
08/03/05 23:25:24
某のサポートに問い合わせた方がいいような気もする。
無料インストールサポートあったでしょ。たしか。
426:デフォルトの名無しさん
08/03/06 10:09:31
そうですね。レスありがとうございました。
427:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/11 01:03:08
くだスレなんで思いつきだけど
OpenProcess() の戻り値とOSの関係とか、権限とかはOK?
430:デフォルトの名無しさん
08/03/11 09:19:33
>>427
ShowMessage("if(!hWnd)");//デバッグ用//ここにhWndの値をShowMessageするにはどうすりゃいいんだ?
↓
IntToStr(hWnd) or IntToStr(hWnd) or AnsiString().sprintf("%08X", hWnd)
431:デフォルトの名無しさん
08/03/11 09:28:41
ちょっと待て、なんでOpenProcessの戻り値をHWNDに入れてる。
OpenProcessの戻り値はHANDLE型。
432:デフォルトの名無しさん
08/03/11 09:52:09
BCB6ってUTF8ファイルのコンパイルってできましたっけ?
能とか表があると、gccのコンパイルが失敗するので、ソースファイルをUTF8にしたいんでつよね。
433:デフォルトの名無しさん
08/03/11 10:08:31
どもです。
>OpenProcessの戻り値をHWNDに入れてる。
OpenProcessの戻り値はHANDLE型。
ちょっと見えてきました。
まずは型の勉強をしてみます。
APIの型ってよくわからないんです。
でも、実行では動くのにビルドでは動かない。
ビルドはできるのに。ちくしょう!
夜やってみます。キャストの件ありがとうございます。
434:デフォルトの名無しさん
08/03/11 12:53:33
OpenProcess()の直後
GetLastError()を調べたところ、
5が帰ってきました。
p://onegland.hp.infoseek.co.jp/wincgi/help/winerror.txt
によると5は
5: アクセスは拒否されました。
とあり、悲しい限りです。
なんらかの対策はないでしょうか?
435:デフォルトの名無しさん
08/03/11 12:56:41
OS側が拒否しないようにセットアップしておく。
436:デフォルトの名無しさん
08/03/11 14:36:34
OpenProcessで要求するアクセス権を必要最小限に
437:デフォルトの名無しさん
08/03/11 19:34:26
dwDesiredAccessの値を全部試してみましたが、
だめでした。
「ウインドウハンドル ファイル名」でググッて
実装しているんですが。
GetForegroundWindowして、希望のexeがトップかどうかを
調べてるだけなんです。。。
ほかにいい方法ありませんか?
あきらかにAPIの問題だけど、あのスレ結構きついんだなぁ。
BCBしかわからんし。すれ違いかな?しつこくて申し訳ないです。
438:デフォルトの名無しさん
08/03/11 19:58:21
というか、何がしたいのか全くわからん
439:デフォルトの名無しさん
08/03/11 20:09:03
アクティブなウインドウが特定のアプリかどうかを
調べたいのです。
そのため、GetForegroundWindowでウインドウハンドルを求めて、
アプリ名を検出し、特定のアプリかどうかの文字列判定をしています。
というわけで、アプリ名を知りたいのではないのです。
具体的には、作ってるのはユーティリティで、特定のアプリを
操作しているときに、激しく自前ソフトを実行し、
非特定アプリを操作しているときは、特定のアプリかどうかの
判定のみを実行するのです。ぅ~ん、うまくいかないなぁ。
実行とビルド実行でこれだけ差がでるとつらいなぁ。
440:デフォルトの名無しさん
08/03/11 20:29:05
うちの似たようなことしてるソースだとこれで動いてるけど
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, pid);
441:デフォルトの名無しさん
08/03/11 20:44:04
>>440
おみごと!
どうにか動きました。よくわかんないけど。
いろいろありがとうございました。
442:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/11 21:09:03
ども。参考にさせていただきます。
9xにも対応させたいし。って対応可能??
では。
444:デフォルトの名無しさん
08/03/12 01:15:57
9xはProcess32First/Nextでフルパス返してくる(NT系はファイル名のみ)
NT系でフルパス取るにはやっぱりPSAPIで取らないとだめ。
あと9x対応にするにはGetModuleFileNmaeExとEnumProcessModulesをLoadLibrary/GetProcAddressでロードしないとエラーが出る。
445:デフォルトの名無しさん
08/03/12 02:01:47
質問です
TListViewにて
ListView1->ViewStyle=vsReport;にして
ListView1->Columns->Items[0]->Alignment=taRightJustify;
としても、文字列表示が左寄せのままです。
他の列はちゃんと右寄せに表示されます。
先頭列を右寄せで表示するにはどうすればいいでしょうか。
446:デフォルトの名無しさん
08/03/12 06:14:06
TValueListEditorコンポーネントの行数設定は、どうすればできますか?
447:デフォルトの名無しさん
08/03/13 01:31:11
>445
最初のカラムのAlignmentが無効なのはコモンコントロールの仕様じゃなかったっけ?
448:デフォルトの名無しさん
08/03/20 20:01:53
リストボックスをコンボボックスのように一行で表示して
プルダウンリストで表示するプロパティを探しているのですが、
わかりません。教えていただければ助かります。
リストボックスでなくてもいいです。
コンボボックスのように入力は受け付けたくありません。
例としてはIEのインターネットオプションのプログラムタグの
HTMLエディタや電子メールといったリストボックスです。
449:デフォルトの名無しさん
08/03/20 20:25:27
コンボボックスのStyleプロパティにcrDropDownListで問題あるの?
450:デフォルトの名無しさん
08/03/20 20:28:39
OKでした。節穴でした。
ありがとございました。
451:デフォルトの名無しさん
08/03/20 22:39:55
テキストファイルを読み込ませるにはどうすればいいんですか?
今までGCCでやっていたときには同じフォルダにテキストファイル
おいておけばよかったんですが
Turbo C++に変えてからは同じフォルダに置いてもできません
452:デフォルトの名無しさん
08/03/20 22:50:54
カレントディレクトリ?ファイル名は絶対パスで扱うほうが間違いないと思うけどね。
453:デフォルトの名無しさん
08/03/20 23:22:49
>>452
できました
テキストファイルをプロジェクトファイルにおいていました
実行ファイルはDebug_Build内に作られるんですね
454:デフォルトの名無しさん
08/03/21 00:43:11
WinMainの先頭に
SetCurrentDirectory(ExtractFileDir(Application->ExeName).c_str());
とか書いておけばいい
455:デフォルトの名無しさん
08/03/21 23:52:20
それはちょっと…。カレントディレクトリはいつ変更されるかわからんから。
456:デフォルトの名無しさん
08/03/26 01:10:47
win2000でBCB6を使用しています。
TListViewでチェックボックスを表示した場合とTCheckListBoxに表示される
チェックボックスでは見た目が違うのですが(TListViewに表示される方が枠が黒く太い)
これをTCheckListBoxで使われているようなチェックボックスに変える簡単な方法は
ないでしょうか?
457:デフォルトの名無しさん
08/03/27 09:12:23
教えてください。
ダイアログボックスでOKボタンが押されたときに、TEditの内容が未入力だったら
TEditにカーソルを持っていき、入力をしてもらうようにしたいと考えています。
カーソルを持っていくには、
Edit1->SetFocus();で出来たのですが
OKボタンがおされたときに、OKBtnClick(TObject *Sender)で
Edit1のなかみを調べて、何も入っていなければ
Edit1->SetFocus();を実行しても、ダイアログが閉じてしまいます。
これは、ボタンにModalResult=mrOkを指定しているからだとは思います。
OKボタンがおされたときに、Edit1がカラならEdit1へ
ちゃんと入力されていれば、そのままダイアログを閉じたいのですが
どうすればよいでしょうか。
458:デフォルトの名無しさん
08/03/27 09:23:51
if (Edit1->Text.IsEmpty()) {
Edit1->SetFocus();
ModalResult = mrNone;
}
459:デフォルトの名無しさん
08/03/27 09:30:42
TForm::OnCloseQueryで中身をチェックする
460:デフォルトの名無しさん
08/03/27 11:18:26
>>458
>>459
できました。
どうもありがとうございます。
461:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/04 08:04:16
index!=0 ? str.printf("%d",2) : str.printf("%d",3);
463:デフォルトの名無しさん
08/04/04 08:36:01
>>462
できました。ありがとうございます。
すいませんがもう一つ教えてください。
if(index!=0)
str.printf("%d",a);
else
str="あいうえお";
の場合はどうすればよいでしょうか。
index!=0 ? str.printf("%d",a) : str="あいうえお";
ではエラーになってしまいます。
464:デフォルトの名無しさん
08/04/04 08:46:40
型を合わせる
index!= 0 ? (void)str.printf("%d", a) : (void)(str = "あいうえお");
465:デフォルトの名無しさん
08/04/04 08:58:40
>>464
なるほどー
すごい勉強になりました。
E2034 'AnsiString' 型は 'int' 型に変換できない
というエラーの意味が全然わからなかったのですが、
三項演算子は、両方で同じ型にしないとダメなんですね。
どうもありがとうございます。
466:デフォルトの名無しさん
08/04/04 12:25:42
てゆーかさ、普通は
str = index != 0 ? "AAA" : "BBB";
とか
str.printf("%d", index != 0 ? a : b);
と書くんだよ。
あと、コンストラクタの初期化リスト等、どうしても「式」が必要な場所とか。
だから、「同じ型」の「式」が並ぶのが当然なの。「式文」じゃないから。
467:デフォルトの名無しさん
08/04/04 14:06:01
質問ですが、VSSとBCBを連携させることはできますか?
468:デフォルトの名無しさん
08/04/04 15:49:54
連携ってどういうふうに?
相互にobjを使うのは形式が違うから誰か変換ツール作らないと無理だけど
同じC++言語だから変換する意味無いでしょうから誰も作らない。
469:デフォルトの名無しさん
08/04/04 16:11:21
Visual SourceSafe ?
470:デフォルトの名無しさん
08/04/04 16:12:28
CVSならコンポあった気がしないでもない
471:デフォルトの名無しさん
08/04/10 01:04:43
まさかC++の方もフリーカーソルだったりしますか?
472:デフォルトの名無しさん
08/04/10 08:13:59
モチロンソウヨ
473:デフォルトの名無しさん
08/04/10 21:15:44
絶望した
474:デフォルトの名無しさん
08/04/11 01:34:37
GExpert?
475:デフォルトの名無しさん
08/04/14 15:13:54
C++Builder2007で開発をしております。
C++Builder6で作られたプロジェクトのビルドができません。
エラー内容は以下の通りです。
[BCC32 エラー] functional(135): E2093 < 演算子が使われたがクラス string には定義が存在しない。
どなたか教えて頂けますか。
476:デフォルトの名無しさん
08/04/14 16:19:18
>>472
いい事言うなあお前。
みんなが頭じゃわかっててもなかなか実践できない事を口に出して言えるなんざ大した自信だよ。
それで出来てなかったらあのインチキ占いのバアさんと一緒だぞお前。
そんなに当たり前の事を言いたかったら尼さんにでもなって言行等しくなってから説教したらどうだ。
477:デフォルトの名無しさん
08/04/14 18:31:56
おk
478:デフォルトの名無しさん
08/04/14 22:25:46
>>475
いい事言うなお前。
479:デフォルトの名無しさん
08/04/15 00:05:26
>475
newsgroupで質問した人?エスパー求むってのもちょっとねぇ。
最小限の再現状況をさらしなさいな。
480:デフォルトの名無しさん
08/04/15 02:33:06
>>475
最低限、エラー行を書けよ。
そんな質問の仕方では誰も答えねえぞ。
481:デフォルトの名無しさん
08/04/15 22:42:20
型のチェックが厳密になってるから
曖昧な表現はすべて確定的表現にしないとダメよ
482:デフォルトの名無しさん
08/04/16 02:50:01
475です。
>>479>>480>>481
質問の仕方が悪くてごめんなさい。
このエラーで困ってたのは
私(とnewsgroupで質問してた人)の関係者なのですが、解決したとのことです。
詳しい事は聞いてないのですが
エラーが出る直前にコンパイル中のCPPに#include <string>を追加したら通ったそうです。
どうもありがとうございました。
483:デフォルトの名無しさん
08/04/17 15:48:42
>482
関係者なんですね?わかります。
ともあれnewsgroupにもなんか書いておいたほうがいいと思いますよ。
484:デフォルトの名無しさん
08/04/18 18:28:24
批判されたら他人のせいにするのは、ゆとりの常套手段。
485:デフォルトの名無しさん
08/04/28 15:47:08
初心者ですが質問させてください。
特殊フォルダを取得したいためSHGetSpecialFolderPath()を使いたいのですが、
定義されていないというエラーが出ます。
#include <shlobj.h>を先頭に挿入すると、さらに大量のエラーが出ます。
どうすれば、よいのでしょうか。
この系統の方法以外で特殊フォルダのパス名を取得する方法はありますか?
486:デフォルトの名無しさん
08/04/28 16:46:18
とりあえず、質問するときにはBuilderのバージョンを書いてね。
それが礼儀っちゅうもん。
#include "shlobj.h"するには、
NO_WIN32_LEAN_AND_MEAN を追加しなければ、二重定義エラーがでる。
設定方法は、Builderのバージョンによりちょいと異なる。
487:デフォルトの名無しさん
08/04/28 23:09:59
>>486 様
すみません、これから気をつけます。
バージョンに関してですが、Turbo C++です。
無料に引きつけられて勉強を始めましたが、国民機時代のTurbo君とは
名前だけが同じだけで後は全く別物でした。(汗)
Turbo C++をもう少し使ってみて、ものになりそうでしたら製品版の
Builderを買おうと思っています。
本題につきまして、
NO_WIN32_LEAN_AND_MEAN を#defineしましたら、問題なく動きました。
本当にありがとうございました。
今後も調べても分からないことを質問させて頂きますのでよろしく
お願いいたします。
488:デフォルトの名無しさん
08/04/28 23:19:36
>>487
こっちのTurbo君などはいかが?
URLリンク(dn.codegear.com)
ちなみに新TurboのExplorerエディションはコンポーネントの追加が出来ない以外はほぼProfessionalと同等の機能持ってた気がする。
ちなみに自作や他作コンポーネントはRAD環境で使えないだけでソース上でnewすればExplorerでも使える。
489:デフォルトの名無しさん
08/05/01 22:57:30
C++Builder6.0で、VBのMidBみたいに指定した場所の文字を抜き出すにはどうやったらいいのでしょうか?
ググったらBuilder3で、専用の関数を作ったりしてましたが・・・6.0でも簡単にはできないのでしょうか?
490:489
08/05/01 23:21:32
あ、文字は半角のみで全角は扱いません
491:デフォルトの名無しさん
08/05/02 00:20:10
文字を?c_str/dataで。文字列を?Copyで。
492:489
08/05/02 00:36:04
ああっ、AnsiStringのSubStringとかで出来たんですね
すいませんでした&ありがとうございました
493:デフォルトの名無しさん
08/05/02 00:44:32
別にAnsiString使わなくても::strncpy(dest, src + 先頭オフセット, 抜き出す長さ);でいいじゃない。
494:デフォルトの名無しさん
08/05/02 02:59:51
AnsiStringがずっと便利じゃん。
バッファとか考えなくてイイ。
495:デフォルトの名無しさん
08/05/02 08:06:11
速度を取るか簡便性を取るかは自由
496:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/07 13:28:29
>>496
まずはVCLリファレンスの読み方でも勉強しようか
TStringGrid
ユニット Grids
結論から言うと宣言されてない型から継承したクラスをどうやって作るのかと。
498:496
08/05/07 13:33:21
すんません、自己解決しました。
#include <Grids.hpp>
これが必要だったみたいです (^^;;;;
ども、お騒がせでした
499:496
08/05/07 13:36:14
>>497
あ、すいません、前後してしまいました
いや、なんかそこらへんのクラスに必要なヘッダってのは最初っから
インクルードされてるもんだと思ってました (^^;;;;
ありがとうございました <(_ _)>
500:デフォルトの名無しさん
08/05/07 13:38:16
>>499
パレットからフォームにコンポーネント置けば勝手にヘッダファイルが追加されるけど、ソース上でのみ宣言だと手動でヘッダincludeしないとダメだお
ついでにtypedefはいらん気もするけど。
501:496
08/05/07 14:09:51
>>500
なるほど、そういう仕組みでしたか。
typedef しとかないと、宣言のときに一々 class xxxx って
頭にclassをつけなきゃいけなくなると思っていたのですが、
あれ?typedef しなくても、「 class 」って記述抜きで通っちゃいました
なんでだろう????
色々とありがとうございました <(_ _)>
502:デフォルトの名無しさん
08/05/08 10:21:49
そして、ドナドナ
503:デフォルトの名無しさん
08/05/09 06:35:46
unixのソースをPC上に移植したいと考えています。
・別階層に同名のファイルやフォルダって作れますか?(
・一気にサブフォルダを含めてプロジェクトに作成する事はできますか?
(一つずつ、フォルダを掘って作成しないといけませんか?ドロップできなくて..)
504:デフォルトの名無しさん
08/05/09 17:04:01
コンポーネントのアンインストール方法
コンポーネントを試作中なのですが
コンポーネントをインストールした状態でのテストをしてみたいと考えています。
(オブジェクトインスペクタがどんな感じになるかとか。。。)
ということで
1.テストコンポーネントのインストール
2.コンポーネントのテスト
3.テストコンポーネントのアンインストール
4.コンポーネントの手直し
という手順を繰り返したいのですが
3.をどうやってやったらよいのかがわかりません
bcb6proです。
ご指導の程よろしくお願いします <(_ _)>
505:デフォルトの名無しさん
08/05/09 17:12:20
パッケージのインストールのダイアログで該当パッケージのチェックボックスを外すでいいんじゃないの?
てかアンインストールしなくてもテスト>手直し>コンポのビルド>インストールで問題ない。
506:504
08/05/09 17:55:26
>>505
なるほど!それでやってみます
ありがとうございました <(_ _)>
507:デフォルトの名無しさん
08/05/09 18:08:30
複数のフォームで同一の関数を使うにはどうしたらよいのでしょうか?
ヘッダファイルのpublicに入れるだけではダメですよね?
ソフトはBCB6.0Proです。
よろしくお願いします。
508:デフォルトの名無しさん
08/05/09 18:35:37
入門書嫁としか
509:507
08/05/10 00:51:44
調べたところ、以下の本が良い、とのことで注文してみましたが・・・載っていますでしょうか?
田舎なので本屋に置いてないので、見てから買うことが出来ないため、来るまでわからないんです。
URLリンク(www.amazon.co.jp)
%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:デフォルトの名無しさん
08/05/10 13:26:42
とりあえず関数の宣言が書いてあるヘッダファイルを
全部のフォームのソースにインクルードしときゃいいんじゃね?
511:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/05/10 15:49:09
>>510
それはやっているんですけど、動かないので・・・。
メインのフォームに書かれている関数なので、そのヘッダファイルは他のフォームでもインクルードしているのですが、
未定義の関数として見られてしまうんです。
514:デフォルトの名無しさん
08/05/10 16:40:20
TEdit から継承されたBorderStyleに値を突っ込めばええだけだろ。
515:デフォルトの名無しさん
08/05/10 16:51:18
>>513
メインフォームのメンバ関数として定義してりゃそりゃ見つからんだろ。
普通の関数にしないと。
516:デフォルトの名無しさん
08/05/10 18:26:48
>>514
なるほどっ!!
// this->BorderStyle = FBorderStyle; // ←これじゃBorderStyleが変わるわけがない
TEdit::BorderStyle = FBorderStyle; // ←こっちでバッチリ!!
オーバーライドされる前のやつってのも、こうすれば使えるんっすね!!
ありがとうございましたぁーーーーっ!!!
517:507
08/05/10 18:55:18
>>515
あー、そゆことですか
ありがとうございました
518:デフォルトの名無しさん
08/05/10 19:38:35
>>517
C++Builderの入門書じゃなくてC/C++そのものの入門書読むことをすすめとく。
STLもvectorくらいは最低覚えとけ。
519:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 22:06:01
動的にフォームを出したいのですが、
TfmOption *fmOption = new TfmOption(this);
fmOption->ShowModal();
delete fmOption;
どうもうごきません。
それとモーダルもしたくないのですが、
普通にメインウィンドウと同等のウィンドウとしたいのです。
オプションで初期にはロードしたくありません
523:デフォルトの名無しさん
08/05/18 07:43:32
>>522
TForm::Visibleをチェック。
新規作成したフォームはデフォルト値がfalseになってる。
524:デフォルトの名無しさん
08/05/18 10:04:48
ShowModal();すると、自動的にVisible=trueに設定されるから
Visible=trueは必要ないハズ。
>>522は基本的にOKだと思う。
動かないとは、表示されないという意味なのだろうか。
モーダルにしたくないなら、
fmOption->Show();
525:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/18 14:43:57
ネット見てもShowModalしか出てこなくて。
527:デフォルトの名無しさん
08/05/18 19:21:12
で?
528:デフォルトの名無しさん
08/05/19 01:06:04
つかC/C++の基本だけでも勉強しないとにっちもさっちもいかなんじゃないかな。
その気がないならDelphiのほうがまだましだと思う。
529:デフォルトの名無しさん
08/05/19 17:06:13
>>525も低脳だが、
>>528の方がもっと低脳
の件について
530:デフォルトの名無しさん
08/05/19 19:49:26
なんでー?
531:デフォルトの名無しさん
08/05/19 19:58:38
>525
ヒント:ヘルプ
532:デフォルトの名無しさん
08/05/20 17:59:51
>>529
× の件
○ な件
533:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/20 18:25:01
Edit->Text = AnsiString().sprintf("%02X", buf[0]);
535:533
08/05/20 18:45:00
>>534
教えて頂きありがとうございます。長い間のモヤモヤがとれて
すっきりしました。
536:デフォルトの名無しさん
08/05/20 19:39:56
char[100]とかで配列持ってて、
AnsiStringで受け取った入力を、char[80]から入れたいんだけど、どすればいいんすか?
537:536
08/05/20 19:41:10
連投すんません
入力されるブツは、日本語ダス
538:デフォルトの名無しさん
08/05/20 19:58:30
>>536
strcpy
539:デフォルトの名無しさん
08/05/20 20:22:05
エディトボックス入力(日本語を想定)のAnsiStringの文字列長ってどうやって調べるの?
540:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/22 21:09:34
ちなみに、BCB5で同じことをすると、
Excel_XP・・・となっている部分が
Excel_2K・・・となり
問題なくコンパイルは通ります。
542:デフォルトの名無しさん
08/05/22 21:12:15
>>540
ヘッダじゃなくてライブラリファイルが抜けてるっぽいね。リンカエラーだから。
543:デフォルトの名無しさん
08/05/26 22:29:09
imageコンポーネントでTColor型で絵を描いていきたいんだが、
BMP形式で保存すると32bitになりますよね?
そこで、PixcelFormat で pf24bitを指定すると、なぜか書けないんです。
そこで、あえて32bitを指定してもなぜか書けずに特に指定せずに
image->picture->~ = (TColor)0xffffff
だと書ける。
ただ、保存するのは24bitのBMPにしたいんだが、ググると
ColorToRGBという関数があるみたいなんですが、
これの使い方教えて貰えませんか?ヘルプ見ても、いまいちわからなくて。
また、この関数使うのより簡単に24bitBMPへ保存できる良い方法が有れば伝授してください
544:543
08/05/26 23:01:57
すいません。
環境は、Builder 2006です。
545:543
08/05/27 19:08:00
自己レス
Canvasに書いてから、pf24bitを指定する事で書けました。
どうやら順番があったようです
546:デフォルトの名無しさん
08/06/08 14:40:21
bcb2007を使っています。
dll内にフォームを用意したいのですが
うまくいきません
Form1=new TForm1(this);Form1->ShowModal();delete Form1;
うまく呼び出す方法はあるのでしょうか?
547:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/17 03:43:57
builder6.0を使っている初心者です。
恐縮ですが質問させてください。
プログラム上で動的にコンポーネント(TPanel)を配置しています。
そのコンポーネントにOnDragDropとOnDragOverイベントを取得させて
動作させたいのですがやり方がよく分からずうまくいきません。
初歩的な質問で申し訳ありませんが教えて頂けないでしょうか。
よろしくお願いします。
549:デフォルトの名無しさん
08/06/17 08:15:26
抽象的すぎて意味わからんがな(´・ω・`)
550:デフォルトの名無しさん
08/06/17 10:23:37
C++Builder6 をつかっています。
だんだんプロジェクトが大きくなってくると、デバッガのインスペクトとかで表示される値が
むちゃくちゃになってきます。回避方法ってないものでしょうか?
551:デフォルトの名無しさん
08/06/17 10:26:58
>デバッガのインスペクトとかで表示される値が むちゃくちゃになってきます。
それは無い。
552:デフォルトの名無しさん
08/06/17 11:24:59
そんな変数無ぇって言われる事はあるな
553:デフォルトの名無しさん
08/06/17 11:26:56
それはプロジェクトの大小じゃなくて、
コンパイラの最適化の結果。
554:デフォルトの名無しさん
08/06/17 11:32:53
そこは置いといて、変になることがあるってことよ
555:デフォルトの名無しさん
08/06/17 11:52:05
BCB6では変にならないお。
プロジェクトにファイルを追加した直後は、ブレークポイントで止まらなくなるけど。
ブレークポイントで止まった後は変数が変になることはない。
556:デフォルトの名無しさん
08/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
08/06/17 12:37:45
ごめん、うちのバージョンは5だった・・・。
コンパイラの最適化OFFで、
if(Instance != NULL)
{
Instance->Data = 3;
}
とかやって、Instance->Data にブレークポイントを設定したとする。
それで、Instance の値を見ると NULL になってることがある。
プログラム自体はちゃんと動くんだけど、デバッガが、グダグダになることがある。
ダイレクトXアプリってのもあるのかなぁ?
あと、これは仕様だと思うんだけど、いつのまにか、TOpenDialog で
マイコンピュータを開くと、なにも表示されなくなった。
558:デフォルトの名無しさん
08/06/17 12:39:14
>>557
多分、6にうpするとそんなことない。
559:デフォルトの名無しさん
08/06/17 12:49:03
>>558
6ってもう買えないよね?
560:デフォルトの名無しさん
08/06/17 12:53:02
あー、新規なら買えるのか。スレ汚しスマヌ。
561:デフォルトの名無しさん
08/06/17 16:40:40
コードガードにバグがある6を今更買うの?
562:デフォルトの名無しさん
08/06/17 16:42:46
5ならコードガード無いんじゃね?
ま、5と6使った自分なら、間違いなく6を選ぶ。
563:デフォルトの名無しさん
08/06/17 17:07:53
5にもコードガードついてるよ。5のコードガードのバグは気づかなかった。
BDS2006 はもってるんだけど、なんかこれもバギーらしいな。
思い切って、2008 がでるまで待とうかとも思ってるんだけどね。
9月ぐらい?
printf デバッグとかもう嫌だよ・・・。
564:デフォルトの名無しさん
08/06/17 18:40:32
デバッガで変数が正しく表示されなくなったら
パソコンを再起動
これ常識。
これで回復する。
自分のプログラムで、どっかぶち壊しまくってるんだよ。
565:デフォルトの名無しさん
08/06/17 18:45:00
9xじゃあるまいし
566:デフォルトの名無しさん
08/06/17 18:52:20
9xなら暴走して落ちるんだよ。
自分で自分のDSをぶちこわしているから変数がヘンになる。
567:デフォルトの名無しさん
08/06/17 19:11:35
今時アプリがどんだけメモリ空間壊したって、PCの再起動なんて必要ないだろw
DSとか言ってるから古い人ぽいけど。
568:デフォルトの名無しさん
08/06/17 19:47:06
じゃあFSとか言えば納得するのか
569:デフォルトの名無しさん
08/06/17 22:13:34
メモリ空間を壊すって事は、Builder の場合、
デバッガ、コードガード、OS、の3つをすり抜けないと無理なんだけど、
そう言う事って出来るの?セキュリティホールみたいな物か?
570:548
08/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:デフォルトの名無しさん
08/06/18 07:39:03
ボタンをドラッグってどんな操作を想定してるの?ボタンはクリックするものなのに。
572:548
08/06/18 12:05:40
>>571
マウスの操作でボタンの座標位置を変更できるようにしたいです。
「自分で追加したボタンを自分の配置したい位置につまんで移動できる」
と言った方がわかりやすいかもです・・・。
OnDragDropイベントではなくOnMouseMoveイベントを使えばもっときれいにできるのかもしれないんですが、
ここではとりあえず「ドラッグで移動して配置する」という操作だけを目的としていたので
イベントとして使いやすいと感じたDragDropを使用しています。
573:デフォルトの名無しさん
08/06/18 22:48:51
いや、だから、ボタンをつまもうとしたらクリックになっちゃうでしょ。
でクリックしようとしたときにちょっとした操作ミスでドラッグで移動になる、と。
そんな自己満足なUIは考え直せって。
574:デフォルトの名無しさん
08/06/18 23:07:01
そんなのレイアウトモード←→通常モードみたいな感じで切り替えれば済む問題でないの
575:デフォルトの名無しさん
08/06/18 23:39:38
もちろんそれでもOKだと思うが。
で所望の動作はWM_NCHITTESTでHT_CAPTIONってのがお手軽。
576:548
08/06/20 02:47:20
>>573-575
ボタンクリックとドラッグ混同の操作ミス等、言われてみたらその通りだと感じました。
アドバイス含め、対処できるように組み直したいと思います。
移動についてはさせることができました。
アドバイス、ご指摘ありがとうございました。
577:デフォルトの名無しさん
08/06/20 15:57:40
>>576
うちも VCL 以外で近いことを以前やったことあるけど、
そのときの実装は何ピクセル以上ドラッグするとドラッグ開始、
っていうふうにしてた。
578:デフォルトの名無しさん
08/06/24 04:30:23
古いプロジェクトをコンパイルすると
-Hr スイッチにより vcl4.h を vcl.h の代わりにインクルードします
っていうメッセージが出るんだけど、このスイッチって何処に記載されてるの?
古いプロジェクトの移行って面倒だね・・・。
579:デフォルトの名無しさん
08/06/30 16:46:20
Vi$taにBCB6をインスコできますか?
580:デフォルトの名無しさん
08/07/01 04:50:20
V$sta捨てれ
581:デフォルトの名無しさん
08/07/01 09:39:37
正直、そうしたいんですが、出来上がったexeのVi$ta検証に必要。
ところで、Vi$taってなぜかXPとマルチブートできませんよね?
582:デフォルトの名無しさん
08/07/01 09:50:06
っリムーバブルフレーム
583:デフォルトの名無しさん
08/07/01 19:26:51
>>579
Vistaの動作検証だけなら開発は2000かXPで。
視覚スタイルは.manifest同梱で対応可。
Vistaアイコン(PNG圧縮256px)はIcoFxで可能。
res作成はVista対応SDKのrc.exeで可能。
584:デフォルトの名無しさん
08/07/01 19:49:26
2000だとVistaなSDKがインスコできない罠が(;゙゚'ω゚'):
585:デフォルトの名無しさん
08/07/01 22:49:40
>>583
そうなのか・・・XPに入れてexeとdllだけ2000にコピーしたから気付かなかったわ。
586:デフォルトの名無しさん
08/07/02 08:57:02
>>583
ビジュアルスタイル対応は、Theme Manager 使った方がいいのでは。
587:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/04 22:56:41
TButtonのキャプションの文字色は変更できません。これはWindowsの仕様です。
もし文字色をシステムに従わないようにしたいのであれば、オーナドローでどうぞ。
589:587
08/07/04 23:06:41
>>588 迅速な回答ありがとうございます
590:デフォルトの名無しさん
08/07/06 01:08:29
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
char *aaa;
aaa = "jpg";
if(aaa == "jpg")Button1->Caption = "jpg";
}
C言語の基本的なことだとはわかっているのですが・・・
これがtrueにならない理由って何でしょう?
基本的すぎるのか、文字列でググっても出てこないのはなぜー
591:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/06 03:08:06
メモリ壊しまくりんぐ
593:デフォルトの名無しさん
08/07/06 04:34:54
リリースビルドならtrueになりそう
594:デフォルトの名無しさん
08/07/06 05:21:36
char* の大きさは4byteだから、 3文字突っ込むとちょうど4byte使用するから
メモリは壊れないのではないのか。
595:デフォルトの名無しさん
08/07/06 05:24:50
operator ==(const char*, const char*) {}
ができないのを今初めて知った(´・ω・`)
596:デフォルトの名無しさん
08/07/08 13:57:48
>>590
if ( strcmp( aaa,"jpg" )==0 ) とすればええんでないの?
"jpg"ってすると、メモリのどっかに確保された4バイト('j','p','g',0)のアドレスを示す。
aaaに格納された"jpg"のアドレスと、ifで比較している"jpg"のアドレスが違うからfalseになる。
597:デフォルトの名無しさん
08/07/08 18:27:30
>>590
char* でやらないで AnsiString でやれば動く。
598:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/10 00:14:17
>>599 ありがとうございます。
601:デフォルトの名無しさん
08/07/22 14:35:51
WindowsXPでBCB6.0を使っています。
URLリンク(homepage2.nifty.com)
上記のサンプルプログラムを自分の環境で実行してみたのですが、以下のエラーが出てしまいます。
[リンカ エラー] 外部シンボル 'GetIfTable' が未解決(D:\ADDRESGET\UNIT1.OBJ が参照)
ソースファイルをダウンロードして実行してみたところ、正常に動作したことから環境は間違って無いと思うのですが・・・。
インクルードファイルも同じにして、オプションのリンカやディレクトリ/条件も揃えてみましたがダメでした。
この場合、何を見たらよろしいのでしょうか?
よろしくお願いします。
602:デフォルトの名無しさん
08/07/22 14:54:57
iphlpapi.libリンクしてないだろ。
bcb/lib/psdkにあるのプロジェクトに追加しる
603:デフォルトの名無しさん
08/07/22 15:01:37
>>602
・・・その通りでした。
インクルードで指定して、エラーも出ていないから必要無いと思い込んでました。
本当にありがとうございました。
604:D
08/07/22 15:12:34
☆ チン ハラヘッタ~
ハラヘッタ~
☆ チン 〃 ∧_∧
ヽ___\(\・∀・)
\_/ ⊂ ⊂_)
/ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄| |
|淡路たまねぎ|/
 ̄ ̄ ̄ ̄ ̄ ̄
605:デフォルトの名無しさん
08/07/22 15:38:51
>>603
コンパイルとリンクに違いについてもうちょっと勉強した方がいい
606:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/25 10:30:26
>>607
AnsiStringを加工に使いたいのですが、挙動を理解しきれてないので・・・。
「URLリンク(homepage1.nifty.com)」で、
>char* c_str( )
>文字列をC言語の char* 文字列で返す。返すのはあくまでも char* 型のポインタであり、
>文字列のコピーが作られるわけではない。従って、受け取った char* 文字列を安全に操作したい場合は strcpy( ) などでコピーすると良い。
と、あるのでコピーしたのですが・・・解釈が違ったのかな?
ポインタとして渡せば動作するのですね。
ありがとうございます。
609:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/25 13:51:01
>>608
解釈が違うと思う。
c_str() で得られたポインタから strcpy 等で
「自分で確保したメモリにコピーする」っていう意味。
そうすれば、自分で確保したメモリの寿命は自分で決められるから。
URLリンク(www.ne.jp)
↑も参照してみて。
611:デフォルトの名無しさん
08/07/25 15:16:04
>>609-610
詳しい解説ありがとうございます。
入門書を見ると、「初心者はAnsiStringを使えば簡単」って書いてあるけど、実は取り扱いには注意しないといけないんですね。
暑くて頭があまり回っていませんが、がんばってみます。
612:デフォルトの名無しさん
08/07/25 15:20:45
>>611
基本的には常に AnsiString を使って、
API とのやりとりや、標準ライブラリの呼び出しだけに c_str() を使う、
って考え方が良いと思う。
613:デフォルトの名無しさん
08/07/25 15:48:01
>実は取り扱いには注意しないといけないんですね。
なことない。簡単。
614:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/25 18:15:00
>>614
よくわからないけど、ファイル自体をスタックに積んでるのかねぇ?
そんなコード見たことがないが。
その辺り調べてみた?
616:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/25 18:48:29
GaussRandom()の前にUniformRandom()が定義されてないからじゃないの
618:デフォルトの名無しさん
08/07/25 18:54:34
>>617 今入れ換えて実行してみたのですが駄目でした。
619:デフォルトの名無しさん
08/07/25 20:02:44
おかしいね、うちはそれコピペしただけの通るよ
math.hのincludeがうまくできてないのかね
620:デフォルトの名無しさん
08/07/25 21:11:48
マルチポストしまくりで解決済みなんでスルーでいいよ
621:デフォルトの名無しさん
08/07/26 21:04:15
>>615 スタックのサイズを大きくしたらいけました。ありがとうございます。
622:デフォルトの名無しさん
08/07/26 21:09:55
>>621
とりあえず載ってるコードがダメダメな気がするから自分で書き直すことをお奨めする
623:デフォルトの名無しさん
08/07/26 22:36:46
コンパイルするとError: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照
とでるのですが、理由がわかりません・・・。
どなたかわかる方お願いします。
624:デフォルトの名無しさん
08/07/27 14:51:31
フォームに配置したTButtonのOnClickイベントを、
実際にボタンを押してではなく、あるメソッド内から呼び出したいのですが
そういうことは可能ですか?
625:デフォルトの名無しさん
08/07/27 15:12:14
TButton::Click()があるじゃない
626:デフォルトの名無しさん
08/07/27 15:43:56
>>625
おかげさまで解決しました。
ありがとうございました。
627:デフォルトの名無しさん
08/07/27 22:16:52
おすすめのエディタ教えてください!
今までC言語を始めよう!というフリーソフトを使ってきました
628:デフォルトの名無しさん
08/07/27 22:17:48
>>627
スレ違い
629:デフォルトの名無しさん
08/07/27 23:24:30
>>627
エディタ部分だけなら2006以降のエディタの方がいいかな
ウィンドウ構成とかは6までのIDEのほうが好きだけど
630:デフォルトの名無しさん
08/08/05 15:25:09
C++Builder6からmecabを使いたいのですが、一週間以上格闘しても光が見えません(涙)
mecabの初期化すら出来ない状態なので何かアドバイス頂ければ嬉しいです。
よろしくお願いします。
631:デフォルトの名無しさん
08/08/08 15:12:29
OpenProcessで使うPROCESS_ALLACCESSマクロだが、定義間違ってね?
VCその他では
#define PROCESS_ALL_ACCESS 0x001f0fff
BCCでは
#define PROCESS_ALL_ACCESS 0x001fffff
になってる。
たぶん>>427の問題もそのせい
こういうバグってどこに報告すればいいん?
632:デフォルトの名無しさん
08/08/08 15:31:13
普通に0x1F0FFFになってるが。
検証コードはprintf("%08X", PROCESS_ALL_ACCESS);
環境は6pro update4
633:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/08 15:38:59
おっと、手元のが古いだけか
駄レスすまそ
635:デフォルトの名無しさん
08/08/09 11:28:57
そういうところまで疑わなきゃいけないんだな、面倒な
636:デフォルトの名無しさん
08/08/09 21:33:14
TEditにある数値を入力して、OnExitイベントで入力された数値を
チェックしてますが、入力値が異常でも、フォーカスが次のTEdit
にうつってしまいます。
よく考えれば当然といえば当然の結果なのですが、どうしても正常値
を入力するまでフォーカスを保持させたいのですが、行き詰ってしまい
ました。
よい解決方法がないでしょうか。よろしくお願いします。
637:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/11 15:56:51
>>638
ビットマップが24bitならBGRの3bytes、32bitならBGRAの4bytes。
640:デフォルトの名無しさん
08/08/11 15:58:52
あと、今のPCだと32bitのほうが一般に処理速度早くなるから注意。
24bitだとワード+バイト転送なのに対し、32bitはダブルワード1回ですむ
641:デフォルトの名無しさん
08/08/11 16:07:26
>>639-640
なるほど、ビットマップの形式によって変わるので処理としては間違ってはいないんですね。
BGRAがあることに気づきませんでした。
ありがとうございます。
642:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/13 23:46:54
実行コンテキストを無視しちゃだめ。メインスレッドに属するコード部分はメインスレッドのコンテキストで
実行する。PostMessageとかSynchronizeとかを使う。
644:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/14 18:47:21
アホな質問をお許し下さい。
Unit1.cppにくっついてるフォームForm1(Unit1.dfm)のMemo1に
Unit2.cppの処理から文字を入れたいときはどうすればよいでしょうか…
VBっぽくForm1->Memo1->Lines->Add(a);みたいにしたら出来るかなーと思ったけど駄目でした
Turbo C++を使っています。
646:デフォルトの名無しさん
08/08/14 18:48:37
Unit2.hppに#include "Unit1.hpp"
647:デフォルトの名無しさん
08/08/14 18:50:14
ファイル→ユニットヘッダーファイルの追加の方が楽か
648:645
08/08/14 19:10:20
おおお
出来ました。ありがとうございます!
649:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/18 00:43:53
それインポートライブラリが悪いか、nidaq32.dll にパスが通ってない、とか。
651:デフォルトの名無しさん
08/08/18 01:24:22
nidaq32.dllがあるフォルダで、コマンドプロンプトから実行したのですが・・・
これってIMPLIBの使い方間違ってます?
652:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/19 09:01:04
setlocale
654:デフォルトの名無しさん
08/08/19 09:09:17
>setlocale
これって何のライブラリになるんでしょ?C++標準?VCL?
それを知らないと、#includeできないので。
あと、getlocaleってのもあるんでしょうか?
655:デフォルトの名無しさん
08/08/19 09:18:02
ついでですが、
localelist
みたいな1式も取れるんでしょうか?
656:デフォルトの名無しさん
08/08/19 09:35:41
setlocaleはswscanfには関係ないと思うんですの。VC2005だとちゃんと動くし。
BCBでも他の文字列ではちゃんと動いてるし。
657:デフォルトの名無しさん
08/08/19 09:50:06
確かにBCBヘルプに
>Standard C++ Library: Class Reference
>locale
ってのがありますね。
これはクラスだからいろいろメソッド使えるかも。
でも、これで切り替えても、
AnsiToUtf8/Utf8ToAnsiのロケールとは無関係なんかなぁ。
あ~、テストプログラム作れば良いんだが、通勤時の暑さのせいでしんどい。
658:デフォルトの名無しさん
08/08/19 23:14:53
>>650
インポートライブラリが悪いって、どのような現象があるのでしょうか?
BuilderのバージョンはBuild10.166ですが・・・
659: ◆jButlJVlzY
08/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:デフォルトの名無しさん
08/08/21 02:12:21
すいません、どなたか>>658についてわからないでしょうか。
正解でなくても、何か参考になるようなことでもいいので意見を下さい。
よろしくお願いします。
661:デフォルトの名無しさん
08/08/21 07:47:42
implib nidaq32.dll nidaq32.lib と引数の順番を間違って実行して、nidaq32.dllが壊れて、その後
implib nidaq32.lib nidaq32.dll と順番を直したけどnidaq32.dllは壊れてるからエラー、とか?
一応本家にbcc用のインポートライブラリがあるみたいだけど。 ↓の一番下のzip
URLリンク(digital.ni.com)
662:デフォルトの名無しさん
08/08/21 20:09:54
>>649
NIDAQmxのDLLはnicaiu.dll見たいだよ?
NIDAQmxをインストールするとc:\WINDOWS\system32あたりにnicaiu.dllがあるはずだから
>implib nicaiu nicaiu.dll
でnicaiu.libを作ってリンクしてみたら?
663:デフォルトの名無しさん
08/08/22 02:33:44
>>661
すいません、一度壊してました・・・orz
>>662
NIDAQではなく、NIDAQmxを使うのですか!!
ありがとうございます、やってみます。
664:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/27 19:58:48
ShowModalでもしておけば?
666:664
08/08/27 20:39:55
>>665
ありがとうございます
667:デフォルトの名無しさん
08/08/28 03:05:24
8点ほど計測して、下の脳波測定のように境目をボカしたいのですが、何か良い方法はありますでしょうか?
URLリンク(www.speedreading.co.jp)
8つの円を描き、全体をぼかすように前後左右の平均を取るように処理してみたところ、何度もやるとものすごく時間がかかるので・・・。
ぼかし処理は下のものを使用しました。
URLリンク(gimite.net)
668:デフォルトの名無しさん
08/08/29 22:15:29
全然ダウンロードできないのですが、今日だけの現象ですか?
URLリンク(update.codegear.com)
ここに何度登録したことか。。。。
669:デフォルトの名無しさん
08/08/29 22:34:00
URLリンク(now.eloqua.com)
サーバーが見つかりません
670:デフォルトの名無しさん
08/08/31 00:08:20
そうだね
671:デフォルトの名無しさん
08/09/06 08:25:00
TurboC++ Professionalは、もうどこにも売ってないのですか?
672:デフォルトの名無しさん
08/09/06 10:46:04
初心者質問すいません
英単語の文字数を数えるにはどうすればいいですか?
673:デフォルトの名無しさん
08/09/06 10:52:49
AnsiString::Length()
674:デフォルトの名無しさん
08/09/06 10:57:35
C++とC#は別物ですか?
675:デフォルトの名無しさん
08/09/06 11:04:33
別物
676:デフォルトの名無しさん
08/09/06 11:15:14
>>675
ありがとうございました。ここではC++という文字をよくみるのに本屋ではC#をよくみたので一緒かなと思いました
ありがとうございました
677:デフォルトの名無しさん
08/09/06 17:27:47
実は # は
++
++
だったんだよ!
678:デフォルトの名無しさん
08/09/07 01:24:48
>>677
C++が一つ増えるなら、
C#は半分だけ増えるっていうイメージなんだけど。
それだと、2つも増えてるな。
679:デフォルトの名無しさん
08/09/07 02:35:29
>>677
その発想は無かったわ
680:デフォルトの名無しさん
08/09/07 17:30:34
エクスプローラの「表示」→「縮小版」みたいに、複数の画像を
サムネイル表示したいと思っています。
URLリンク(www2.ttcn.ne.jp)
を参考にDrawGridを使って実現しようかと思っていたのですが、
DrawGridコンポーネント1個に対して, 1つの画像しか表示できないんでしょうか?
681:デフォルトの名無しさん
08/09/07 23:31:12
サムネイルはListView使っとけ
682:デフォルトの名無しさん
08/09/08 21:57:33
Buliderっていう名前が明らかにマッチョ男性専用ソフトですっていってるようで怖い。
アメリカ人は本当にマッチョが好きだよな。サンフランシスコ。
683:デフォルトの名無しさん
08/09/09 04:41:14
>>681
そうします。ありがとうございます
684:680
08/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:デフォルトの名無しさん
08/09/22 10:04:17
メニュー項目を設定する
TMenuItemのCaptionにて
開く(&O)...
と設定されますけど、
このピリオド3個の意味を教えてください。
686:デフォルトの名無しさん
08/09/22 12:43:51
押すと他のウィンドウが開くって意味がほとんどじゃ?
687:デフォルトの名無しさん
08/09/22 20:03:06
>>685
ピリオドがないのは、処理がすぐ終わるけど
ピリオドがあるのは、ダイアログが出るでしょ。
それだよ。
688:デフォルトの名無しさん
08/09/22 23:25:23
>>686 >>687
れすありがとうございます。
確かに...なのは、ダイアログが開く系ですね。
(& みたいな特別な機能がある訳ではなく
WindowsのUIの作法みたいなものなのですね。
とても参考になりすた。
689:デフォルトの名無しさん
08/09/28 23:08:48
質問です。
TFontのStyleがSet という特別な型だったのですが
設定は、Font->Style << fsBold のようにすれば良いのはヘルプに記載があったのですが
FontにfsBoldが設定されているかを調べる方法がわかりません。
どうすればいいのでしょうか。
690:デフォルトの名無しさん
08/09/28 23:34:45
if ( Font->Style.Contains(fsBold) )
691:デフォルトの名無しさん
08/09/28 23:45:56
>>690
できましたーーー。超ありがとうございます。
692:デフォルトの名無しさん
08/09/29 23:49:18
いろんなほかのプログラムのボタンを押すプログラムを作るにはどうすればいいのでしょう?
具体的には mplayerの再生ボタンや巻き戻しボタンを押したり、mediaplayerの再生ボタンを押したり
その他新しいプログラムの再生ボタンを簡単に登録して押せるようなそんなプログラムを
くみたいのですが。
693:デフォルトの名無しさん
08/09/30 00:17:51
ウィンドウハンドル持ってるコントロールならBN_CLICKEDをPostすればいいじゃない。
メニューバーから操作できる機能なら、コマンドIDをメニューリソース見るか、SPY++やWinspectorでコマンドID調べてWM_COMMANDでPostすればいい。
どっちもだめならSendInputでがんばるしかない。
694:デフォルトの名無しさん
08/09/30 00:18:33
簡単に説明すると、ウインドウを列挙して、中の再生ボタンのハンドルを取る。
ハンドルが取れれば、APIでごにょごにょできるでしょ。
あとはがんばれ。
695:デフォルトの名無しさん
08/09/30 10:50:39
あぁ!そっか、難しく考えすぎてた。
ありがとうございます。
696:デフォルトの名無しさん
08/09/30 20:54:22
質問です。
リストボックスにD&Dでリストボックスにファイルパスを表示する
プログラムをどうすれば言いか教えていただけないでしょうか?
697:デフォルトの名無しさん
08/09/30 22:04:17
をぃ、日本語が不自由な奴よ。
マルチポストはルール違反だぜよ。
698:デフォルトの名無しさん
08/09/30 22:44:16
>696
"C++Builder" ファイル ドラッグアンドドロップ
でぐぐれ
699:デフォルトの名無しさん
08/10/02 00:15:22
test
700:デフォルトの名無しさん
08/10/02 00:19:19
ごめんなさい、プロバイダが規制くらってたのでtest書き込みしてしまいました。
質問なんですが、フォームを使ってアプリを作っており、
デバッグで配列の中身や変数を見たく、printfなんかでコンソールに表示させたいのですが
何か方法はありますか?
インスペクタ?みたいなのはどうも使いにくくて・・・
ちなみに、C++Builder6を使ってます
701:デフォルトの名無しさん
08/10/02 00:32:28
これでどうでしょ?
URLリンク(msdn.microsoft.com)
でもIDEのデバッガ機能をちゃんと勉強して使ったほうが楽だと思うけどね。
702:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/02 02:04:16
_open_osfhandle()とかdup2()とかを組み合わせれば
普通にそのままのprintfが使えるようになるんじゃないかね。
知らないけど。
704:デフォルトの名無しさん
08/10/02 02:44:28
IDEでデバッグしてるならOutputDebugString使えばイベントウィンドウに出力されるぞ
705:デフォルトの名無しさん
08/10/02 10:34:03
複数のフォームを持ったアプリを作っています。
メインフォームの初期化ルーチン(FormCreateとか)から他のフォームの初期化ルーチンを呼び出したいが、
それがまだ生成されていないのでエラーになるというケースが多くて困っています。
全てのフォームが生成された後で一括して初期化を行いたいという時にはどうすればよいのでしょうか?
どなたか教えて下さい。
706:デフォルトの名無しさん
08/10/02 12:02:22
メインフォームのコンストラクタで他のフォームnewすれば?
707:デフォルトの名無しさん
08/10/02 12:46:22
>>700
解決したかも知れないけど、
TMemo 貼って Add で俺はやってる。
708:デフォルトの名無しさん
08/10/02 17:46:19
コンパイルした時に作成される実行ファイルの名前を、プログラム側で変更することってできます?
#ifdefで二種類作るので、間違えないようにしたいのですが・・・
709:700
08/10/02 18:59:26
なるほど、色んなやり方があるんですね。
しかしこのスレ非常にやさしいw
ありがとうございました~、色々とやってみて合うもの見つけてみます
710:デフォルトの名無しさん
08/10/02 19:43:14
>>708
#pragma optionでできないものリストに「-efilename」が書かれてるから無理
objファイルならできるけど。
711:デフォルトの名無しさん
08/10/02 19:56:58
>>710
無理なんですか、了解です。
ありがとうございました。
712:デフォルトの名無しさん
08/10/02 20:00:24
>>711
makefileで分けるといい
713:705
08/10/03 17:03:11
>>706 どうもありがとうございます。やってみます。
714:デフォルトの名無しさん
08/10/17 00:02:21
TwebBrowserで表示したページのセレクトボックスを変更したりボタンを押したりしたいのですが、参考になるページが見つからず途方に暮れています(他の言語は多少あるのですが・・・)
他の言語のを真似して
WebBrowser1->Document->All->GetElementsByName("hoge")[0]->selectedindex = 0;
※hogeは表示するページのソースをみて名前を調べました
などとしたのですが、「AllはIdispatchのメンバーではない」とエラーが出ます・・・
どんな書き方をすればよいのでしょうか
715:デフォルトの名無しさん
08/10/17 04:28:58
たぶん中身をIHTMDocument2とかにして触るんじゃないかな。
昔触ったのを見たら
IHTMLDocument2Ptr doc;
doc = browser->Document;
IHTMLElementPtr body = doc->body;
とかやってた。
IHTMLDocument2Ptrとして使うには、MSHTMLかなんかをimportだかする必要があったと思うけど。
716:デフォルトの名無しさん
08/10/19 04:31:46
Imageに貼り付けた四角の画像を台形とかに変形させることはできますか?
717:デフォルトの名無しさん
08/10/20 04:18:55
できる
718:デフォルトの名無しさん
08/10/20 16:48:53
できるよ
719:デフォルトの名無しさん
08/10/23 15:03:10
AnsiStringsの中に何も入っていない場合、c_str()で比較してチェックすることはできますか?
if(c_str()=="")やif(c_str()==NULL)と書いても素通りしますよね。
Lengthが0かどうかでチェックをしているので問題は無いのですが、気になったのでよろしくお願いします。