[表示 : 全て 最新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


755 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:56:44 ]
自分でOnChange呼べつったんだ馬鹿かお前

756 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:21:13 ]
>>755
Are you a big baka ?
スクロールした結果、OnChange()が発生するのであって
OnChange()を自前で呼んでも無意味じゃん。


757 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:25:37 ]
もも・・・
しかして>>755
OnChange()を呼べばスクロールが発生するとでも思っているのかぁ
プププ


758 名前:755 mailto:sage [2008/10/28(火) 19:00:09 ]
私のために争うのはもうやめてっ

プログラム上からイベントを発生させる方法ってあります?

759 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:06:50 ]
自分宛にメッセージ投げればいいと思うよ

760 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:13:14 ]
>>755
嘘はいかんな

761 名前:752 mailto:sage [2008/10/29(水) 02:51:14 ]
名前間違えた、こっちだ
どうやってやればいいんでしょう・・・?

762 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 01:22:01 ]
標準のボタンの背景や形を変えることってできますか?
BitBtnは画像を配置すると文字が消えてしまうので、他に何か方法は無いでしょうか?
よろしくお願いします。

763 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 15:51:47 ]
>>762
起動時bitbtnにするDIBにフォントを使って字を書いてしまえばいいじゃないかw
元の画像は普通のボタンから抜くなりなんなりすればいいジャマイカ

そしてそれをフリーで後悔すれば….
と思う前に誰かすでに作ってないかとかおもってググ…



764 名前:デフォルトの名無しさん [2008/11/01(土) 15:52:23 ]
同じフォルダにあるテキストデータA001〜A020を同時に読み込んで
その中の計算を行いそれを50個またテキストデータとして保存したいのですが
テキストデータを同時に読む込むプログラムとそしてそれを同時に書き出す方法が
どうしてもわかりません。よければアドバイスお願いします。

765 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 17:32:46 ]
いちどきに読み込むことや書き出すことはできてもどうじに読んだり書き出したりするのは非常に困難です

766 名前:デフォルトの名無しさん [2008/11/01(土) 18:48:32 ]
>>765
すみません、説明不足だったようです。
同時にではなくたとえばA001〜020で読み込む場合にfor文などで回して
自動ですべてを順に読み込み書き出すようにしたいのです


767 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:10:09 ]
>>766
for文で回して順に読み込み書き出しすればいいと思うよ

と思ったが「同じフォルダにあるテキストデータ」ってファイルのこと?
ならファイルを順繰りに読んで希望のファイルだけ読み込み書き出しすれば良いんじゃないかね

768 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:51:35 ]
TStringList使っとけ

769 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 23:37:20 ]
具体的に何をする方法がわからんのか
そのへんが全然わからんから
エスパーじゃないから
答えようがねえなぁ
文章から類推すると、何もかもまったくわからんようにしか見えんが。


770 名前:デフォルトの名無しさん mailto:sage [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文が終了したあとに処理されてしまいます。
なぜでしょうか?

771 名前:デフォルトの名無しさん mailto:age [2008/11/02(日) 14:03:05 ]
連投すみません。

あともう一つ教えてください。

出力ウィンドウに、テスト的に変数の値などを表示させたいのですが、

Console::WriteLine("aaa");
などとしてもまったく表示されません。何か方法はありますでしょうか?
よろしくお願いします。

772 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:27:08 ]
>>770 誤爆?
ここは、
くだすれC++Builder(超初心者用)その3



773 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:57:22 ]
>>772
すみません。間違えました><



774 名前:デフォルトの名無しさん [2008/11/03(月) 18:05:44 ]
読み込みと保存について質問なんですが
バイナリ形式のファイル読み込んで、その内容を同じファイル名でテキスト形式に置き換えて保存したいのですが
それを手動保存するのではなく自動で同じファイルネームでそのフォルダ内に生成されるプログラムを作りたいのですがどのようにすればよいのでしょうか


