トップページ⇒tech
981コメント344KB

くだすれ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:13
>>755
Are you a big baka ?
スクロールした結果、OnChange()が発生するのであって
OnChange()を自前で呼んでも無意味じゃん。
0757デフォルトの名無しさん2008/10/28(火) 17:25:37
もも・・・
しかして>>755は
OnChange()を呼べばスクロールが発生するとでも思っているのかぁ
プププ
07587552008/10/28(火) 19:00:09
私のために争うのはもうやめてっ

プログラム上からイベントを発生させる方法ってあります?
0759デフォルトの名無しさん2008/10/28(火) 19:06:50
自分宛にメッセージ投げればいいと思うよ
0760デフォルトの名無しさん2008/10/28(火) 23:13:14
>>755
嘘はいかんな
07617522008/10/29(水) 02:51:14
名前間違えた、こっちだ
どうやってやればいいんでしょう・・・?
0762デフォルトの名無しさん2008/11/01(土) 01:22:01
標準のボタンの背景や形を変えることってできますか?
BitBtnは画像を配置すると文字が消えてしまうので、他に何か方法は無いでしょうか?
よろしくお願いします。
0763デフォルトの名無しさん2008/11/01(土) 15:51:47
>>762
起動時bitbtnにするDIBにフォントを使って字を書いてしまえばいいじゃないかw
元の画像は普通のボタンから抜くなりなんなりすればいいジャマイカ

そしてそれをフリーで後悔すれば….
と思う前に誰かすでに作ってないかとかおもってググ…
0764デフォルトの名無しさん2008/11/01(土) 15:52:23
同じフォルダにあるテキストデータA001〜A020を同時に読み込んで
その中の計算を行いそれを50個またテキストデータとして保存したいのですが
テキストデータを同時に読む込むプログラムとそしてそれを同時に書き出す方法が
どうしてもわかりません。よければアドバイスお願いします。
0765デフォルトの名無しさん2008/11/01(土) 17:32:46
いちどきに読み込むことや書き出すことはできてもどうじに読んだり書き出したりするのは非常に困難です
0766デフォルトの名無しさん2008/11/01(土) 18:48:32
>>765
すみません、説明不足だったようです。
同時にではなくたとえばA001〜020で読み込む場合にfor文などで回して
自動ですべてを順に読み込み書き出すようにしたいのです
0767デフォルトの名無しさん2008/11/01(土) 20:10:09
>>766
for文で回して順に読み込み書き出しすればいいと思うよ

と思ったが「同じフォルダにあるテキストデータ」ってファイルのこと?
ならファイルを順繰りに読んで希望のファイルだけ読み込み書き出しすれば良いんじゃないかね
0768デフォルトの名無しさん2008/11/01(土) 20:51:35
TStringList使っとけ
0769デフォルトの名無しさん2008/11/01(土) 23:37:20
具体的に何をする方法がわからんのか
そのへんが全然わからんから
エスパーじゃないから
答えようがねえなぁ
文章から類推すると、何もかもまったくわからんようにしか見えんが。
0770デフォルトの名無しさん2008/11/02(日) 13:55:50
教えてください。


private: 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
>>770 誤爆?
ここは、
くだすれC++Builder(超初心者用)その3

0773デフォルトの名無しさん2008/11/02(日) 14:57:22
>>772
すみません。間違えました><
0774デフォルトの名無しさん2008/11/03(月) 18:05:44
読み込みと保存について質問なんですが
バイナリ形式のファイル読み込んで、その内容を同じファイル名でテキスト形式に置き換えて保存したいのですが
それを手動保存するのではなく自動で同じファイルネームでそのフォルダ内に生成されるプログラムを作りたいのですがどのようにすればよいのでしょうか
0775デフォルトの名無しさん2008/11/03(月) 18:49:03
>>774
スレ違い
C/C++の宿題を片付けます 117代目
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
こっちだな
0776デフォルトの名無しさん2008/11/03(月) 18:55:33
>>775
すいません、これをSaveDialogやOpenDialogなどを用いてc++builderで
実行しなくてはいけないのですが読み込んだファイルを同じ名前のテキスト形式で自動生成する保存の方法を教えていただけないでしょうか
0777デフォルトの名無しさん2008/11/03(月) 19:46:17
>>776
君の質問に回答できる奴はエスパー
0778デフォルトの名無しさん2008/11/03(月) 20:06:21
そんな事できません
バイナリの中身が構造体だったり、浮動小数点と整数が
交互に書かれていたりする時どうやって判別するのですか?

