くだすれ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
0756デフォルトの名無しさん
2008/10/28(火) 17:21:13Are you a big baka ?
スクロールした結果、OnChange()が発生するのであって
OnChange()を自前で呼んでも無意味じゃん。
0757デフォルトの名無しさん
2008/10/28(火) 17:25:37しかして>>755は
OnChange()を呼べばスクロールが発生するとでも思っているのかぁ
プププ
0758755
2008/10/28(火) 19:00:09プログラム上からイベントを発生させる方法ってあります?
0759デフォルトの名無しさん
2008/10/28(火) 19:06:500760デフォルトの名無しさん
2008/10/28(火) 23:13:14嘘はいかんな
0761752
2008/10/29(水) 02:51:14どうやってやればいいんでしょう・・・?
0762デフォルトの名無しさん
2008/11/01(土) 01:22:01BitBtnは画像を配置すると文字が消えてしまうので、他に何か方法は無いでしょうか?
よろしくお願いします。
0763デフォルトの名無しさん
2008/11/01(土) 15:51:47起動時bitbtnにするDIBにフォントを使って字を書いてしまえばいいじゃないかw
元の画像は普通のボタンから抜くなりなんなりすればいいジャマイカ
そしてそれをフリーで後悔すれば….
と思う前に誰かすでに作ってないかとかおもってググ…
0764デフォルトの名無しさん
2008/11/01(土) 15:52:23その中の計算を行いそれを50個またテキストデータとして保存したいのですが
テキストデータを同時に読む込むプログラムとそしてそれを同時に書き出す方法が
どうしてもわかりません。よければアドバイスお願いします。
0765デフォルトの名無しさん
2008/11/01(土) 17:32:460766デフォルトの名無しさん
2008/11/01(土) 18:48:32すみません、説明不足だったようです。
同時にではなくたとえばA001〜020で読み込む場合にfor文などで回して
自動ですべてを順に読み込み書き出すようにしたいのです
0767デフォルトの名無しさん
2008/11/01(土) 20:10:09for文で回して順に読み込み書き出しすればいいと思うよ
と思ったが「同じフォルダにあるテキストデータ」ってファイルのこと?
ならファイルを順繰りに読んで希望のファイルだけ読み込み書き出しすれば良いんじゃないかね
0768デフォルトの名無しさん
2008/11/01(土) 20:51:350769デフォルトの名無しさん
2008/11/01(土) 23:37:20そのへんが全然わからんから
エスパーじゃないから
答えようがねえなぁ
文章から類推すると、何もかもまったくわからんようにしか見えんが。
0770デフォルトの名無しさん
2008/11/02(日) 13:55:50private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
progressBar1->Maximum = shikou_kaisu; /* 最大値 */
progressBar1->Visible = true;
label8->Text = "処理中";
label8->ForeColor = System::Drawing::Color::Red;
for(i=0; i<shikou_kaisu; i++){
rnd(kibou_kosu); //自作関数呼び出し
Sleep(1);
}
};
このようにshikou_kaisuには10000を入れていまして、1万回のループに入る前に
プログレスバーを出し、label8の文字色を赤にし、処理中と書き換えているのですが
どちらとも(プログレスバーもlabel書き換えも)for文が終了したあとに処理されてしまいます。
なぜでしょうか?
0771デフォルトの名無しさん
2008/11/02(日) 14:03:05あともう一つ教えてください。
出力ウィンドウに、テスト的に変数の値などを表示させたいのですが、
Console::WriteLine("aaa");
などとしてもまったく表示されません。何か方法はありますでしょうか?
よろしくお願いします。
0772デフォルトの名無しさん
2008/11/02(日) 14:27:08ここは、
くだすれC++Builder(超初心者用)その3
0773デフォルトの名無しさん
2008/11/02(日) 14:57:22すみません。間違えました><
0774デフォルトの名無しさん
2008/11/03(月) 18:05:44バイナリ形式のファイル読み込んで、その内容を同じファイル名でテキスト形式に置き換えて保存したいのですが
それを手動保存するのではなく自動で同じファイルネームでそのフォルダ内に生成されるプログラムを作りたいのですがどのようにすればよいのでしょうか
0775デフォルトの名無しさん
2008/11/03(月) 18:49:03スレ違い
C/C++の宿題を片付けます 117代目
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
こっちだな
0776デフォルトの名無しさん
2008/11/03(月) 18:55:33すいません、これをSaveDialogやOpenDialogなどを用いてc++builderで
実行しなくてはいけないのですが読み込んだファイルを同じ名前のテキスト形式で自動生成する保存の方法を教えていただけないでしょうか
0777デフォルトの名無しさん
2008/11/03(月) 19:46:17君の質問に回答できる奴はエスパー
0778デフォルトの名無しさん
2008/11/03(月) 20:06:21バイナリの中身が構造体だったり、浮動小数点と整数が
交互に書かれていたりする時どうやって判別するのですか?
コンピュータから見るとどちらもただの0と1の羅列ですよ?
0779デフォルトの名無しさん
2008/11/04(火) 04:10:550780デフォルトの名無しさん
2008/11/04(火) 12:41:530781デフォルトの名無しさん
2008/11/04(火) 13:44:41OpenDialogを使用して、指定したフォルダからファイルを読み込みたいのですが、
最初の動作ではInitialDirに指定フォルダ名が入っているのにも関わらず、デフォルトのフォルダが表示されてしまいます。
再起動しても変わりません。
でも、他の動作で指定フォルダを開くと、最初のOpenDialogも指定フォルダを開けるようになります。
フォルダ名を指定した後、確定させる方法があるのでしょうか?
よろしくお願いします。
if(FolderTXT.IsEmpty()){ // フォルダ指定無し
OpenDialog1->InitialDir = ExtractFilePath(Application->ExeName)+"DATA";
}else{
OpenDialog1->InitialDir = FolderTXT+"DATA";
}
// フォルダオープン
if(OpenDialog1->Execute()){
if(FileExists(OpenDialog1->FileName)){
fn=OpenDialog1->FileName;
}
}
※FolderTXTにフォルダ名が入っています。
0782デフォルトの名無しさん
2008/11/04(火) 14:14:42DirectoryExists(OpenDialog1->InitialDir)
してみい
falseが返ってくるからさ
0783デフォルトの名無しさん
2008/11/04(火) 14:41:37FileNameにフルパスでいれときゃいい
0784デフォルトの名無しさん
2008/11/04(火) 15:16:55はい、falseでした。
一度動くようになると、PCを再起動してもtrueですね・・・。
なぜでしょう?
>>783
汚い書き方ですが、
OpenDialog1->FileName = OpenDialog1->InitialDir;
をExecute()の前に置いたら動作しました。
Execute()で最初に開くフォルダはFileNameのフォルダで、InitialDirでは無いってことでよろしいでしょうか?
0785デフォルトの名無しさん
2008/11/04(火) 17:13:51こっちも忙しいんだから早くして下さいね。
0786デフォルトの名無しさん
2008/11/04(火) 23:57:41>一度動くようになると
パスが通ってるから。
想定される状況で通るように場合分けしたら?
フォルダを開くという概念がどうもね。
0787デフォルトの名無しさん
2008/11/07(金) 17:01:27指定時間後に自動的に閉じることって可能でしょうか?
可能であればどうすればいいのでしょうか?
0788デフォルトの名無しさん
2008/11/07(金) 17:24:430789デフォルトの名無しさん
2008/11/07(金) 17:47:09TSplashForm
0790デフォルトの名無しさん
2008/11/07(金) 23:35:090791デフォルトの名無しさん
2008/11/08(土) 00:16:07Close();
Release();
で閉じれるね
0792デフォルトの名無しさん
2008/11/08(土) 02:51:270793デフォルトの名無しさん
2008/11/08(土) 04:17:33ってか、大麻付きダイアログを作ればいいだけだけど。
0794デフォルトの名無しさん
2008/11/08(土) 04:38:460795デフォルトの名無しさん
2008/11/10(月) 09:41:380796デフォルトの名無しさん
2008/11/10(月) 16:04:46pass = ID +"0"+IntToStr(I);
fp = fopen(pass.c_str(), "rb" );
fread(data,2,10,fp);
fclose(fp);
}
と途中まで作ったのですが、この9個の読み込んだ配列データ(data)を9個別々に
A1〜A9(AnsiString)で格納したいのですがやりかたがわからないのでアドバイスください。
A1にはID01の読み込んだ配列データ・・・A9にはID09の配列データです。
0797デフォルトの名無しさん
2008/11/10(月) 16:16:550798796
2008/11/10(月) 16:25:20AnsiStringでいいです。別のところでそれぞれの配列を使って計算したいので。。
どういう風に書けば9個格納できるでしょうか。
0799デフォルトの名無しさん
2008/11/10(月) 16:36:030800デフォルトの名無しさん
2008/11/10(月) 16:46:49char wk[128];
AnsiString A[10];
for (int I = 1; I <=9 ; I++){
pass = ID +"0"+IntToStr(I);
fp = fopen(pass.c_str(), "rb" );
fread(wk,2,10,fp);
fclose(fp);
A[i] = wk;
}
0801796
2008/11/10(月) 17:26:07うまくいきません。
Memo1->Lines->Add(A1)で確認してみたのですがうまく読み込めていませんでした。
読み込むファイルが数百行というのは関係あるのでしょうか。
A1 = 1回目に読み込んだ配列
A2 ・・・
という感じでやりたいのですが。。。
とりあえずがんばってやってみます。
0802デフォルトの名無しさん
2008/11/10(月) 17:35:33んじゃさ、TStringList使えばいいんでないの?
TStringList *sl = TStringList();
sl->LoadFromFile("ファイル名"");
for( int i = 0; i < sl->Count; i ++ ){
aa = sl->Strings[i];
}
こんな感じでどうよ?
0803デフォルトの名無しさん
2008/11/10(月) 17:59:23AnsiString kekka;
for(int I=0;I<20; I++){
kekka = Memo1->Lines->Strings[I];
}
という風に試したのですがMemo1に表示させてある内容と違う値が出てしまいました。
わからないのでアドバイスください。
0804デフォルトの名無しさん
2008/11/11(火) 00:44:15kekkaは一つしか無いでしょ。
Memo1->Lines->Stringis[I]は20個あるでしょ。
20回ループまわしてもkekkaは一つしか無いでしょ。
0805デフォルトの名無しさん
2008/11/11(火) 10:28:51っていうか俺のTStringListは無視か!!
それにkekkaを配列にすりゃいいって最初に言っただろう!
0806デフォルトの名無しさん
2008/11/11(火) 14:56:40それで出来るようになるのってちゃんとしたプログラムがいくつも書けるようになってからだろうに。
クラス図とかメモリマップとか妄想絵図とか、何でもいいからソースコード以外の何かで書いてみたら
自分がどこに引っかかってるのか分かるような気がする。
0807デフォルトの名無しさん
2008/11/11(火) 19:02:060808デフォルトの名無しさん
2008/11/11(火) 21:27:18妄想を紙に書いてみると
自分のアホさが
よくわかる。
0809デフォルトの名無しさん
2008/11/13(木) 10:39:08・BCB5
・複数のカラム追加したListViewを設置
・上記カラムの1つはAutoSize
このListViewにデータを流し込んだ時に後から発生した
縦スクロールバー分の幅が自動調整されないんだけど
これを自動調整するには何がベストなんでしょうか?
今は仕方なくデータを流し込んだ後にListViewの幅を
-1 >> +1として調整してます
0810デフォルトの名無しさん
2008/11/13(木) 10:58:48ListViewの幅か?カラムか?
0811デフォルトの名無しさん
2008/11/13(木) 11:53:38右端が発生したスクロールバーで隠れるのよ・・・
0812デフォルトの名無しさん
2008/11/14(金) 10:51:350813デフォルトの名無しさん
2008/11/17(月) 12:48:11・やりたいこと
クライアントアプリ(C++B)からPostgreSQLへ接続したい。
・やったこと
1.Windows版 Postgres8.2.6(日本語版)をインストール
(インストールのさいC開発モジュールも一緒にインストールしました)
2.インストールされたlibpq.dllを使って、impdll libpq-bc.lib libpq.dll
3.できたlibpq-bc.libをアプリフォルダへコピー
4.Postgresのincludeフォルダにある、libpq-fe.hをアプリフォルダへコピー
5.プロジェクトの追加から、libpq-bc.libを追加。
6.myapp.hに #include "libpq-fe.h"
7.myapp.cppで、とりあえず接続テスト PQconnectdbを実行
コンパイルすると
[リンカ エラー] 外部シンボル '_PQconnectdb' が未解決(略\APPLICATION\MYAPP.OBJ が参照)
と出て、うまくいきません。
足りない操作、間違った操作をやっていたら教えてください。
お願いします。
0814デフォルトの名無しさん
2008/11/17(月) 15:35:150815デフォルトの名無しさん
2008/11/17(月) 15:39:130816デフォルトの名無しさん
2008/11/17(月) 15:56:250817デフォルトの名無しさん
2008/11/17(月) 15:59:290818デフォルトの名無しさん
2008/11/17(月) 16:00:010819デフォルトの名無しさん
2008/11/17(月) 16:19:590820デフォルトの名無しさん
2008/11/17(月) 16:25:56プログラム板がID制になってもいいのか
0821デフォルトの名無しさん
2008/11/17(月) 16:28:33大賛成
0822デフォルトの名無しさん
2008/11/17(月) 16:29:030823デフォルトの名無しさん
2008/11/17(月) 16:46:110824814
2008/11/17(月) 19:14:130825デフォルトの名無しさん
2008/11/17(月) 19:24:180826デフォルトの名無しさん
2008/11/18(火) 00:41:260827デフォルトの名無しさん
2008/11/18(火) 10:17:080828デフォルトの名無しさん
2008/11/18(火) 10:32:490829デフォルトの名無しさん
2008/11/18(火) 10:47:530830811
2008/11/18(火) 16:14:59変化するイベントで自分で再設定すれば出来るのは知っているんですが
コンポーネントのサイズ変更を行えば自動でやってくれる以上
なんとかそれを直接行えないかなと思ってるんですか・・・
0831デフォルトの名無しさん
2008/11/21(金) 18:14:21読み込みA1とA2にTStringlistとして格納したいのですが格納したいのですがどのようなプログラムにすればよいのでしょうか。
0001, -2.06167, -719.351, EEE
0002, -2.05553, -710.148, RRR
0003, -2.04654, -698.637, EEE
0004, -2.04326, -689.907, RRR
・
・
・
1499, -2.03713, -678.463, RRR
1500, -2.03099, -667.071, RRR
このような感じの配列で1500行並んでいます。
0832デフォルトの名無しさん
2008/11/21(金) 18:24:180833デフォルトの名無しさん
2008/11/21(金) 18:34:24Memo2にLoadFromfileなどでxを書き出すと
-2.06167
-2.05553
-2.04654
-2.04326
・
・
yを書き出すと
EEE
RRR
EEE
RRR
(空白の場合もあるのでそれも一行として数える)
・
・
・
などといった具合にxとyに格納したいのです。
TStringといいましたが格納の仕方がそれだけしかしらないので
AnsiStringなどでもできるのでしたらどちらかアドバイスお願いします。
0834デフォルトの名無しさん
2008/11/22(土) 19:34:06for( int i = 0; i < 1500; i++ ){
memo1->Lines->Add( 1行分のcsv文字列 );
x->Add( 2列目の情報 );
y->Add( 4列目の情報 );
}
どうしてもmemo1の内容を再利用するしかないなら項目分離用TStringListを用意して
TStringList* Values;
Values->Delimiter = ',';
for( int i = 0; i < 1500; i++ ){
Values->DelimitedText = memo1->Lines->Strings[ i ];
x->Add( Values->Strings[ 1 ] ); //2列目の情報
y->Add( Values->Strings[ 3 ] ); //4列目の情報
}
0835デフォルトの名無しさん
2008/11/23(日) 17:20:19遅くなってしまってすいません、そして説明不足でした・・・。
できればMemo1の内容を再利用したいのですが、c++builderのバージョンが5なので
Delimiterが使えないようなのです・・・
お手数ですがDelimitedText以外での表し方を教えていただけないでしょうか。
0836デフォルトの名無しさん
2008/11/23(日) 18:50:25TStringList* Values;
for( int i = 0; i < 1500; i++ ){
Values->CommaText = memo1->Lines->Strings[ i ];
x->Add( Values->Strings[ 1 ].Trim() ); //2列目の情報
y->Add( Values->Strings[ 3 ].Trim() ); //4列目の情報
}
0837デフォルトの名無しさん
2008/11/23(日) 19:30:27返信ありがとうございます.
おっしゃられたようにButton1にこのように付け加えてMemo2とMemo3に書き出すようにしたいのですが
Memo1に排出されたあとボタンを押すと読み込み違反が起こってしまいます。
これは何が原因となってるんでしょうか Memo2と3に書き出すプログラムは後から付け加えたものなので
それ以前のところでエラーが起こっているようです。
TStringList* Values;
TStringList* x;
TStringList* y;
for( int i = 0; i<Memo1->Lines->Count; i++ ){ //1500行のみとは限らない場合があるため
Values->CommaText = Memo1->Lines->Strings[ i ];
x->Add( Values->Strings[ 1 ].Trim() );
y->Add( Values->Strings[ 3 ].Trim() );
Memo2->Lines->AddStrings(x);
Memo3->Lines->AddStrings(y);
}
0838デフォルトの名無しさん
2008/11/23(日) 20:05:59TStringList* Values = new TStringList;
使用後
delete Values;
0839デフォルトの名無しさん
2008/11/24(月) 19:39:22{
TStringList* Values = new TStringList;
TStringList* x = new TStringList;
TStringList* y = new TStringList;
for( int i = 0; i<Memo1->Lines->Count; i++ ){
Values->CommaText = Memo1->Lines->Strings[ i ];
x->Add( Values->Strings[ 1 ].Trim() );
y->Add( Values->Strings[ 3 ].Trim() );
Memo2->Lines->AddStrings(x);
Memo3->Lines->AddStrings(y);
delete Values;
delete x;
delete y;
}
}
このような形でやってみて読み込み違反は回避できたのですが、次はリストの
インデックスは範囲を超えていますといわれてしまいます。
CSV形式なのですがコンマの後、数字の桁数を合わせようと半角スペースもついてしまっており
それまで読み込んでいるので、それが原因だとは思うのですが.Trim()がついているので
実際何が原因なのかわからない状況です;
またEEE,RRRのところは空行であるときもありその際にはスペースがつけられているのですが
そこをEEE,RRRだけでなく同じ行数文だけスペースも含め格納したいのですが、これは無理でしょうか?
0840デフォルトの名無しさん
2008/11/24(月) 19:53:320002, -2.05553, -710.148, RRR
0003, -2.04654, -698.637, EEE
0004, -2.04326, -689.907, RRR
0005, -2.04440, -898.545,
0006, -2,03434, -434.434, EEE
0007, -2,67665, -775,443,
0008, -2.34443, -566,886, RRR
・
・
・
実際このような感じのCSV形式の配列で格納したい配列は
xに yに
-2.06167 EEE
-2.05553 RRR
-2.04654 EEE
-2.04326 RRR
-2.04440 (空行)
-2,03434 EEE
-2,67665 (空行)
-2.34443 RRR
・ ・
・ ・
・ ・
このようにTStringで格納していきたいのです。
無理難題を言ってしまいすいません。
0841デフォルトの名無しさん
2008/11/24(月) 19:55:12もしよろしければアドバイスお願いします。
0842デフォルトの名無しさん
2008/11/25(火) 00:27:26ループ中で何度もdeleteするのがおかしいことに気付かないとまずいよ。
Memo2にxをAddStringsするのもループを抜けてからじゃないと、
1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,…みたいに行の登録が重複する。
Memo1が1500行だとMemo2、Memo3は(Σk=n(n+1)/2になるので)1125750行になってしまうよ。
それだけ大きいとTMemoコンポーネントのメモリ制限に引っかかってるんじゃないかな?
てかMemo2、Memo3が最初からあるのならx、yなんて不要。直接入れればいい。
4つめがEEEでもRRRでもなく空の時にスペース三つ出力したいなら
this->Memo2->Lines->Clear();
this->Memo3->Lines->Clear();
TStringList* Values = new TStringList;
AnsiString asSpacer = " "; //スペース三つ
for( int i = 0; i < Memo1->Lines->Count; i++ ){
Values->CommaText = Memo1->Lines->Strings[ i ];
this->Memo2->Lines->Add( Values->Strings[ 1 ].Trim() );
AnsiString as4thValue = Values->Strings[ 3 ].Trim();
this->Memo3->Lines->Add( as4thValue.IsEmpty() ? asSpacer : as4thValue );
}
delete Values;
あと >>840 で出ているデータが本物のデータからのコピーなら、ピリオドとカンマが
入力ミスで混ざってて、自動で正しく分離する事は無理。
0843デフォルトの名無しさん
2008/11/28(金) 02:16:31TColorは24bit専用なのでしょうか?完全な白の時は透過になるのですが、それ以外は全く透過しません。
色によって透過度を変えたいのですが、上手くいかないのが現状です。
PixelFormatで32bitの指定はしているのですが・・・。
すいませんがよろしくお願いします。
0844デフォルトの名無しさん
2008/11/28(金) 11:26:00BDS2006を使っています。
ファイルの数が多くなってきたので
ヘッダファイルを、header1.hというファイルにまとめて
#include "Main.h"
#include "About.h"
・・・
という感じに記述して
.cppファイルの方には、
#include header1.h
と記述するようにしました。
このように変更してから、
再構築を行い、プログラムを実行し
バージョン情報を表示すると、EClassNotFound
TImageが見つかりませんというエラーがたまに出るようになりました。
About.cppをコンパイルし直すと正常に動作します。
他のクラスでも同じように、エラーが発生し再コンパイルすると正常になることがあります。
どうしてこのようなことが発生し、どうすれば回避できるのでしょうか。
ヘッダをまとめて1個のファイルにしてしまうのはダメなのでしょうか。
0845デフォルトの名無しさん
2008/11/28(金) 14:26:150846デフォルトの名無しさん
2008/11/28(金) 15:43:040847デフォルトの名無しさん
2008/11/28(金) 15:49:080848デフォルトの名無しさん
2008/11/29(土) 01:55:440849デフォルトの名無しさん
2008/11/29(土) 09:34:25TSearchRecのSize変数から取ったのですが、
ファイルサイズが大きいと戻り値がマイナスになってしまいます。
大きいファイルサイズでも正確に取得するには
どうすればいいのでしょうか。
0850デフォルトの名無しさん
2008/11/29(土) 10:20:560851デフォルトの名無しさん
2008/11/29(土) 10:22:520852デフォルトの名無しさん
2008/11/29(土) 10:33:20TSearchRec.FindData.nFileSizeLow
0853デフォルトの名無しさん
2008/11/29(土) 10:34:580854デフォルトの名無しさん
2008/11/29(土) 17:44:27これで行けるはずなんだが・・・うーんわからん
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* bt = new Graphics::TBitmap;
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 100, 0};
TCanvas* ti = Image1->Canvas;
RGBQUAD rgbq;
bt->Width = 256;
bt->Height = 256;
bt->PixelFormat = pf32bit;
for (int i = 0; i < 255; i++) {
int* sc = reinterpret_cast<int*>(bt->ScanLine[i]);
for (int j = 0; j < 255; j++) {
rgbq.rgbBlue = i;
rgbq.rgbGreen = j;
sc[j] = reinterpret_cast<int&>(rgbq);
}
}
BOOL RESULT =
::AlphaBlend(ti->Handle, 0, 0, Image1->Width, Image1->Height,
bt->Handle, 0, 0, bt->Width, bt->Height,
blend);
if (RESULT == FALSE) {
Application->MessageBox(L"失敗!", L"", MB_OK);
}
delete bt;
}
0855デフォルトの名無しさん
2008/11/30(日) 00:35:28Win32スレで聞いているうちにバグの原因がわかったので、
AlphaBlend per Pixelのプログラムを貼っておきます。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* bt = new Graphics::TBitmap;
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
TImage* ti = Image1;
RGBQUAD rgbq;
bt->Width = 256;
bt->Height = 256;
bt->PixelFormat = pf32bit;
int k = 0;
for (int i = 0; i < 255; i++, k++) {
int* sc = reinterpret_cast<int*>(bt->ScanLine[i]);
for (int j = 0; j < 255; j++) {
rgbq.rgbBlue = i;
rgbq.rgbGreen = j;
rgbq.rgbRed = 0;
rgbq.rgbReserved = k;
sc[j] = reinterpret_cast<int&>(rgbq);
}
}
BOOL RESULT =
::AlphaBlend(ti->Canvas->Handle, 0, 0, ti->Width, ti->Height,
bt->Canvas->Handle, 0, 0, bt->Width, bt->Height,
blend);
int err = GetLastError();
const wchar_t* str = WideString().sprintf(L"失敗!%d", err).c_bstr();
■ このスレッドは過去ログ倉庫に格納されています