775 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:49:03 ]
>>774
スレ違い
C/C++の宿題を片付けます 117代目
pc11.2ch.net/test/read.cgi/tech/1225320579/
こっちだな


776 名前:デフォルトの名無しさん mailto:save [2008/11/03(月) 18:55:33 ]
>>775
すいません、これをSaveDialogやOpenDialogなどを用いてc++builderで
実行しなくてはいけないのですが読み込んだファイルを同じ名前のテキスト形式で自動生成する保存の方法を教えていただけないでしょうか

777 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:46:17 ]
>>776
君の質問に回答できる奴はエスパー


778 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:06:21 ]
そんな事できません
バイナリの中身が構造体だったり、浮動小数点と整数が
交互に書かれていたりする時どうやって判別するのですか?

コンピュータから見るとどちらもただの0と1の羅列ですよ?

779 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 04:10:55 ]
00010111000 とかをテキストで保存するんだろ。

780 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 12:41:53 ]
それはファイルダンプじゃん。


781 名前:デフォルトの名無しさん mailto:sage [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にフォルダ名が入っています。

782 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 14:14:42 ]
Execute()する前に
DirectoryExists(OpenDialog1->InitialDir)
してみい
falseが返ってくるからさ




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

FileNameにフルパスでいれときゃいい



784 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 15:16:55 ]
>>782
はい、falseでした。
一度動くようになると、PCを再起動してもtrueですね・・・。
なぜでしょう?

>>783
汚い書き方ですが、
OpenDialog1->FileName = OpenDialog1->InitialDir;
をExecute()の前に置いたら動作しました。
Execute()で最初に開くフォルダはFileNameのフォルダで、InitialDirでは無いってことでよろしいでしょうか?

785 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 17:13:51 ]
さっさと教えてくださいよ。グズは嫌いですよ。
こっちも忙しいんだから早くして下さいね。

786 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:57:41 ]
>>784
>一度動くようになると
パスが通ってるから。
想定される状況で通るように場合分けしたら?
フォルダを開くという概念がどうもね。

787 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:01:27 ]
ShowMessage()で表示したメッセージを
指定時間後に自動的に閉じることって可能でしょうか?
可能であればどうすればいいのでしょうか?

788 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:24:43 ]
根性

789 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:47:09 ]
>>787
TSplashForm

790 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:35:09 ]
タイマーで閉じればいいじゃん。


791 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:16:07 ]
タイマーイベントを設定して

Close();
Release();

で閉じれるね

792 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:51:27 ]
Delphi/C++Builderにはスプラッシュウィンドウが用意されてなかったっけ?

793 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:17:33 ]
VC++には昔っからあるのにね。
ってか、大麻付きダイアログを作ればいいだけだけど。




794 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:38:46 ]
面倒くさい。とか言ってる奴がBCB使うわけで。

795 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:41:38 ]
あるある

796 名前:デフォルトの名無しさん [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の配列データです。

797 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:16:55 ]
AnsiStringの配列じゃダメなのか?

798 名前:796 [2008/11/10(月) 16:25:20 ]
>>797
AnsiStringでいいです。別のところでそれぞれの配列を使って計算したいので。。
どういう風に書けば9個格納できるでしょうか。

799 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:36:03 ]
AnsiStringの配列でいいじゃないかw

800 名前:デフォルトの名無しさん mailto:sage [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;
}

801 名前:796 [2008/11/10(月) 17:26:07 ]
>>800

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

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

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

とりあえずがんばってやってみます。

802 名前:デフォルトの名無しさん mailto:sage [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];
}
こんな感じでどうよ?

803 名前:デフォルトの名無しさん [2008/11/10(月) 17:59:23 ]
Memoに表示された20行の数字をkekkaに入れたくて

AnsiString kekka;

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

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

という風に試したのですがMemo1に表示させてある内容と違う値が出てしまいました。
わからないのでアドバイスください。