コンピュータから見るとどちらもただの0と1の羅列ですよ?
0779デフォルトの名無しさん2008/11/04(火) 04:10:55
00010111000 とかをテキストで保存するんだろ。
0780デフォルトの名無しさん2008/11/04(火) 12:41:53
それはファイルダンプじゃん。
0781デフォルトの名無しさん2008/11/04(火) 13:44:41
失礼します。
OpenDialogを使用して、指定したフォルダからファイルを読み込みたいのですが、
最初の動作では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:42
Execute()する前に
DirectoryExists(OpenDialog1->InitialDir)
してみい
falseが返ってくるからさ


0783デフォルトの名無しさん2008/11/04(火) 14:41:37
そうじゃなくて

FileNameにフルパスでいれときゃいい
0784デフォルトの名無しさん2008/11/04(火) 15:16:55
>>782
はい、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
>>784
>一度動くようになると
パスが通ってるから。
想定される状況で通るように場合分けしたら?
フォルダを開くという概念がどうもね。
0787デフォルトの名無しさん2008/11/07(金) 17:01:27
ShowMessage()で表示したメッセージを
指定時間後に自動的に閉じることって可能でしょうか?
可能であればどうすればいいのでしょうか?
0788デフォルトの名無しさん2008/11/07(金) 17:24:43
根性
0789デフォルトの名無しさん2008/11/07(金) 17:47:09
>>787
TSplashForm
0790デフォルトの名無しさん2008/11/07(金) 23:35:09
タイマーで閉じればいいじゃん。
0791デフォルトの名無しさん2008/11/08(土) 00:16:07
タイマーイベントを設定して

Close();
Release();

で閉じれるね
0792デフォルトの名無しさん2008/11/08(土) 02:51:27
Delphi/C++Builderにはスプラッシュウィンドウが用意されてなかったっけ?
0793デフォルトの名無しさん2008/11/08(土) 04:17:33
VC++には昔っからあるのにね。
ってか、大麻付きダイアログを作ればいいだけだけど。
0794デフォルトの名無しさん2008/11/08(土) 04:38:46
面倒くさい。とか言ってる奴がBCB使うわけで。
0795デフォルトの名無しさん2008/11/10(月) 09:41:38
あるある
0796デフォルトの名無しさん2008/11/10(月) 16:04:46
for (int I = 1; I <=9 ; I++){

  pass = 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:55
AnsiStringの配列じゃダメなのか?
07987962008/11/10(月) 16:25:20
>>797
AnsiStringでいいです。別のところでそれぞれの配列を使って計算したいので。。
どういう風に書けば9個格納できるでしょうか。
0799デフォルトの名無しさん2008/11/10(月) 16:36:03
AnsiStringの配列でいいじゃないかw
0800デフォルトの名無しさん2008/11/10(月) 16:46:49
普通に配列使おうぜ?

char 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;
}
08017962008/11/10(月) 17:26:07
>>800

うまくいきません。
Memo1->Lines->Add(A1)で確認してみたのですがうまく読み込めていませんでした。

読み込むファイルが数百行というのは関係あるのでしょうか。

A1 = 1回目に読み込んだ配列
A2 ・・・
という感じでやりたいのですが。。。

とりあえずがんばってやってみます。
0802デフォルトの名無しさん2008/11/10(月) 17:35:33
>>801
んじゃさ、TStringList使えばいいんでないの?

