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


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

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



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

Borland Home Page   www.borland.co.jp/ 

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

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

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


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

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

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

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

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

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

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


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

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


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

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




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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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


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

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



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



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

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

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

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

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

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

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


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

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

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

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

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

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




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

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

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


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

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

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

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

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

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

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

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

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

char chrBuf[1024];
AnsiString asBuf;

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

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

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

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

とやりたいの?

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

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

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

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

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



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

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

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

例えば、

AnsiString SBuf;
string sBuf;

のとき、

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

と書く。

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

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

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

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

↑も参照してみて。

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

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

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

なことない。簡単。

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

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

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

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

その辺り調べてみた?

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

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

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

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

return x;
}

}






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

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



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

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

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

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

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


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

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

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

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

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



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

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

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

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

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

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

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

どう見ても 001f0fff だわな



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

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

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

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

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

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

DynamicArray<RGBTRIPLE*> slbuf;

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

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



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

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

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

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

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

よろしくお願いします。


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

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

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

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


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

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

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

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



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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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



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

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

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

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


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


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






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

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

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