804 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:44:15 ]
>>803
kekkaは一つしか無いでしょ。
Memo1->Lines->Stringis[I]は20個あるでしょ。
20回ループまわしてもkekkaは一つしか無いでしょ。

805 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:28:51 ]
>>803
っていうか俺のTStringListは無視か!!
それにkekkaを配列にすりゃいいって最初に言っただろう!

806 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 14:56:40 ]
頭の中だけでなんとなく考えてるんだろうなぁ・・・
それで出来るようになるのってちゃんとしたプログラムがいくつも書けるようになってからだろうに。
クラス図とかメモリマップとか妄想絵図とか、何でもいいからソースコード以外の何かで書いてみたら
自分がどこに引っかかってるのか分かるような気がする。

807 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:02:06 ]
プログラミングに限らず、段取りをすっ飛ばした想像しか出来ない奴っているからな。

808 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:27:18 ]
んだんだ。
妄想を紙に書いてみると
自分のアホさが
よくわかる。


809 名前:デフォルトの名無しさん [2008/11/13(木) 10:39:08 ]
非常に今更な感があるけど出来たら教えて欲しいことが・・・

・BCB5
・複数のカラム追加したListViewを設置
・上記カラムの1つはAutoSize

このListViewにデータを流し込んだ時に後から発生した
縦スクロールバー分の幅が自動調整されないんだけど
これを自動調整するには何がベストなんでしょうか?

今は仕方なくデータを流し込んだ後にListViewの幅を
-1 >> +1として調整してます

810 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:58:48 ]
何で調整したいんだ?
ListViewの幅か?カラムか?

811 名前:デフォルトの名無しさん [2008/11/13(木) 11:53:38 ]
カラムの方
右端が発生したスクロールバーで隠れるのよ・・・

812 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 10:51:35 ]
TListView::OnInsertでTListView::ClientWidth読んで調整すればいいんじゃない?

813 名前:デフォルトの名無しさん mailto:sage [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 が参照)
と出て、うまくいきません。

足りない操作、間違った操作をやっていたら教えてください。
お願いします。



814 名前:デフォルトの名無しさん [2008/11/17(月) 15:35:15 ]
”バリアントの型変換が不正です”って出たのですがどういうときに出るんですか?

815 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:39:13 ]
バリアントの型変換が不正な時に出るんだろうよ

816 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:56:25 ]
バリアントの型変換が不正な時に出るんだよ

817 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:59:29 ]
バリアントの型変換が不正な時に出るんよ

818 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:00:01 ]
バリアントの型変換が不正な時に出るよ

819 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:19:59 ]
バリウム飲んだから白いうんこが出るんだよ

820 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:25:56 ]
お前らあんまり荒らすな
プログラム板がID制になってもいいのか

821 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:28:33 ]
>ID制
大賛成

822 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:29:03 ]
ごみん

823 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 16:46:11 ]
大貧民



824 名前:814 [2008/11/17(月) 19:14:13 ]
ありがとうございます。解決しました

825 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 19:24:18 ]
むしろID制にしてくれ

826 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:41:26 ]
むしろBe強制に

827 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 10:17:08 ]
むしろ実名が表示されちゃうでいいよもう

828 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 10:32:49 ]
実名が表示されたら俺が超紳士なことがバレちゃうじゃないかやめろ

829 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 10:47:53 ]
んじゃ(仮名)てつけば問題ないよな

830 名前:811 [2008/11/18(火) 16:14:59 ]
>>812
変化するイベントで自分で再設定すれば出来るのは知っているんですが
コンポーネントのサイズ変更を行えば自動でやってくれる以上
なんとかそれを直接行えないかなと思ってるんですか・・・

831 名前:デフォルトの名無しさん [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行並んでいます。


832 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:24:18 ]
どういう風に格納したいんだ