TStringList *sl = TStringList();
sl->LoadFromFile("ファイル名"");
for( int i = 0; i < sl->Count; i ++ ){
  aa = sl->Strings[i];
}
こんな感じでどうよ?
0803デフォルトの名無しさん2008/11/10(月) 17:59:23
Memoに表示された20行の数字をkekkaに入れたくて

AnsiString kekka;

for(int I=0;I<20; I++){

kekka = Memo1->Lines->Strings[I];
    }

という風に試したのですがMemo1に表示させてある内容と違う値が出てしまいました。
わからないのでアドバイスください。
0804デフォルトの名無しさん2008/11/11(火) 00:44:15
>>803
kekkaは一つしか無いでしょ。
Memo1->Lines->Stringis[I]は20個あるでしょ。
20回ループまわしてもkekkaは一つしか無いでしょ。
0805デフォルトの名無しさん2008/11/11(火) 10:28:51
>>803
っていうか俺のTStringListは無視か!!
それにkekkaを配列にすりゃいいって最初に言っただろう!
0806デフォルトの名無しさん2008/11/11(火) 14:56:40
頭の中だけでなんとなく考えてるんだろうなぁ・・・
それで出来るようになるのってちゃんとしたプログラムがいくつも書けるようになってからだろうに。
クラス図とかメモリマップとか妄想絵図とか、何でもいいからソースコード以外の何かで書いてみたら
自分がどこに引っかかってるのか分かるような気がする。
0807デフォルトの名無しさん2008/11/11(火) 19:02:06
プログラミングに限らず、段取りをすっ飛ばした想像しか出来ない奴っているからな。
0808デフォルトの名無しさん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:48
何で調整したいんだ?
ListViewの幅か?カラムか?
0811デフォルトの名無しさん2008/11/13(木) 11:53:38
カラムの方
右端が発生したスクロールバーで隠れるのよ・・・
0812デフォルトの名無しさん2008/11/14(金) 10:51:35
TListView::OnInsertでTListView::ClientWidth読んで調整すればいいんじゃない?
0813デフォルトの名無しさん2008/11/17(月) 12:48:11
C++B 6をつかっています。

・やりたいこと
クライアントアプリ(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:15
”バリアントの型変換が不正です”って出たのですがどういうときに出るんですか?
0815デフォルトの名無しさん2008/11/17(月) 15:39:13
バリアントの型変換が不正な時に出るんだろうよ
0816デフォルトの名無しさん2008/11/17(月) 15:56:25
バリアントの型変換が不正な時に出るんだよ
0817デフォルトの名無しさん2008/11/17(月) 15:59:29
バリアントの型変換が不正な時に出るんよ
0818デフォルトの名無しさん2008/11/17(月) 16:00:01
バリアントの型変換が不正な時に出るよ
0819デフォルトの名無しさん2008/11/17(月) 16:19:59
バリウム飲んだから白いうんこが出るんだよ
0820デフォルトの名無しさん2008/11/17(月) 16:25:56
お前らあんまり荒らすな
プログラム板がID制になってもいいのか
0821デフォルトの名無しさん2008/11/17(月) 16:28:33
>ID制
大賛成
0822デフォルトの名無しさん2008/11/17(月) 16:29:03
ごみん
0823デフォルトの名無しさん2008/11/17(月) 16:46:11
大貧民
08248142008/11/17(月) 19:14:13
ありがとうございます。解決しました
0825デフォルトの名無しさん2008/11/17(月) 19:24:18
むしろID制にしてくれ
0826デフォルトの名無しさん2008/11/18(火) 00:41:26
むしろBe強制に
0827デフォルトの名無しさん2008/11/18(火) 10:17:08
むしろ実名が表示されちゃうでいいよもう
0828デフォルトの名無しさん2008/11/18(火) 10:32:49
実名が表示されたら俺が超紳士なことがバレちゃうじゃないかやめろ
0829デフォルトの名無しさん2008/11/18(火) 10:47:53
んじゃ(仮名)てつけば問題ないよな
08308112008/11/18(火) 16:14:59
>>812
変化するイベントで自分で再設定すれば出来るのは知っているんですが
コンポーネントのサイズ変更を行えば自動でやってくれる以上
なんとかそれを直接行えないかなと思ってるんですか・・・
0831デフォルトの名無しさん2008/11/21(金) 18:14:21
memo1にcsv形式で書き出したのですがコンマ区切りで2列目の配列と4列目の配列だけをCommaTextなどを使って最後まで
読み込み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:18
どういう風に格納したいんだ
0833デフォルトの名無しさん2008/11/21(金) 18:34:24
2番目の列だけの格納をx 4番目の列だけの格納をyとしたときに

Memo2に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:06
memo1に自分で書き出しているのなら、あとふたつTStringListを用意しておいて、memo1に各行を出力する裏で同時に書き込めばいいんじゃないの?

for( 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
>>834
遅くなってしまってすいません、そして説明不足でした・・・。
できればMemo1の内容を再利用したいのですが、c++builderのバージョンが5なので
Delimiterが使えないようなのです・・・

お手数ですがDelimitedText以外での表し方を教えていただけないでしょうか。
0836デフォルトの名無しさん2008/11/23(日) 18:50:25
じゃあこんなかんじで
TStringList* 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
>>836

返信ありがとうございます.
おっしゃられたように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:59
ちゃんと Values、x、y は new して使ってる?
TStringList* Values = new TStringList;
使用後
delete Values;
0839デフォルトの名無しさん2008/11/24(月) 19:39:22
new TStringListは入れてませんでした。ありがとうございます。

{
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:32
 0001, -2.06167, -719.351, EEE
 0002, -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
delete の位置は何度も変えてみましたが結果は同じでした。
もしよろしければアドバイスお願いします。
0842デフォルトの名無しさん2008/11/25(火) 00:27:26
>>839 試行錯誤中のコードだろうけど、どうみても一度しかnewしていない変数を
ループ中で何度も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:31
32BitのBitmapへ色を塗る時、アルファチャンネルの指定はどのように行えばよろしいのでしょうか?
TColorは24bit専用なのでしょうか?完全な白の時は透過になるのですが、それ以外は全く透過しません。
色によって透過度を変えたいのですが、上手くいかないのが現状です。
PixelFormatで32bitの指定はしているのですが・・・。
すいませんがよろしくお願いします。
0844デフォルトの名無しさん2008/11/28(金) 11:26:00
教えてください。
BDS2006を使っています。
ファイルの数が多くなってきたので
ヘッダファイルを、header1.hというファイルにまとめて
#include "Main.h"
#include "About.h"
・・・
という感じに記述して
.cppファイルの方には、
#include header1.h
と記述するようにしました。
このように変更してから、
再構築を行い、プログラムを実行し
バージョン情報を表示すると、EClassNotFound
TImageが見つかりませんというエラーがたまに出るようになりました。
About.cppをコンパイルし直すと正常に動作します。
他のクラスでも同じように、エラーが発生し再コンパイルすると正常になることがあります。
どうしてこのようなことが発生し、どうすれば回避できるのでしょうか。
ヘッダをまとめて1個のファイルにしてしまうのはダメなのでしょうか。
0845デフォルトの名無しさん2008/11/28(金) 14:26:15
一度プリコンパイルヘッダ消せ
0846デフォルトの名無しさん2008/11/28(金) 15:43:04
いいやお前が消えろ!
0847デフォルトの名無しさん2008/11/28(金) 15:49:08
ヒント:あらしはスルーwww
0848デフォルトの名無しさん2008/11/29(土) 01:55:44
すいません、どなたか>>843にも答えていただけないでしょうか。
0849デフォルトの名無しさん2008/11/29(土) 09:34:25
ファイルのサイズを取得したくて
TSearchRecのSize変数から取ったのですが、
ファイルサイズが大きいと戻り値がマイナスになってしまいます。
大きいファイルサイズでも正確に取得するには
どうすればいいのでしょうか。
0850デフォルトの名無しさん2008/11/29(土) 10:20:56
APIのFindFirstFile、GetFileSize、GetFileSizeEx
0851デフォルトの名無しさん2008/11/29(土) 10:22:52
もしくはバージョンうp。今はTSearchRecのSizeは__int64になってるらしいので。
0852デフォルトの名無しさん2008/11/29(土) 10:33:20
TSearchRec.FindData.nFileSizeHigh
TSearchRec.FindData.nFileSizeLow
0853デフォルトの名無しさん2008/11/29(土) 10:34:58
あ、そうか。失礼。
0854デフォルトの名無しさん2008/11/29(土) 17:44:27
>>848
これで行けるはずなんだが・・・うーんわからん
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:28
>>843
Win32スレで聞いているうちにバグの原因がわかったので、
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();
■ このスレッドは過去ログ倉庫に格納されています