07/11/07 11:55:54
>>234
商利用の可否
DBコンポーネントの有無
紙のマニュアルの有無
tasmの有無(なくてもPascalソース上でインラインアセンブラ使用可能)
238:デフォルトの名無しさん
07/11/07 11:58:36
ま、Personalは体験版、Proは通常版、Entは資金提供版。
239:デフォルトの名無しさん
07/11/12 17:34:44
初心者ながら古株のbcb5を使っています。
フォームを動的に表示する場合、
モーダルで表示したら次の行でデリートするのは
わかっているのですが、
普通にショウする場合、
動的フォームを閉じた場合のデリートは
どのタイミング(どのイベント)で
行えばよいのでしょうか?
動的フォームのcpp hにデリートを書く?
動的フォームが閉じた時の報告が親フォーム
にくればいいんですが・・・
いろいろ調べたのですが、どうも。
教えてください。
240:デフォルトの名無しさん
07/11/12 18:32:07
動的フォームのCloseイベントでthis->Release();じゃなかったっけ。
あとTCustomForm派生クラスはdeleteとかでデストラクタ直接呼び出したらだめ。
241:デフォルトの名無しさん
07/11/12 20:18:04
どうもです。
試してみます。
242:デフォルトの名無しさん
07/11/12 20:27:26
VCL6のソース読んだらCloseイベントでActionにcaFree突っ込めば勝手にRelease呼んでくれるっぽい
243:デフォルトの名無しさん
07/11/12 20:55:30
CBuilder 6を使っていますが、randomize()関数を呼び出しても乱数発生ルーチンが
初期化されていないようで、プログラムを実行するたびにrandom()関数が同じ値を
返してきます。RandSeed変数に出鱈目な値を入れてもrandomize()を呼び出しても
結果は変わりません。どんな原因が考えられるでしょうか。尚、Randomize()関数は
フォームのコンストラクタの中で呼び出しています。
244:デフォルトの名無しさん
07/11/12 21:16:37
>>243
randomizeとRandomize両方表記してるけど、どっち?
BCBにはどっちも存在して、random()に対応するのはrandomizeだけど、それは合ってる?
245:デフォルトの名無しさん
07/11/12 21:20:33
>>243
種をstaticで保持しておかないとだめなんじゃないの?PCの乱数なんて周期があってそこから切り出すだけなんだから。
246:デフォルトの名無しさん
07/11/12 21:22:06
レス有難うございます。
Randomize()を呼んでも"r"andomize()を呼んでも結果は同じでした。実際の乱数
発生はrandom()関数を呼び出しています。尚、randomize()に対応するのはrandom()
とのことですが、Randomize()に対応するのはrandom()とは別にあるのでしょうか。
247:デフォルトの名無しさん
07/11/12 21:29:34
>>246
System::Randomizeは下の関数に対応
System::RandG
System::RandomFrom
System::RandomRange
randomize, srandはrandom、randに対応
上がVCLの乱数ルーチンで下はC標準関数。
で、乱数の初期化はsrand((unsigned)QueryPerformanceCounter());ならまず重複しないかと。
(パフォーマンスカウンタの戻り値が64bitだから桁あふれの警告出るかもしらん)
248:デフォルトの名無しさん
07/11/12 21:35:29
む、参照返しで戻り値がBOOLだた。
LARGE_INTEGER seed;
QueryPerformanceCounter(&seed);
srand(seed.LowPart);
大抵は
srand(GetTickCount());
で十分だが。
249:デフォルトの名無しさん
07/11/12 21:41:31
有難うございます。
早速RandomFrom()を使ってみたところ、コンパイルエラー(未定義の関数)が出てしまいました。
Randomize()に関してはエラーは出ません。プロジェクトに何かライブラリを追加しなくては
ならないのでしょうか。
250:249
07/11/12 21:47:06
失礼。
RandomFrom()ではなくRandomRange()でした。
251:デフォルトの名無しさん
07/11/12 21:51:54
>>249
ヘルプ見れ。
Pascalソースでuses MathってやるようにC++ソースだと#include <Math.hpp>が必要。
ヘルプの読み方は覚えておいたほうがいい。
252:249
07/11/12 21:53:23
自己解決しました。
RandomRange()はvcl\math.hppで宣言されていますね。プログラムの先頭でこのファイルを
インクルードしたらビルドできるようになりました。又、乱数発生機構もきちんと初期化
されているようです。プログラムを走らせるたびにRandomRange()から違う値が返ってきます。
どうもありがとうございました。
253:249
07/11/12 21:54:08
>>251
失礼、かぶってしまいました。
254:デフォルトの名無しさん
07/11/13 03:52:42
超初心者質問失礼します。classの練習で数字の合計値をdisplayする問題を、
classをいくつか作ってやろうとしたのですがどうしてもうまくいきません。
結局自分は下のようにmainでdisplayするよう作って動いたのですが、
classによって合計計算とdisplayを実行するにはどう作ればいいでしょうか。
class basic
{
int no;
public:
int accept()
{
cin>>no;
return no;
}
};
void main()
{
int a[5],sum=0;
basic ba[5];
for(int i=0;i<5;i++)
{
a[i]=ba[i].accept();
sum=sum+a[i];
}
cout<<sum;
}
255:デフォルトの名無しさん
07/11/13 09:10:37
BCB5の者です。
趣味でフリーソフトつくっていますが、
オプションフォームをnewで呼び出すか
起動と同時にロードしておくか
どちらがいいのか迷っています。
ソフト自体の大きさは単体のみの動作で
1MB程度です。
一般配布を意識した場合、
オプションフォーオムはバックグラウンドに
待機させておくものでしょうか?
それとも呼び出し毎にロードするものでしょうか?
なお、常駐ソフトです。
オプションはダイアログ形式で
部品の数は20個ほどです。
256:デフォルトの名無しさん
07/11/13 09:37:11
>オプションはダイアログ形式で 部品の数は20個ほどです。
今のPC/dozなら、リソース的には無問題だが、
>起動と同時にロードしておくか
コード的に素直じゃない。
さらに、オプション内容をフォームに保持させたりすると、プログラムが崩れてきたり。
フォームを開く時点でnewしてグローバルはなるべく無い方が良い。
どうしても消せないグローバルはあると思うが、グローバルフォームっていうのは...
257:デフォルトの名無しさん
07/11/13 10:31:17
よくわかりました。
一般作法ってのは聞かないと
わからないものですから。
助かりました。
258:デフォルトの名無しさん
07/11/13 10:42:24
Win9xを考慮しなくて良いなら別に動的に作らんでも良いんじゃないの~
259:デフォルトの名無しさん
07/11/13 10:59:08
別に全部グローバルで良いんじゃないの~
ってこと?
260:デフォルトの名無しさん
07/11/14 08:03:49
>>258
VB or JAVA プログラマみたいな発想でつな
261:デフォルトの名無しさん
07/11/14 10:56:40
BuilderはVB感覚で使ってるからね~
262:デフォルトの名無しさん
07/11/14 12:42:39
VB->BCBはまったく違和感がない。
最近ここに張り付いたBCB5厨だけど、
ヴァーアップを考えています。
ターボCとBCB2007のどちらかとおもっています。
ベンダーのページみたら
ターボCでもいけそうな・・・
どうなんだろ。
用途は、ちょっとしたアプリ程度で、通信なんか使わない。
263:デフォルトの名無しさん
07/11/14 13:17:22
>用途は、ちょっとしたアプリ程度で、通信なんか使わない。
今の時代超便利だお。
だってIndyをポトペタしただけで、データ渡しの手段が増えるんだから。
264:デフォルトの名無しさん
07/11/14 19:20:09
へぇ。
ターボCでもOK?ですか
265:デフォルトの名無しさん
07/11/14 19:47:34
って、言ったけど・・・。
ターボCの情報はスレチガイでつか?
266:デフォルトの名無しさん
07/11/14 19:47:51
YES
267:デフォルトの名無しさん
07/11/14 21:15:22
んなこたーない
TurboC++Expはコンポーネントの追加ができないからプロジェクトにIndyのユニット追加してソース上で自分で宣言/newしないとダメ。
Pro買うんなら2007かっとけ(TurboC++ = C++Builder2006 = C++Builder10)
268:デフォルトの名無しさん
07/11/16 08:33:42
SQLでLIKE %あ%としたときに
パソコンによって
あ ア ア が対象になるパソコンと
あ しか対象にならないパソコンがありますが
なにか環境が必要になってくるのでしょうか?
いろいろ調べてますが決め手がわかりません
よろしくお願いします。
269:デフォルトの名無しさん
07/11/16 11:12:43
>あ ア ア が対象になるパソコンと
>あ しか対象にならないパソコンがありますが
んなこたーない
LIKE '%あ%' クォートつけるべし
スレ違いだ
270:デフォルトの名無しさん
07/11/19 00:20:19
static_castって、何をするものなのですか?普通の型変換と何が違うのでしょうか。
コードを書いていて、うまくいくのだけど、何をしているのか分からないと気持ち悪いし、問題もあるだろうし。
271:デフォルトの名無しさん
07/11/20 10:19:20
URLリンク(ray.sakura.ne.jp)
272:デフォルトの名無しさん
07/11/20 22:27:43
>>271
トン。読んでみます。
273:デフォルトの名無しさん
07/11/27 10:42:05
質問です。
TStringList* lst;
lstに文字列をセットして
char* p=lst->Text.c_str();
として文字列先頭アドレスを求めて処理をしている部分があったのですが
ある特定文字列のときに、pがNULLになります。
でも、
AnsiString str=lst->Text;
char* p=str.c_str();
とすると正常に文字列先頭がセットされます。
この二つで違いが出る理由は何故なのでしょうか。
274:デフォルトの名無しさん
07/11/27 10:51:04
物が違うから。
275:デフォルトの名無しさん
07/11/27 11:12:57
pがNULLってのは勘違いのはず。ただ無効な領域を指しているのでアクセスした時の動作は不定。
p = lst->Text.c_str()の実際の動作は、p = lst->GetTextStr().c_str()なので、
pはGetTextStrが返す一時オブジェクトが持つバッファを指していることになる。
上の式の評価後に一時オブジェクトは破棄されてpの参照先も無効になる。
276:デフォルトの名無しさん
07/11/27 15:04:54
ひさびさにくだスレが正常に機能してる例をみた
277:273
07/11/27 20:10:11
>>275
超ありがとうございます。
とてもよくわかりました。
ちゃんと表示されていないのは大きな文字列のときでした。
小さな文字列のときは、一時的なバッファがたまたま破壊されなかったので
正常に動いているように見えたのですね。
278:デフォルトの名無しさん
07/11/27 23:56:19
質問です。
下記 __finallyの中のA位置で、返そうとしている戻り値を知りたいのですが
result変数を作る以外の方法はないでしょうか?
int hoge() {
try{
if(...) return 1;
if(...) return 2;
if(...) return 3;
if(...) return 4;
throw;
}__fianlly{
(A)
}
}
279:デフォルトの名無しさん
07/11/28 08:05:12
fianlly
280:デフォルトの名無しさん
07/11/28 08:47:01
無理でしょ
281:デフォルトの名無しさん
07/11/28 10:21:32
むしろresult作らない理由がないとおもう。
コスト云々なら例外処理やめてgotoで(A)に飛ばした方がはるかにコスト低いし。
282:デフォルトの名無しさん
07/11/28 10:28:46
どちらかというと、finallyはDelphi用であって、C++には元々無いもの。
Delphiにfinallyが必須なのはFreeのためであり、C++ではローカルオブジェクトの使用が推奨されている。
try finallyとtry except(←こっちはC++標準)のネストやその中でのthrow や return は言語規定されてないんじゃないかと思うのでやヴぁ目。
逆にローカル変数やローカルオブジェクトは推奨なので、
>result変数を作る以外の方法はないでしょうか?
という考えがワケワカメ。
283:デフォルトの名無しさん
07/11/28 10:34:18
C++でもWindowsAPIのハンドル閉じたりするのにfinallyは有用よ。
最近のC++処理系は大抵__finally使えるし。
284:デフォルトの名無しさん
07/11/28 10:37:50
finallyが有用なのと各種処理系で実装されているのは認めますが(実際自分も使ってる)、
finallyと例外catch(上では間違えてexceptって書いちゃった)系や、returnを組み合わせちゃダメ。
何でかっていうと、tryを2つ組み合わせて、その中でreturnすると、一番外のfinallyを通過しない。
ソースコードを読む上ではfinallyは必ず通るって頭で読むから、バグの元になるだけだお。
285:デフォルトの名無しさん
07/11/28 11:50:46
むしろreturnできる処理でどう__finally使うのか
286:デフォルトの名無しさん
07/11/28 11:59:47
その通り。
・finallyするなら複数箇所でreturnするな
・複数箇所でreturnするならfinallyするな
あと、プログラミングテクニック的には、
関数やメソッドから抜ける箇所は1箇所にするとコーディングバグを防げる。
つまり、複数箇所returnはやめるべき。
(これも適材適所で、使い方によっては便利なときもあるけどね)
287:デフォルトの名無しさん
07/11/28 12:23:07
>>285
Delphi で Exit の後に finally が実行されるのを利用するのと同じで
ローカル変数のデストラクタは return の後に実行されるのだろ?
288:209
07/11/28 14:22:59
TListBoxのn行目を「マウスでクリックした状態」にするにはどうすればいいのでしょうか?
289:デフォルトの名無しさん
07/11/28 16:12:00
SelectedIndexプロパティ とかなかったか?
290:288
07/11/28 17:53:35
Selected[n]でいいようです。ありがとうございました。
291:278
07/11/28 20:50:41
>>280-287
有難う御座いました。
各種参考にさせていただきます。
292:デフォルトの名無しさん
07/12/02 22:09:08
GetWindowLong(hwnd, nIndex)を使って、
すでにわかっている他アプリの子ウインドウ(ツールバー)の
位置変更およびサイズ変更をフックしたいと考えています。
フック自体良くわかっていません。
別に横取りして変更を加えるつもりはありません。スルーします。
単にバーの座標と幅・高さがユーザによって変更されたことの
通知がほしいだけです。
WM_MOVE
WM_SIZE
をつかって云々と他板での情報ですが、
WinAPIプログラマーリファレンスを見ても、
GetWindowLongとWM_MOVE・WM_SIZEのつながりが見えてきません。
再度申しますが、ユーザの変更知りたいだけで、座標データ等は取得済みです。
環境WinXP BCB5
293:デフォルトの名無しさん
07/12/02 22:17:45
GetWindowLong(HWND, GWL_WNDPROC)は対象が自プロセスじゃないと使えない。
SetWindowsHookEx使ってフックDLLからフックしないと無理。
294:デフォルトの名無しさん
07/12/02 22:35:17
なるほど。ますますわからん。
bcbのコード少ないからなぁ。
タイマーなんか使って
こちらからアプローチすれば、座標データが
わかっているんで、比較するだけで変更こそは
感知できるんですが、
ユーザーの変更を感知したいんですよね。
もう少し精進してみます。
295:デフォルトの名無しさん
07/12/02 22:45:19
BCBじゃなくてWin32APIの問題
296:デフォルトの名無しさん
07/12/03 20:00:56
292です。
マルチいやだから書くけど、
Win32APIスレに転載して
もまれて来ます。
とりあえず、一日放置してから
明日くらいにカキコしてみます。
297:デフォルトの名無しさん
07/12/08 10:37:10
WinExecを使って自アプリAから他のアプリBを起動しています
アプリB処理完了後に自動で終了するものなのですが
アプリAからアプリBが終了したのを調べる方法はありませんか?
Aからデータを渡しながらBを順次稼動させたいのですが
298:デフォルトの名無しさん
07/12/08 11:06:25
CreateProcessをどうして使わないの?
どうしてもWinExecって事だと実行ファイルを開いてみてロックされてるかどうか見るか
パソコン上のプロセスを列挙させるかだけど、他に実行されてると厄介だし
手間はズーっと大変だろうに
299:297
07/12/08 12:50:35
単純に知りませんでした
CreateProcessなら簡単にできるのかな
少し調べてみます
300:デフォルトの名無しさん
07/12/08 12:54:23
CreateProcess()
WaitForSingleObject()
CloseHandle()
このあたりでしょうかね?
301:デフォルトの名無しさん
07/12/08 18:53:47
プロジェクト開こうとしたら、プロジェクトルールがみつかりません
って出るんだけど、これ何が原因ですかね?
302:デフォルトの名無しさん
07/12/10 14:04:15
TForm上に配置した複数のTCheckBox同士をDnDして位置を変えたいのですが
Checked値を変える為にクリックしただけでOnDragOverイベントに飛んでしまいます。
これらを切り分けるにはどうすればいいのでしょうか。
303:デフォルトの名無しさん
07/12/10 17:25:00
TMemoryStream::LoadFromFile にて大きなファイルを読み込もうとすると
「メモリストリームの拡大中にメモリが足りなくなりました」と言われます
OSはXP、ファイルの具体的なサイズは1,382,526,976バイトです
確かにちょっと大きめのファイルですが何とか読み込みたいのですが
BCBでは読み込めないサイズなのでしょうか
304:デフォルトの名無しさん
07/12/10 18:52:11
搭載メモリは1GBという落ちか
305:デフォルトの名無しさん
07/12/10 19:08:12
ストリームなんだからファイルストリームでシークしてアクセスすればいいと思うんだけどな
どうしてわざわざメモリに読むのだろ?
306:デフォルトの名無しさん
07/12/10 19:20:11
メモリに取り込みたいって、高速処理したい以外に理由はあるんかね?
307:デフォルトの名無しさん
07/12/10 20:03:55
>>303の環境に十分な空き領域があっても、仮想メモリ空間内で"連続して"1.3GB分の空き領域がないと
メモリの確保には失敗する。どうしてもメモリに置きたいなら、小さいブロックに分けないと。
308:デフォルトの名無しさん
07/12/10 21:35:44
私もオフセット指定でシークするのを薦めるな
309:デフォルトの名無しさん
07/12/11 08:56:45
303です。
暗号化させるのにどかんと読んでどかんと処理させたかったのですが
僕のやり方は非常識だったんですね(苦笑)方針を変更してみます
ありがとうございました
310:デフォルトの名無しさん
07/12/11 09:41:41
大きなファイルはメモリに読むだけでも処理時間がかかるし、その間操作出来ないから
ユーザにはストレスがかかるだろ?
それに仮想記憶の機構ってのはHDDのキャッシュの機構でもあるから、
ハードディスクをブロック的にアクセスするのもメモリに読むのもそうスピードは変わらない。
ブロック単位に読んで処理するのが一般的だし最速だと思うよ。
途中でユーザーはキャンセルも出来るしね。
311:デフォルトの名無しさん
07/12/11 10:58:30
データベースをパソコンで動かすようになってから、巨大ファイルは
一度にメモリに読み込んで処理するような機会は無くなってきたと思う。
1レコードが固定長ならランダムアクセスが出来るし、必要なインデックス
番号でシークすればいいのだから。
312:デフォルトの名無しさん
07/12/14 20:32:36
ボタンを押したら、あらかじめbuilderで作っておいたexeファイルを実行(開く)にはどうすれば良いですか?
313:デフォルトの名無しさん
07/12/14 20:45:49
他のプロセスとして実行させるなら
1, ShellExecute CreateProcess WinExec の windowsAPI
2,execl / execv とかのprocess.h
どっちか
314:デフォルトの名無しさん
07/12/18 14:14:59
>>311
固定長じゃなくてもインデックス作っとけばランダムアクセスできるじゃん
315:デフォルトの名無しさん
07/12/18 14:22:03
可変長だと読み込みはよくても、書き込み時にサイズ変わると大変だな
316:デフォルトの名無しさん
07/12/28 12:05:19
ちょっと良くわからないなりに
以下のようなソースを
書きました。
ColorDialog1->Color=(TColor)iFontColor;
if(ColorDialog1->Execute()){
iFontColor=ColorToRGB(ColorDialog1->Color);
}
#255255255 or #FFFFFF
のような値を得たいのですが、
どうしたら得られるでしょうか?
317:デフォルトの名無しさん
07/12/28 13:14:02
このコードならiFontColor にその形式で入ってる筈だけど?
318:デフォルトの名無しさん
07/12/28 13:39:20
とおもうんですが、
B R Gそれぞれ0-255の値がほしいのです。
逆に言うと、#FFFFFFから
ColorDialog1->Color=hoge(FFFFFF);
か
ColorDialog1->Color=hoge(FF,FF,FF);
か
ColorDialog1->Color=hoge(255,255,255);
のように扱いたいのです。
iFontColorの値がいまいち理解できていないと
おもてまする。
今はカラーダイアログを使いとそれなりに動くので、
いいのですが、カラーピッカーからの数字データを
手入力でカラーダイアログもしくは、フォントカラーに
反映させたいのです。
iFontColorを16進法に酢りゃいいのでしょうか?
未熟で申し訳ないです。
319:デフォルトの名無しさん
07/12/28 13:49:21
char 配列とのunion かchar ポインタでアクセスするか
iFontColor & 0xff;
(iFontColor>>8) & 0xff;
(iFontColor>>16) & 0xff;
とやるか
320:デフォルトの名無しさん
07/12/28 14:32:22
やっぱり深みにはまってしまった模様。
即レスいただけると大変ありがたいのですが、
内容が理解不能ならあせりますね。
iFontColorの構造をもう少し調べてみます。
321:デフォルトの名無しさん
07/12/28 15:04:50
iFontColor=ColorToRGB(ColorDialog1->Color)
でiFontColorの値が
14811135で
フォトショップで得た値
FFFBE7
相関関係が見えてきません。
322:デフォルトの名無しさん
07/12/28 15:16:12
ただのビット演算じゃないの?
323:デフォルトの名無しさん
07/12/28 15:23:36
14811145は16進でE1FFFF。
TColorはBGRの順だから、RGBだとRとB入れ替えてFFFFE1。
324:デフォルトの名無しさん
07/12/28 15:43:26
理解できました。
14811145
ではなく
14811135
でした。
ありがとうございました。
325:デフォルトの名無しさん
07/12/28 16:42:31
ちなみにTColor = COLORREFだからGetRValue()マクロとか使えば簡単に色成分取り出せる
326:デフォルトの名無しさん
07/12/28 20:18:30
厳密にはTColor = COLORREFではない。
327:デフォルトの名無しさん
07/12/29 11:46:28
$00FFFFFF
右6桁がBGRだべ
328:デフォルトの名無しさん
07/12/29 13:09:30
VCL&C++ってキモイな
ソース見るたびにそう思う
329:デフォルトの名無しさん
07/12/29 14:15:13
そうか。
330:デフォルトの名無しさん
07/12/29 14:19:13
VCL&Delphiは潔い
ソース見るたびにそう思う
331:デフォルトの名無しさん
07/12/29 23:51:07
できました。
ありがとうございました。
くそソース晒して手直ししてもらえるものでしょうか?
VB仕込みのソースが悲しくて
332:デフォルトの名無しさん
07/12/30 00:14:23
どんどん晒せ
333:デフォルトの名無しさん
07/12/30 01:11:37
でも、かなり痛いソースですよ
痛いなりに面倒みてもらえたらいいんですが
プロのソースみてみたいし。
擦違いのような
334:デフォルトの名無しさん
07/12/30 01:47:06
別にスレ違いとは思わないけど2chでやるのは無理がないか
335:デフォルトの名無しさん
07/12/30 11:33:11
int __fastcall CConv::fcRGBToInt(AnsiString strRGB){
// AnsiString sC="FFFFE1"; //FFFFE1(Winツールチップカラー)
char bf[32];
strcpy(bf,strRGB.c_str());
//RGBからBGRに変換
AnsiString strBRG=
(AnsiString)bf[4]+(AnsiString)bf[5]+
(AnsiString)bf[0]+(AnsiString)bf[1]+
(AnsiString)bf[2]+(AnsiString)bf[3];
return strtol(strBRG.c_str(), NULL, 16);//int型に変換
}
//---------------------------------------------------------------------------
AnsiString __fastcall CConv::fcIntToRGB(int intRGB){
//TColorからR G B 16進法へ変換
AnsiString str = IntToHex(intRGB,6);
char bf[32];
strcpy(bf,"");
char bfRGB[32];
strcpy(bfRGB,str.c_str());
if(str.Length()==1){
bf[0]='0';
bf[1]='0';
bf[2]='0';
bf[3]='0';
bf[4]='0';
bf[5]=bfRGB[0];
bf[6]='\0';
336:デフォルトの名無しさん
07/12/30 11:34:01
}else if(str.Length()==2){
bf[0]='0';
bf[1]='0';
bf[2]='0';
bf[3]='0';
bf[4]=bfRGB[0];
bf[5]=bfRGB[1];
bf[6]='\0';
途中rk
}else if(str.Length()==5){
bf[0]='0';
bf[1]=bfRGB[0];
bf[2]=bfRGB[1];
bf[3]=bfRGB[2];
bf[4]=bfRGB[3];
bf[5]=bfRGB[4];
bf[6]='\0';
}else if(str.Length()==6){
bf[0]=bfRGB[0];
bf[1]=bfRGB[1];
bf[2]=bfRGB[2];
bf[3]=bfRGB[3];
bf[4]=bfRGB[4];
bf[5]=bfRGB[5];
bf[6]='\0';
}else{}
return (AnsiString)bf;
};
337:デフォルトの名無しさん
07/12/30 13:09:29
int __fastcall CConv::fcRGBToInt(AnsiString strRGB)
{
int intRGB = strtol(strRGB.c_str(), NULL, 16);
return (intRGB >> 16 & 0x000000FF) | (intRGB & 0x0000FF00) | (intRGB << 16 & 0x00FF0000);
}
AnsiString __fastcall CConv::fcIntToRGB(int intRGB)
{
int intBGR = (intRGB >> 16 & 0x000000FF) | (intRGB & 0x0000FF00) | (intRGB << 16 & 0x00FF0000);
return IntToHex(intBGR, 6);
}
338:デフォルトの名無しさん
07/12/30 13:27:44
スゲーコンパクトでシンプルだ
礼をもうします。
339:デフォルトの名無しさん
07/12/30 15:51:34
BRGってのはミス?
340:デフォルトの名無しさん
07/12/31 09:16:27
LMD Toolって何ですか?
英語でよくわからないのですが、
日本語サイトないですかね?
341:デフォルトの名無しさん
08/01/01 04:46:46
URLリンク(pc5.2ch.net)
にある方法を使ってコンポーネントを置き換えた場合、オブジェクトインスペクタで指定したイベント対応コードが実行されません。
普通に配置したコンポーネント同様に、イベント対応のコードを実行させるにはどうしたらいいのでしょうか。
よろしくお願いします。
342:デフォルトの名無しさん
08/01/01 08:43:04
>>341
URLリンク(homepage1.nifty.com)
343:デフォルトの名無しさん
08/01/01 14:33:37
>>342
ありがとうございます。
344:デフォルトの名無しさん
08/01/02 15:07:36
C++Builder2007のエディタの支援機能が誤作動してるみたいで、
改行するたびに余分な}が勝手に入力されるんだけど、これって直らないの?
誤作動するのは次のコードの前後からみたいだが。
char c[2]="\"";
345:デフォルトの名無しさん
08/01/02 23:31:40
QCには出てないね。登録を依頼してみたら?
346:デフォルトの名無しさん
08/01/06 16:33:14
Turbo C++ を始めようと思ったのですが、
.Net frame work v1.1のインストールができません。
WindowsXP SP2で、Windows Installerサービスは起動してます。
何か気をつけなければならない要素ってありますか?
347:デフォルトの名無しさん
08/01/06 18:00:03
>346
個別にMSのサイトからダウンロードしてインストールしてみたら?
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
348:デフォルトの名無しさん
08/01/06 18:26:53
>>347
おっ うまくいきました
ありがとうございました~
349:デフォルトの名無しさん
08/01/06 19:45:55
Windows Updateとかでセキュリティ関係の更新プログラムを適用するのを忘れないようにね、
350:デフォルトの名無しさん
08/01/07 16:13:08
C++Builder起動直後のブラウザ画面で、
どのメニューをクリックしても反応しないのですがどうしたらなおりますか?
ブラウザは普段はIE6(sp1)+Sleipnirを使っています
351:350
08/01/08 20:50:37
IEのインターネットオプションで、bds:/を信頼済みサイトに登録してみましたが駄目でした
ここで不具合でた人いないのかなぁ・・・
メニューのヘルプ>ボーランドのホームページ
を選択すると、ブラウザでURLリンク(www.borland.com)が開き、
この画面では、普通にブラウジングできるので、
bds:/だから駄目なのかな、と思ったのですが・。・・
352:デフォルトの名無しさん
08/01/08 21:03:13
バージョンくらい書けよ
353:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/10 03:09:25
すいません
16進数が入ったBYTE型変数を10進数のINT型の値に変換するにはどうすればいいですか?
355:デフォルトの名無しさん
08/01/10 08:03:39
「16進数が入ったBYTE型変数」
の意味が判らん。
もしかして単なるBYTE = unsigned char の配列か?
ASCIIで文字列が入ってるなら '$'を足して StrToInt とかだが
配列ならどっちが上位なのか判らんけど 256倍しながら加算すればいいだけ
「10進数のINT型の値」も意味が判らんが、後で10進数で表示したいって事なら、そんな情報は胸にしまっとけ
パック10進でって事なら、そう書け
356:デフォルトの名無しさん
08/01/15 21:20:38
Turbo C++ Builderで、XPスタイルのボタンって作れますか?
357:デフォルトの名無しさん
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() で確保されたメモリ空間の寿命は未確定。
コピー先として使うべきではない。