833 名前:デフォルトの名無しさん [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などでもできるのでしたらどちらかアドバイスお願いします。



834 名前:デフォルトの名無しさん mailto:sage [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列目の情報
}


835 名前:デフォルトの名無しさん [2008/11/23(日) 17:20:19 ]
>>834
遅くなってしまってすいません、そして説明不足でした・・・。
できればMemo1の内容を再利用したいのですが、c++builderのバージョンが5なので
Delimiterが使えないようなのです・・・

お手数ですがDelimitedText以外での表し方を教えていただけないでしょうか。


836 名前:デフォルトの名無しさん mailto:sage [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列目の情報
}

837 名前:デフォルトの名無しさん [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);
}

838 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 20:05:59 ]
ちゃんと Values、x、y は new して使ってる?
TStringList* Values = new TStringList;
使用後
delete Values;

839 名前:デフォルトの名無しさん [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だけでなく同じ行数文だけスペースも含め格納したいのですが、これは無理でしょうか?


840 名前:デフォルトの名無しさん [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で格納していきたいのです。
無理難題を言ってしまいすいません。

841 名前:デフォルトの名無しさん [2008/11/24(月) 19:55:12 ]
delete の位置は何度も変えてみましたが結果は同じでした。
もしよろしければアドバイスお願いします。

842 名前:デフォルトの名無しさん mailto:sage [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 で出ているデータが本物のデータからのコピーなら、ピリオドとカンマが
入力ミスで混ざってて、自動で正しく分離する事は無理。

843 名前:デフォルトの名無しさん [2008/11/28(金) 02:16:31 ]
32BitのBitmapへ色を塗る時、アルファチャンネルの指定はどのように行えばよろしいのでしょうか?
TColorは24bit専用なのでしょうか?完全な白の時は透過になるのですが、それ以外は全く透過しません。
色によって透過度を変えたいのですが、上手くいかないのが現状です。
PixelFormatで32bitの指定はしているのですが・・・。
すいませんがよろしくお願いします。



844 名前:デフォルトの名無しさん [2008/11/28(金) 11:26:00 ]
教えてください。
BDS2006を使っています。
ファイルの数が多くなってきたので
ヘッダファイルを、header1.hというファイルにまとめて
#include "Main.h"
#include "About.h"
・・・
という感じに記述して
.cppファイルの方には、
#include header1.h
と記述するようにしました。
このように変更してから、
再構築を行い、プログラムを実行し
バージョン情報を表示すると、EClassNotFound
TImageが見つかりませんというエラーがたまに出るようになりました。
About.cppをコンパイルし直すと正常に動作します。
他のクラスでも同じように、エラーが発生し再コンパイルすると正常になることがあります。
どうしてこのようなことが発生し、どうすれば回避できるのでしょうか。
ヘッダをまとめて1個のファイルにしてしまうのはダメなのでしょうか。


845 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 14:26:15 ]
一度プリコンパイルヘッダ消せ

846 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 15:43:04 ]
いいやお前が消えろ!

847 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 15:49:08 ]
ヒント:あらしはスルーwww

848 名前:デフォルトの名無しさん [2008/11/29(土) 01:55:44 ]
すいません、どなたか>>843にも答えていただけないでしょうか。

849 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 09:34:25 ]
ファイルのサイズを取得したくて
TSearchRecのSize変数から取ったのですが、
ファイルサイズが大きいと戻り値がマイナスになってしまいます。
大きいファイルサイズでも正確に取得するには
どうすればいいのでしょうか。

850 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:20:56 ]
APIのFindFirstFile、GetFileSize、GetFileSizeEx

851 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:22:52 ]
もしくはバージョンうp。今はTSearchRecのSizeは__int64になってるらしいので。

852 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:33:20 ]
TSearchRec.FindData.nFileSizeHigh
TSearchRec.FindData.nFileSizeLow

853 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:34:58 ]
あ、そうか。失礼。



854 名前:デフォルトの名無しさん mailto:sage [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;
}

855 名前:デフォルトの名無しさん mailto:sage [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();






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

前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