くだすれC++Builder(超初心者用)その3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/02/12(月) 03:39:51もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
C++Builder使いが優しくコメントを返しますが、
お礼はC++Builderの布教と初心者の救済をお願いします。
Borland Home Page http://www.borland.co.jp/
<過去スレ>
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50
くだすれC++Builder(超初心者用)その2
http://pc10.2ch.net/test/read.cgi/tech/1144308804/l50
<兄弟スレ>
くだすれDelphi(超初心者用)その39
http://pc10.2ch.net/test/read.cgi/tech/1169386914/l50
0577デフォルトの名無しさん
2008/06/20(金) 15:57:40うちも VCL 以外で近いことを以前やったことあるけど、
そのときの実装は何ピクセル以上ドラッグするとドラッグ開始、
っていうふうにしてた。
0578デフォルトの名無しさん
2008/06/24(火) 04:30:23-Hr スイッチにより vcl4.h を vcl.h の代わりにインクルードします
っていうメッセージが出るんだけど、このスイッチって何処に記載されてるの?
古いプロジェクトの移行って面倒だね・・・。
0579デフォルトの名無しさん
2008/06/30(月) 16:46:200580デフォルトの名無しさん
2008/07/01(火) 04:50:200581デフォルトの名無しさん
2008/07/01(火) 09:39:37ところで、Vi$taってなぜかXPとマルチブートできませんよね?
0582デフォルトの名無しさん
2008/07/01(火) 09:50:060583デフォルトの名無しさん
2008/07/01(火) 19:26:51Vistaの動作検証だけなら開発は2000かXPで。
視覚スタイルは.manifest同梱で対応可。
Vistaアイコン(PNG圧縮256px)はIcoFxで可能。
res作成はVista対応SDKのrc.exeで可能。
0584デフォルトの名無しさん
2008/07/01(火) 19:49:260585デフォルトの名無しさん
2008/07/01(火) 22:49:40そうなのか・・・XPに入れてexeとdllだけ2000にコピーしたから気付かなかったわ。
0586デフォルトの名無しさん
2008/07/02(水) 08:57:02ビジュアルスタイル対応は、Theme Manager 使った方がいいのでは。
0587デフォルトの名無しさん
2008/07/04(金) 22:52:10TButtonの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;
}
}
どうしたらいいんでしょうか? アドバイスよろしくお願いします。
0588デフォルトの名無しさん
2008/07/04(金) 22:56:41もし文字色をシステムに従わないようにしたいのであれば、オーナドローでどうぞ。
0590デフォルトの名無しさん
2008/07/06(日) 01:08:29{
char *aaa;
aaa = "jpg";
if(aaa == "jpg")Button1->Caption = "jpg";
}
C言語の基本的なことだとはわかっているのですが・・・
これがtrueにならない理由って何でしょう?
基本的すぎるのか、文字列でググっても出てこないのはなぜー
0591デフォルトの名無しさん
2008/07/06(日) 01:18:27void __fastcall TForm1::Button1Click(TObject *Sender)
{
char* aaa;
char* bbb;
aaa = "jpg";
bbb = "jpg";
ShowMessage(AnsiString().sprintf("aaa=%08X bbb=%08X", aaa, bbb));
}
0592デフォルトの名無しさん
2008/07/06(日) 03:08:060593デフォルトの名無しさん
2008/07/06(日) 04:34:540594デフォルトの名無しさん
2008/07/06(日) 05:21:36メモリは壊れないのではないのか。
0595デフォルトの名無しさん
2008/07/06(日) 05:24:50ができないのを今初めて知った(´・ω・`)
0596デフォルトの名無しさん
2008/07/08(火) 13:57:48if ( strcmp( aaa,"jpg" )==0 ) とすればええんでないの?
"jpg"ってすると、メモリのどっかに確保された4バイト('j','p','g',0)のアドレスを示す。
aaaに格納された"jpg"のアドレスと、ifで比較している"jpg"のアドレスが違うからfalseになる。
0597デフォルトの名無しさん
2008/07/08(火) 18:27:30char* でやらないで AnsiString でやれば動く。
0598デフォルトの名無しさん
2008/07/09(水) 23:36:09Button1Click(Button1); Button1Click(Button2); Button1Click(Form1);
のどれでも動くみたいですが、Senderには普通何を与えるのが正しいの?
Senderの役割を教えてください。
//Form1上にButton1とButton2
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1Click(Button2);
}
0599デフォルトの名無しさん
2008/07/09(水) 23:54:20たとえば拡大ボタンと縮小ボタンがあって、それぞれにイベントハンドラ書くのはアホ臭いから
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int zoom;
TButton* button = dynamic_cast<TButton*>(Sender);
zoom = button->Tag;
if (zoon == 1) 拡大();
else 縮小();
}
こんな感じで使ったりする。
ハンドラ内でSender使わないならthisで十分。
0600デフォルトの名無しさん
2008/07/10(木) 00:14:170601デフォルトの名無しさん
2008/07/22(火) 14:35:51http://homepage2.nifty.com/spw/tips/GetIfTable.html
上記のサンプルプログラムを自分の環境で実行してみたのですが、以下のエラーが出てしまいます。
[リンカ エラー] 外部シンボル 'GetIfTable' が未解決(D:\ADDRESGET\UNIT1.OBJ が参照)
ソースファイルをダウンロードして実行してみたところ、正常に動作したことから環境は間違って無いと思うのですが・・・。
インクルードファイルも同じにして、オプションのリンカやディレクトリ/条件も揃えてみましたがダメでした。
この場合、何を見たらよろしいのでしょうか?
よろしくお願いします。
0602デフォルトの名無しさん
2008/07/22(火) 14:54:57bcb/lib/psdkにあるのプロジェクトに追加しる
0603デフォルトの名無しさん
2008/07/22(火) 15:01:37・・・その通りでした。
インクルードで指定して、エラーも出ていないから必要無いと思い込んでました。
本当にありがとうございました。
0604D
2008/07/22(火) 15:12:34☆ チン ハラヘッタ〜
ハラヘッタ〜
☆ チン 〃 ∧_∧
ヽ___\(\・∀・)
\_/ ⊂ ⊂_)
/ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄| |
|淡路たまねぎ|/
 ̄ ̄ ̄ ̄ ̄ ̄
0605デフォルトの名無しさん
2008/07/22(火) 15:38:51コンパイルとリンクに違いについてもうちょっと勉強した方がいい
0606デフォルトの名無しさん
2008/07/25(金) 03:16:38char chrBuf[1024];
AnsiString asBuf;
strcpy(chrBuf,"123456");
strcpy(asBuf.c_str(),chrBuf);
asBuf.Delete(3,3);
Label1->Caption = asBuf.c_str();
これで、「126」と表示させたいのですが、実際には「123456」となってしまうのは何故でしょうか・・・?
よろしくお願いします。
0607デフォルトの名無しさん
2008/07/25(金) 04:39:22AnsiString asBuf;
strcpy(chrBuf,"123456");
asBuf = chrBuf;
asBuf.Delete(3,3);
Label1->Caption = asBuf;
とやりたいの?
Caption は AnsiString だから、AnsiString → char * → AnsiString っていう
キャストが行われると思うんだけど、これはわざと?
c_str() で確保されたメモリ空間の寿命は未確定。
コピー先として使うべきではない。
0608デフォルトの名無しさん
2008/07/25(金) 10:30:26AnsiStringを加工に使いたいのですが、挙動を理解しきれてないので・・・。
「http://homepage1.nifty.com/emil/ansistring.html」で、
>char* c_str( )
>文字列をC言語の char* 文字列で返す。返すのはあくまでも char* 型のポインタであり、
>文字列のコピーが作られるわけではない。従って、受け取った char* 文字列を安全に操作したい場合は strcpy( ) などでコピーすると良い。
と、あるのでコピーしたのですが・・・解釈が違ったのかな?
ポインタとして渡せば動作するのですね。
ありがとうございます。
0609デフォルトの名無しさん
2008/07/25(金) 10:35:12は、無理して使う必要は無い。
どうしても使わないといけないときは、AnsiStringとstd::stringの渡しくらい。
例えば、
AnsiString SBuf;
string sBuf;
のとき、
sBuf = SBuf.c_str();
SBuf = sBuf.c_str();
と書く。
それ以外は、「.c_str()」を書かなくても、多分演算子がオーバーロードされてて、簡単に代入できる。
0610デフォルトの名無しさん
2008/07/25(金) 13:51:01解釈が違うと思う。
c_str() で得られたポインタから strcpy 等で
「自分で確保したメモリにコピーする」っていう意味。
そうすれば、自分で確保したメモリの寿命は自分で決められるから。
ttp://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-016.html
↑も参照してみて。
0611デフォルトの名無しさん
2008/07/25(金) 15:16:04詳しい解説ありがとうございます。
入門書を見ると、「初心者はAnsiStringを使えば簡単」って書いてあるけど、実は取り扱いには注意しないといけないんですね。
暑くて頭があまり回っていませんが、がんばってみます。
0612デフォルトの名無しさん
2008/07/25(金) 15:20:45基本的には常に AnsiString を使って、
API とのやりとりや、標準ライブラリの呼び出しだけに c_str() を使う、
って考え方が良いと思う。
0613デフォルトの名無しさん
2008/07/25(金) 15:48:01なことない。簡単。
0614デフォルトの名無しさん
2008/07/25(金) 18:05:18テクスチャについて質問があります。
今, 「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やそれ以上のサイズが使える解決方法をお願いします。
0615デフォルトの名無しさん
2008/07/25(金) 18:15:00よくわからないけど、ファイル自体をスタックに積んでるのかねぇ?
そんなコード見たことがないが。
その辺り調べてみた?
0616デフォルトの名無しさん
2008/07/25(金) 18:37:34In 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;
}
}
0617デフォルトの名無しさん
2008/07/25(金) 18:48:290618デフォルトの名無しさん
2008/07/25(金) 18:54:340619デフォルトの名無しさん
2008/07/25(金) 20:02:44math.hのincludeがうまくできてないのかね
0620デフォルトの名無しさん
2008/07/25(金) 21:11:480621デフォルトの名無しさん
2008/07/26(土) 21:04:150622デフォルトの名無しさん
2008/07/26(土) 21:09:55とりあえず載ってるコードがダメダメな気がするから自分で書き直すことをお奨めする
0623デフォルトの名無しさん
2008/07/26(土) 22:36:46とでるのですが、理由がわかりません・・・。
どなたかわかる方お願いします。
0624デフォルトの名無しさん
2008/07/27(日) 14:51:31実際にボタンを押してではなく、あるメソッド内から呼び出したいのですが
そういうことは可能ですか?
0625デフォルトの名無しさん
2008/07/27(日) 15:12:140626デフォルトの名無しさん
2008/07/27(日) 15:43:56おかげさまで解決しました。
ありがとうございました。
0627デフォルトの名無しさん
2008/07/27(日) 22:16:52今までC言語を始めよう!というフリーソフトを使ってきました
0628デフォルトの名無しさん
2008/07/27(日) 22:17:48スレ違い
0629デフォルトの名無しさん
2008/07/27(日) 23:24:30エディタ部分だけなら2006以降のエディタの方がいいかな
ウィンドウ構成とかは6までのIDEのほうが好きだけど
0630デフォルトの名無しさん
2008/08/05(火) 15:25:09mecabの初期化すら出来ない状態なので何かアドバイス頂ければ嬉しいです。
よろしくお願いします。
0631デフォルトの名無しさん
2008/08/08(金) 15:12:29VCその他では
#define PROCESS_ALL_ACCESS 0x001f0fff
BCCでは
#define PROCESS_ALL_ACCESS 0x001fffff
になってる。
たぶん>>427の問題もそのせい
こういうバグってどこに報告すればいいん?
0632デフォルトの名無しさん
2008/08/08(金) 15:31:13検証コードはprintf("%08X", PROCESS_ALL_ACCESS);
環境は6pro update4
0633デフォルトの名無しさん
2008/08/08(金) 15:37:38#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFF)
#define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
#define SYNCHRONIZE (0x00100000L)
どう見ても 001f0fff だわな
0634デフォルトの名無しさん
2008/08/08(金) 15:38:59駄レスすまそ
0635デフォルトの名無しさん
2008/08/09(土) 11:28:570636デフォルトの名無しさん
2008/08/09(土) 21:33:14チェックしてますが、入力値が異常でも、フォーカスが次のTEdit
にうつってしまいます。
よく考えれば当然といえば当然の結果なのですが、どうしても正常値
を入力するまでフォーカスを保持させたいのですが、行き詰ってしまい
ました。
よい解決方法がないでしょうか。よろしくお願いします。
0637デフォルトの名無しさん
2008/08/09(土) 22:19:30void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
TEdit* edit = dynamic_cast<TEdit*>(Sender);
if (edit->Text != AnsiString("aaa")) {
edit->SetFocus();
}
}
0638デフォルトの名無しさん
2008/08/11(月) 15:43:16ネットで調べると、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;
}
}
0639デフォルトの名無しさん
2008/08/11(月) 15:56:51ビットマップが24bitならBGRの3bytes、32bitならBGRAの4bytes。
0640デフォルトの名無しさん
2008/08/11(月) 15:58:5224bitだとワード+バイト転送なのに対し、32bitはダブルワード1回ですむ
0641デフォルトの名無しさん
2008/08/11(月) 16:07:26なるほど、ビットマップの形式によって変わるので処理としては間違ってはいないんですね。
BGRAがあることに気づきませんでした。
ありがとうございます。
0642デフォルトの名無しさん
2008/08/13(水) 17:02:27メイン側のメンバ変数の内容が見えないのですが、どうすればいいのでしょうか。
エラーが出るのではなく、関係ない数値が入っているので、別の部分を参照しているみたいです
具体的には
メイン側クラス(MainClass)、サブのスレッド(SubThread)
MainClass内で
AnsiString a;
SubThread->hogeEvent = (TNotifyEvent)&hogeFunc;
さらに
void hogeFunc(TObject* Sender)
{
MessageBox(Handle , a.c_str() , "",MB_OK);
}
として、hogeEventを発生させたとき、メイン側で既に代入したaの内容が読み取れていない
といった感じです。
よろしくお願いします。
0643デフォルトの名無しさん
2008/08/13(水) 23:46:54実行する。PostMessageとかSynchronizeとかを使う。
0644デフォルトの名無しさん
2008/08/14(木) 03:13:49ありがとうございます。
TNotifyEvent fOnHoge;
__property TNotifyEvent hogeEvent = {read=fOnHoge,write=fOnHoge};
void __fastcall TSubThread::evHoge(TObject* Sender)
{
if(hogeEvent){
hogeEvent(this);
}
として、サブスレッド内で
Synchronize((TThreadMethod)&evHoge);
を呼び出しても、解決しません。
このような書き方ではメインスレッドのコンテキストで実行されないのでしょうか。
2度も申し訳ありませんが、よろしくお願いします。
0645デフォルトの名無しさん
2008/08/14(木) 18:47:21Unit1.cppにくっついてるフォームForm1(Unit1.dfm)のMemo1に
Unit2.cppの処理から文字を入れたいときはどうすればよいでしょうか…
VBっぽくForm1->Memo1->Lines->Add(a);みたいにしたら出来るかなーと思ったけど駄目でした
Turbo C++を使っています。
0646デフォルトの名無しさん
2008/08/14(木) 18:48:370647デフォルトの名無しさん
2008/08/14(木) 18:50:140648645
2008/08/14(木) 19:10:20出来ました。ありがとうございます!
0649デフォルトの名無しさん
2008/08/17(日) 03:27:01これを使用してみたいのですが、最初にどこから手をつけていいのかわからなくって・・・。
とりあえず、DLLのインポートライブラリを作成してみようと、nidaq32.dllを使用してみたのですが、
Error nidaq32.dll: unknown file type
と、なってしまいます。
NI-DAQのバージョンは7.2
XPでBuilder6.0を使用しています。
0650デフォルトの名無しさん
2008/08/18(月) 00:43:530651デフォルトの名無しさん
2008/08/18(月) 01:24:22これってIMPLIBの使い方間違ってます?
0652デフォルトの名無しさん
2008/08/18(月) 20:02:18#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です。
0653デフォルトの名無しさん
2008/08/19(火) 09:01:040654デフォルトの名無しさん
2008/08/19(火) 09:09:17これって何のライブラリになるんでしょ?C++標準?VCL?
それを知らないと、#includeできないので。
あと、getlocaleってのもあるんでしょうか?
0655デフォルトの名無しさん
2008/08/19(火) 09:18:02localelist
みたいな1式も取れるんでしょうか?
0656デフォルトの名無しさん
2008/08/19(火) 09:35:41BCBでも他の文字列ではちゃんと動いてるし。
0657デフォルトの名無しさん
2008/08/19(火) 09:50:06>Standard C++ Library: Class Reference
>locale
ってのがありますね。
これはクラスだからいろいろメソッド使えるかも。
でも、これで切り替えても、
AnsiToUtf8/Utf8ToAnsiのロケールとは無関係なんかなぁ。
あ〜、テストプログラム作れば良いんだが、通勤時の暑さのせいでしんどい。
0658デフォルトの名無しさん
2008/08/19(火) 23:14:53インポートライブラリが悪いって、どのような現象があるのでしょうか?
BuilderのバージョンはBuild10.166ですが・・・
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;
{
0660デフォルトの名無しさん
2008/08/21(木) 02:12:21正解でなくても、何か参考になるようなことでもいいので意見を下さい。
よろしくお願いします。
0661デフォルトの名無しさん
2008/08/21(木) 07:47:42implib nidaq32.lib nidaq32.dll と順番を直したけどnidaq32.dllは壊れてるからエラー、とか?
一応本家にbcc用のインポートライブラリがあるみたいだけど。 ↓の一番下のzip
http://digital.ni.com/public.nsf/allkb/7793F4D8AFC47C1E86256E84005BBBE8
0662デフォルトの名無しさん
2008/08/21(木) 20:09:54NIDAQmxのDLLはnicaiu.dll見たいだよ?
NIDAQmxをインストールするとc:\WINDOWS\system32あたりにnicaiu.dllがあるはずだから
>implib nicaiu nicaiu.dll
でnicaiu.libを作ってリンクしてみたら?
0663デフォルトの名無しさん
2008/08/22(金) 02:33:44すいません、一度壊してました・・・orz
>>662
NIDAQではなく、NIDAQmxを使うのですか!!
ありがとうございます、やってみます。
0664デフォルトの名無しさん
2008/08/27(水) 17:23:50void __fastcall TForm1::ShowDialog()
{
Form2->Show();
for (i=0;i<100;i++) {... ;ProgressBar1->Position=i; ...}
Form2->Hide();
}
このForm2が前面に表示されている最中は、 Form1上にあるボタンをクリックしても
OnClickイベントが発生しないようにしたい(無視したい)のですが、 どうしたらいいのでしょうか?
Form2表示中にForm1上のボタンをクリックしたことによる処理が、 Form2が隠れた後に
実行されて困っています。
よろしくお願いします。
0665デフォルトの名無しさん
2008/08/27(水) 19:58:480667デフォルトの名無しさん
2008/08/28(木) 03:05:24http://www.speedreading.co.jp/read/riron07.html
8つの円を描き、全体をぼかすように前後左右の平均を取るように処理してみたところ、何度もやるとものすごく時間がかかるので・・・。
ぼかし処理は下のものを使用しました。
http://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=135
0668デフォルトの名無しさん
2008/08/29(金) 22:15:29http://update.codegear.com/forms/jp_cpp_download_reg
ここに何度登録したことか。。。。
0669デフォルトの名無しさん
2008/08/29(金) 22:34:00サーバーが見つかりません
0670デフォルトの名無しさん
2008/08/31(日) 00:08:200671デフォルトの名無しさん
2008/09/06(土) 08:25:000672デフォルトの名無しさん
2008/09/06(土) 10:46:04英単語の文字数を数えるにはどうすればいいですか?
0673デフォルトの名無しさん
2008/09/06(土) 10:52:490674デフォルトの名無しさん
2008/09/06(土) 10:57:350675デフォルトの名無しさん
2008/09/06(土) 11:04:330676デフォルトの名無しさん
2008/09/06(土) 11:15:14ありがとうございました。ここではC++という文字をよくみるのに本屋ではC#をよくみたので一緒かなと思いました
ありがとうございました
■ このスレッドは過去ログ倉庫に格納されています