08/08/13 23:46:54
実行コンテキストを無視しちゃだめ。メインスレッドに属するコード部分はメインスレッドのコンテキストで
実行する。PostMessageとかSynchronizeとかを使う。
644:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/14 18:47:21
アホな質問をお許し下さい。
Unit1.cppにくっついてるフォームForm1(Unit1.dfm)のMemo1に
Unit2.cppの処理から文字を入れたいときはどうすればよいでしょうか…
VBっぽくForm1->Memo1->Lines->Add(a);みたいにしたら出来るかなーと思ったけど駄目でした
Turbo C++を使っています。
646:デフォルトの名無しさん
08/08/14 18:48:37
Unit2.hppに#include "Unit1.hpp"
647:デフォルトの名無しさん
08/08/14 18:50:14
ファイル→ユニットヘッダーファイルの追加の方が楽か
648:645
08/08/14 19:10:20
おおお
出来ました。ありがとうございます!
649:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/18 00:43:53
それインポートライブラリが悪いか、nidaq32.dll にパスが通ってない、とか。
651:デフォルトの名無しさん
08/08/18 01:24:22
nidaq32.dllがあるフォルダで、コマンドプロンプトから実行したのですが・・・
これってIMPLIBの使い方間違ってます?
652:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/19 09:01:04
setlocale
654:デフォルトの名無しさん
08/08/19 09:09:17
>setlocale
これって何のライブラリになるんでしょ?C++標準?VCL?
それを知らないと、#includeできないので。
あと、getlocaleってのもあるんでしょうか?
655:デフォルトの名無しさん
08/08/19 09:18:02
ついでですが、
localelist
みたいな1式も取れるんでしょうか?
656:デフォルトの名無しさん
08/08/19 09:35:41
setlocaleはswscanfには関係ないと思うんですの。VC2005だとちゃんと動くし。
BCBでも他の文字列ではちゃんと動いてるし。
657:デフォルトの名無しさん
08/08/19 09:50:06
確かにBCBヘルプに
>Standard C++ Library: Class Reference
>locale
ってのがありますね。
これはクラスだからいろいろメソッド使えるかも。
でも、これで切り替えても、
AnsiToUtf8/Utf8ToAnsiのロケールとは無関係なんかなぁ。
あ~、テストプログラム作れば良いんだが、通勤時の暑さのせいでしんどい。
658:デフォルトの名無しさん
08/08/19 23:14:53
>>650
インポートライブラリが悪いって、どのような現象があるのでしょうか?
BuilderのバージョンはBuild10.166ですが・・・
659: ◆jButlJVlzY
08/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:デフォルトの名無しさん
08/08/21 02:12:21
すいません、どなたか>>658についてわからないでしょうか。
正解でなくても、何か参考になるようなことでもいいので意見を下さい。
よろしくお願いします。
661:デフォルトの名無しさん
08/08/21 07:47:42
implib nidaq32.dll nidaq32.lib と引数の順番を間違って実行して、nidaq32.dllが壊れて、その後
implib nidaq32.lib nidaq32.dll と順番を直したけどnidaq32.dllは壊れてるからエラー、とか?
一応本家にbcc用のインポートライブラリがあるみたいだけど。 ↓の一番下のzip
URLリンク(digital.ni.com)
662:デフォルトの名無しさん
08/08/21 20:09:54
>>649
NIDAQmxのDLLはnicaiu.dll見たいだよ?
NIDAQmxをインストールするとc:\WINDOWS\system32あたりにnicaiu.dllがあるはずだから
>implib nicaiu nicaiu.dll
でnicaiu.libを作ってリンクしてみたら?
663:デフォルトの名無しさん
08/08/22 02:33:44
>>661
すいません、一度壊してました・・・orz
>>662
NIDAQではなく、NIDAQmxを使うのですか!!
ありがとうございます、やってみます。
664:デフォルトの名無しさん
08/08/27 17:23:50
メインフォームのForm1と、 処理中ダイアログ用のForm2があって、 次のように使っています。
void __fastcall TForm1::ShowDialog()
{
Form2->Show();
for (i=0;i<100;i++) {... ;ProgressBar1->Position=i; ...}
Form2->Hide();
}
このForm2が前面に表示されている最中は、 Form1上にあるボタンをクリックしても
OnClickイベントが発生しないようにしたい(無視したい)のですが、 どうしたらいいのでしょうか?
Form2表示中にForm1上のボタンをクリックしたことによる処理が、 Form2が隠れた後に
実行されて困っています。
よろしくお願いします。
665:デフォルトの名無しさん
08/08/27 19:58:48
ShowModalでもしておけば?
666:664
08/08/27 20:39:55
>>665
ありがとうございます
667:デフォルトの名無しさん
08/08/28 03:05:24
8点ほど計測して、下の脳波測定のように境目をボカしたいのですが、何か良い方法はありますでしょうか?
URLリンク(www.speedreading.co.jp)
8つの円を描き、全体をぼかすように前後左右の平均を取るように処理してみたところ、何度もやるとものすごく時間がかかるので・・・。
ぼかし処理は下のものを使用しました。
URLリンク(gimite.net)
668:デフォルトの名無しさん
08/08/29 22:15:29
全然ダウンロードできないのですが、今日だけの現象ですか?
URLリンク(update.codegear.com)
ここに何度登録したことか。。。。
669:デフォルトの名無しさん
08/08/29 22:34:00
URLリンク(now.eloqua.com)
サーバーが見つかりません
670:デフォルトの名無しさん
08/08/31 00:08:20
そうだね
671:デフォルトの名無しさん
08/09/06 08:25:00
TurboC++ Professionalは、もうどこにも売ってないのですか?
672:デフォルトの名無しさん
08/09/06 10:46:04
初心者質問すいません
英単語の文字数を数えるにはどうすればいいですか?
673:デフォルトの名無しさん
08/09/06 10:52:49
AnsiString::Length()
674:デフォルトの名無しさん
08/09/06 10:57:35
C++とC#は別物ですか?
675:デフォルトの名無しさん
08/09/06 11:04:33
別物
676:デフォルトの名無しさん
08/09/06 11:15:14
>>675
ありがとうございました。ここではC++という文字をよくみるのに本屋ではC#をよくみたので一緒かなと思いました
ありがとうございました
677:デフォルトの名無しさん
08/09/06 17:27:47
実は # は
++
++
だったんだよ!
678:デフォルトの名無しさん
08/09/07 01:24:48
>>677
C++が一つ増えるなら、
C#は半分だけ増えるっていうイメージなんだけど。
それだと、2つも増えてるな。
679:デフォルトの名無しさん
08/09/07 02:35:29
>>677
その発想は無かったわ
680:デフォルトの名無しさん
08/09/07 17:30:34
エクスプローラの「表示」→「縮小版」みたいに、複数の画像を
サムネイル表示したいと思っています。
URLリンク(www2.ttcn.ne.jp)
を参考にDrawGridを使って実現しようかと思っていたのですが、
DrawGridコンポーネント1個に対して, 1つの画像しか表示できないんでしょうか?
681:デフォルトの名無しさん
08/09/07 23:31:12
サムネイルはListView使っとけ
682:デフォルトの名無しさん
08/09/08 21:57:33
Buliderっていう名前が明らかにマッチョ男性専用ソフトですっていってるようで怖い。
アメリカ人は本当にマッチョが好きだよな。サンフランシスコ。
683:デフォルトの名無しさん
08/09/09 04:41:14
>>681
そうします。ありがとうございます
684:680
08/09/09 07:34:14
追加の質問ですみません。
ListViewでサムネイル表示を試してみようと、
下の(1)~(6)の手順でやってみたのですが、ビルド中に固まります。
アイコン画像サイズ256×256を越えているせいみたいなのですが,
表示されるサムネイルの画像サイズを320×240で表示するには、どうしたらいいんでしょうか?
アドバイスよろしくお願いします。
-----
(1)Form1にImageList1を貼り付ける
(2)オブジェクトインスペクタからImageList1のプロパティをWidth=320;Heiht=240;に変更
(3)ImageList1ダブルクリックして, 「追加」押して320×240の画像1枚を選択して「OK」押す
(4)Form1にListView1を貼り付ける
(5)オブジェクトインスペクタからListView1のLargeImagesプロパティでImageList1を指定
(6)オブジェクトインスペクタからListView1のItemsプロパティで「新規作成」押して「キャプション」にテストと入力して「OK」押す
685:デフォルトの名無しさん
08/09/22 10:04:17
メニュー項目を設定する
TMenuItemのCaptionにて
開く(&O)...
と設定されますけど、
このピリオド3個の意味を教えてください。
686:デフォルトの名無しさん
08/09/22 12:43:51
押すと他のウィンドウが開くって意味がほとんどじゃ?
687:デフォルトの名無しさん
08/09/22 20:03:06
>>685
ピリオドがないのは、処理がすぐ終わるけど
ピリオドがあるのは、ダイアログが出るでしょ。
それだよ。
688:デフォルトの名無しさん
08/09/22 23:25:23
>>686 >>687
れすありがとうございます。
確かに...なのは、ダイアログが開く系ですね。
(& みたいな特別な機能がある訳ではなく
WindowsのUIの作法みたいなものなのですね。
とても参考になりすた。
689:デフォルトの名無しさん
08/09/28 23:08:48
質問です。
TFontのStyleがSet という特別な型だったのですが
設定は、Font->Style << fsBold のようにすれば良いのはヘルプに記載があったのですが
FontにfsBoldが設定されているかを調べる方法がわかりません。
どうすればいいのでしょうか。
690:デフォルトの名無しさん
08/09/28 23:34:45
if ( Font->Style.Contains(fsBold) )
691:デフォルトの名無しさん
08/09/28 23:45:56
>>690
できましたーーー。超ありがとうございます。
692:デフォルトの名無しさん
08/09/29 23:49:18
いろんなほかのプログラムのボタンを押すプログラムを作るにはどうすればいいのでしょう?
具体的には mplayerの再生ボタンや巻き戻しボタンを押したり、mediaplayerの再生ボタンを押したり
その他新しいプログラムの再生ボタンを簡単に登録して押せるようなそんなプログラムを
くみたいのですが。
693:デフォルトの名無しさん
08/09/30 00:17:51
ウィンドウハンドル持ってるコントロールならBN_CLICKEDをPostすればいいじゃない。
メニューバーから操作できる機能なら、コマンドIDをメニューリソース見るか、SPY++やWinspectorでコマンドID調べてWM_COMMANDでPostすればいい。
どっちもだめならSendInputでがんばるしかない。
694:デフォルトの名無しさん
08/09/30 00:18:33
簡単に説明すると、ウインドウを列挙して、中の再生ボタンのハンドルを取る。
ハンドルが取れれば、APIでごにょごにょできるでしょ。
あとはがんばれ。
695:デフォルトの名無しさん
08/09/30 10:50:39
あぁ!そっか、難しく考えすぎてた。
ありがとうございます。
696:デフォルトの名無しさん
08/09/30 20:54:22
質問です。
リストボックスにD&Dでリストボックスにファイルパスを表示する
プログラムをどうすれば言いか教えていただけないでしょうか?
697:デフォルトの名無しさん
08/09/30 22:04:17
をぃ、日本語が不自由な奴よ。
マルチポストはルール違反だぜよ。
698:デフォルトの名無しさん
08/09/30 22:44:16
>696
"C++Builder" ファイル ドラッグアンドドロップ
でぐぐれ
699:デフォルトの名無しさん
08/10/02 00:15:22
test
700:デフォルトの名無しさん
08/10/02 00:19:19
ごめんなさい、プロバイダが規制くらってたのでtest書き込みしてしまいました。
質問なんですが、フォームを使ってアプリを作っており、
デバッグで配列の中身や変数を見たく、printfなんかでコンソールに表示させたいのですが
何か方法はありますか?
インスペクタ?みたいなのはどうも使いにくくて・・・
ちなみに、C++Builder6を使ってます
701:デフォルトの名無しさん
08/10/02 00:32:28
これでどうでしょ?
URLリンク(msdn.microsoft.com)
でもIDEのデバッガ機能をちゃんと勉強して使ったほうが楽だと思うけどね。
702:デフォルトの名無しさん
08/10/02 01:08:53
>>700
AllocConsole()でコンソールが開きます。コンソールのハンドルをGetStdHandle( STD_OUTPUT_HANDLE )で取得したら
SetConsoleTextAttribute()とWriteConsole()で好きな文章を色つきで出力できます。
printf() っぽく使うならこんな感じ
#include <stdio.h>
int __stdcall con_printf( const CHAR* Format, ... )
{
const int nLengthMax = 1024;
int nLength = 0;
HANDLE hConsole = ::GetStdHandle( STD_OUTPUT_HANDLE );
if( hConsole != INVALID_HANDLE_VALUE ){
CHAR Message[ nLengthMax ];
va_list List;
va_start( List, Format );
nLength = vsnprintf( Message, nLengthMax - 1, Format, List );
va_end( List );
DWORD dwLengthWritten;
::WriteConsole( hConsole, Message, (DWORD)nLength, &dwLengthWritten, NULL );
}
return( nLength );
}
IDEが入ってない環境とかで使えるよ。
703:デフォルトの名無しさん
08/10/02 02:04:16
_open_osfhandle()とかdup2()とかを組み合わせれば
普通にそのままのprintfが使えるようになるんじゃないかね。
知らないけど。
704:デフォルトの名無しさん
08/10/02 02:44:28
IDEでデバッグしてるならOutputDebugString使えばイベントウィンドウに出力されるぞ
705:デフォルトの名無しさん
08/10/02 10:34:03
複数のフォームを持ったアプリを作っています。
メインフォームの初期化ルーチン(FormCreateとか)から他のフォームの初期化ルーチンを呼び出したいが、
それがまだ生成されていないのでエラーになるというケースが多くて困っています。
全てのフォームが生成された後で一括して初期化を行いたいという時にはどうすればよいのでしょうか?
どなたか教えて下さい。
706:デフォルトの名無しさん
08/10/02 12:02:22
メインフォームのコンストラクタで他のフォームnewすれば?
707:デフォルトの名無しさん
08/10/02 12:46:22
>>700
解決したかも知れないけど、
TMemo 貼って Add で俺はやってる。
708:デフォルトの名無しさん
08/10/02 17:46:19
コンパイルした時に作成される実行ファイルの名前を、プログラム側で変更することってできます?
#ifdefで二種類作るので、間違えないようにしたいのですが・・・
709:700
08/10/02 18:59:26
なるほど、色んなやり方があるんですね。
しかしこのスレ非常にやさしいw
ありがとうございました~、色々とやってみて合うもの見つけてみます
710:デフォルトの名無しさん
08/10/02 19:43:14
>>708
#pragma optionでできないものリストに「-efilename」が書かれてるから無理
objファイルならできるけど。
711:デフォルトの名無しさん
08/10/02 19:56:58
>>710
無理なんですか、了解です。
ありがとうございました。
712:デフォルトの名無しさん
08/10/02 20:00:24
>>711
makefileで分けるといい
713:705
08/10/03 17:03:11
>>706 どうもありがとうございます。やってみます。
714:デフォルトの名無しさん
08/10/17 00:02:21
TwebBrowserで表示したページのセレクトボックスを変更したりボタンを押したりしたいのですが、参考になるページが見つからず途方に暮れています(他の言語は多少あるのですが・・・)
他の言語のを真似して
WebBrowser1->Document->All->GetElementsByName("hoge")[0]->selectedindex = 0;
※hogeは表示するページのソースをみて名前を調べました
などとしたのですが、「AllはIdispatchのメンバーではない」とエラーが出ます・・・
どんな書き方をすればよいのでしょうか
715:デフォルトの名無しさん
08/10/17 04:28:58
たぶん中身をIHTMDocument2とかにして触るんじゃないかな。
昔触ったのを見たら
IHTMLDocument2Ptr doc;
doc = browser->Document;
IHTMLElementPtr body = doc->body;
とかやってた。
IHTMLDocument2Ptrとして使うには、MSHTMLかなんかをimportだかする必要があったと思うけど。
716:デフォルトの名無しさん
08/10/19 04:31:46
Imageに貼り付けた四角の画像を台形とかに変形させることはできますか?
717:デフォルトの名無しさん
08/10/20 04:18:55
できる
718:デフォルトの名無しさん
08/10/20 16:48:53
できるよ
719:デフォルトの名無しさん
08/10/23 15:03:10
AnsiStringsの中に何も入っていない場合、c_str()で比較してチェックすることはできますか?
if(c_str()=="")やif(c_str()==NULL)と書いても素通りしますよね。
Lengthが0かどうかでチェックをしているので問題は無いのですが、気になったのでよろしくお願いします。
720:デフォルトの名無しさん
08/10/23 16:20:53
IsEmpty()
721:デフォルトの名無しさん
08/10/23 17:14:13
素通りっつーのはよく分からんが、そもそも「if(c_str()=="")やif(c_str()==NULL)」って書き方おかしくね?
c_str使うんならstrcmpとか使おうぜ。
AnsiStringとchar型文字列の比較なら普通に==で良いとも思うけどな。
722:デフォルトの名無しさん
08/10/23 17:56:44
>>720
専用の関数があったんですね、ありがとうございます。
>>721
素通りというのは""やNULLで比較しても、何か文字が入っているような動きをしていたものですから。
まだAnsiStringを理解してないかもです。
strcmpも使ってみたのですが、動きは同じだったので・・・。
ところで、フォルダ名をチェックするのに最後に\がついているかを見て、無かったら\を付けたいのですが、
これってどうやればいいんでしょう?
AnsiLastCharで拾おうとしてのですが、うまくいかないので、よろしくお願いします。
723:デフォルトの名無しさん
08/10/23 18:11:14
IncludeTrailingBackslash()
724:デフォルトの名無しさん
08/10/23 19:05:07
>>723
処理してくれる関数があったんですね。
ありがとうございます。
725:デフォルトの名無しさん
08/10/23 20:18:52
IncludeTrailingPathDelimiterがあればそちらを使うのが望ましい。
726:デフォルトの名無しさん
08/10/25 15:47:30
Imageを2枚重ねて、下に写真、上に色を塗るようにしています。
上のImageに半透明や透明色を塗ることってできるのでしょうか?
半透明で調べてもフォームやボタンはあるのですが・・・。
すいませんが、どなたか方法を教えて頂けないでしょうか。
727:デフォルトの名無しさん
08/10/25 16:24:39
実際には透明色や半透明色ってのはないからなぁ。アルファブレンド?
728:デフォルトの名無しさん
08/10/25 19:16:29
計算した数字をEdit1,Edit2,Edit3に出したのですが、
それをMemo1にすべて書き出しExcelで読み込んだときにA欄B欄C欄と分けて出したいのですが
いったいどのようにすればいいんでしょうか?
Edit1->Text=a;
Edit2->Text=b;
Edit3->Text=c;
Memo1->Lines->Strings[0]=a;
Memo1->Lines->Strings[1]=b;
Memo1->Lines->Strings[2]=c;
今こんな感じで書いてるのですが全然わかりません・・
どなたかよろしければアドバイスお願いします。
729:デフォルトの名無しさん
08/10/26 13:10:23
コンマ区切りにすればいいってことじゃなくて?
730:デフォルトの名無しさん
08/10/26 13:45:41
>>729
あ、コンマ区切りで数列を出せばExcelでは枠別に表示されるんですね
ありがとうございます!
よろしければどなたかコンマ区切りでEdit1から3までの数字を一つのMemo1に出す
方法を教えていただけないでしょうか
731:デフォルトの名無しさん
08/10/26 14:20:40
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Add(AnsiString().sprintf("%s,%s,%s", Edit1->Text, Edit2->Text, Edit3->Text));
}
732:デフォルトの名無しさん
08/10/26 15:03:38
BCBで使えるRS-232Cコンポーネントで安定しているのってありますでしょうか?
現在はHmCommを使用しているのですが、USB-232C変換器が物によって正常に通信できたりタイミングがずれたりするので、
別の物を試してみたいのですが・・・良い物がありましたら紹介してください。
よろしくお願いします。
733:デフォルトの名無しさん
08/10/26 18:23:25
TMemoryStream* ms=new TMemoryStream();
char *mTop=(char*)(ms->Memory);
char *mEnd=pTop+(ms->Size);
と記述すると
W8072 問題のあるポインタ演算
という警告が出ます。
警告の出ない正しい記述方法を教えてください。
734:デフォルトの名無しさん
08/10/26 22:51:08
ms->Sizeの型が__int64だからintにキャストすれば出ないよ
735:デフォルトの名無しさん
08/10/26 23:19:32
>>732
URLリンク(www.geocities.jp)
これ使ってごらん。
コンポーネントじゃないけど、ヘッダファイルだけで動作する。
初期化に2行、出し入れに数行、後始末に1行ぐらい書けばいいので
PICとやり取りするのに簡単だから使ってる。
でも、USBのシリアル変換機はもともと不安定だからなぁ・・・。
736:デフォルトの名無しさん
08/10/27 00:15:44
>>734
解決しました。ありがとうございます。
737:732
08/10/27 00:45:44
>>735
ありがとうございます。
シンプルで良さそうですね。
ちょっと使ってみます。
ノートPCが前提なので、USBのシリアル変換機を使用して安定してないといけないんです・・・。
738:デフォルトの名無しさん
08/10/27 15:18:20
A, B, C, D, E, 00:00, f, g, h, i, j, k, l,
A1, B1,C1,D1,E1, 00:00, f1, g1, h1, i1, j1, k1, l1,
A2, B2,C2,D2,E2, 00:00, f2, g2, h2, i2, j2, k2, l2,
というコンマ区切りの何百行のデータがあり、j(1.2.3・・・)の部分だけ読み込みたいのですが
どういう風にやればいいですか。よろしくお願いします。
739:デフォルトの名無しさん
08/10/27 15:37:37
>>726
写真ともう一枚の32bppなTBitmap用意、アルファブレンドしてTImageに転送するしかないと思う。
アルファチャンネル扱えるTBitmap継承クラスも何種類か公開されてるから難しい物じゃない。
写真じゃないほうにペイントするとかだったら、TImageのイベントで取ったストロークの情報でペイント描画用のTBitmapに描けばいいだけだし。
>>738
ただのCSVファイルじゃん(・ε・)
740:738
08/10/27 15:48:54
少し説明不足でしたが、テキストで読み込んでMemoに表示させたいのです。
741:デフォルトの名無しさん
08/10/27 16:06:44
>>738
要するに 00:00 を取り除くって事?
742:738
08/10/27 16:10:52
>>741
j(1.2.3・・・)の部分だけをmemoに表示させたいのです。
743:デフォルトの名無しさん
08/10/27 16:13:33
>>j(1.2.3・・・) の意味がわからん
744:デフォルトの名無しさん
08/10/27 16:14:48
Memoに j1, j2, j3 とかって表示させたいの?
745:デフォルトの名無しさん
08/10/27 16:19:37
だからcsvファイル扱うクラス書いて、各行から11列目の値をTMemoに突っ込めばいいだけじゃ‥‥
746:デフォルトの名無しさん
08/10/27 16:24:14
こういうの見るとBCB2009でregex使いたくなるな
747:738
08/10/27 16:33:42
はい。
Memo1
j
j1
j2
j3
・
・
な感じで。
748:デフォルトの名無しさん
08/10/27 16:40:05
>>738
そんなん単に先頭からカンマを10こ読み飛ばせばいいだけじゃん。
strXXX系の関数使うまでもなく。
とみんな思うんだろうけど、暇だったのでVCLのヘルプみてみた。
TStrings::DelimiterとTStrings::DelimitedTextなんてものがあるのな。
TStringList* Data = new TStringList;
Data->Delimiter = ',';
Data->DelimitedText = "aa,bb,cc,dd,ee";
Caption = Data->Strings[3]; // ddが表示される
ただしBCB5以前は無理かもしれない。あしからず。
749:デフォルトの名無しさん
08/10/27 16:49:38
こんなんとか。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::ifstream ifs("File1.txt");
std::string str, s2;
if (!ifs) {
Memo1->Lines->Add("File1 not found.");
}
while (std::getline(ifs, str)) {
std::string::size_type pos = str.find('j'), pos2;
if (pos != std::string::npos) {
s2 = "j";
if (pos < str.size() && (pos2 = str.find(',', pos)) != std::string::npos) {
s2 += str.substr(pos + 1, pos2 - pos - 1);
}
Memo1->Lines->Add(AnsiString(s2.c_str()));
}
}
}
750:デフォルトの名無しさん
08/10/27 16:58:54
くだスレが役に立ってry
751:デフォルトの名無しさん
08/10/27 17:36:22
ないってことか
752:デフォルトの名無しさん
08/10/28 14:44:59
すいません、プログラム上でスクロールバーが動いたことにするには、どのようにすればよいのでしょうか?
Positionの値を変えるのでは無く、マウスで操作した時の動きをさせたいのですが・・・。
753:デフォルトの名無しさん
08/10/28 15:28:27
イベント呼べばいいんでないの?
754:デフォルトの名無しさん
08/10/28 15:58:04
イベントは、呼ばれるものじゃねえのか。
イベントはさすがに呼べねえだろ。
755:デフォルトの名無しさん
08/10/28 16:56:44
自分でOnChange呼べつったんだ馬鹿かお前
756:デフォルトの名無しさん
08/10/28 17:21:13
>>755
Are you a big baka ?
スクロールした結果、OnChange()が発生するのであって
OnChange()を自前で呼んでも無意味じゃん。
757:デフォルトの名無しさん
08/10/28 17:25:37
もも・・・
しかして>>755は
OnChange()を呼べばスクロールが発生するとでも思っているのかぁ
プププ
758:755
08/10/28 19:00:09
私のために争うのはもうやめてっ
プログラム上からイベントを発生させる方法ってあります?
759:デフォルトの名無しさん
08/10/28 19:06:50
自分宛にメッセージ投げればいいと思うよ
760:デフォルトの名無しさん
08/10/28 23:13:14
>>755
嘘はいかんな
761:752
08/10/29 02:51:14
名前間違えた、こっちだ
どうやってやればいいんでしょう・・・?
762:デフォルトの名無しさん
08/11/01 01:22:01
標準のボタンの背景や形を変えることってできますか?
BitBtnは画像を配置すると文字が消えてしまうので、他に何か方法は無いでしょうか?
よろしくお願いします。
763:デフォルトの名無しさん
08/11/01 15:51:47
>>762
起動時bitbtnにするDIBにフォントを使って字を書いてしまえばいいじゃないかw
元の画像は普通のボタンから抜くなりなんなりすればいいジャマイカ
そしてそれをフリーで後悔すれば….
と思う前に誰かすでに作ってないかとかおもってググ…
764:デフォルトの名無しさん
08/11/01 15:52:23
同じフォルダにあるテキストデータA001~A020を同時に読み込んで
その中の計算を行いそれを50個またテキストデータとして保存したいのですが
テキストデータを同時に読む込むプログラムとそしてそれを同時に書き出す方法が
どうしてもわかりません。よければアドバイスお願いします。
765:デフォルトの名無しさん
08/11/01 17:32:46
いちどきに読み込むことや書き出すことはできてもどうじに読んだり書き出したりするのは非常に困難です
766:デフォルトの名無しさん
08/11/01 18:48:32
>>765
すみません、説明不足だったようです。
同時にではなくたとえばA001~020で読み込む場合にfor文などで回して
自動ですべてを順に読み込み書き出すようにしたいのです
767:デフォルトの名無しさん
08/11/01 20:10:09
>>766
for文で回して順に読み込み書き出しすればいいと思うよ
と思ったが「同じフォルダにあるテキストデータ」ってファイルのこと?
ならファイルを順繰りに読んで希望のファイルだけ読み込み書き出しすれば良いんじゃないかね
768:デフォルトの名無しさん
08/11/01 20:51:35
TStringList使っとけ
769:デフォルトの名無しさん
08/11/01 23:37:20
具体的に何をする方法がわからんのか
そのへんが全然わからんから
エスパーじゃないから
答えようがねえなぁ
文章から類推すると、何もかもまったくわからんようにしか見えんが。
770:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/02 14:03:05
連投すみません。
あともう一つ教えてください。
出力ウィンドウに、テスト的に変数の値などを表示させたいのですが、
Console::WriteLine("aaa");
などとしてもまったく表示されません。何か方法はありますでしょうか?
よろしくお願いします。
772:デフォルトの名無しさん
08/11/02 14:27:08
>>770 誤爆?
ここは、
くだすれC++Builder(超初心者用)その3
773:デフォルトの名無しさん
08/11/02 14:57:22
>>772
すみません。間違えました><
774:デフォルトの名無しさん
08/11/03 18:05:44
読み込みと保存について質問なんですが
バイナリ形式のファイル読み込んで、その内容を同じファイル名でテキスト形式に置き換えて保存したいのですが
それを手動保存するのではなく自動で同じファイルネームでそのフォルダ内に生成されるプログラムを作りたいのですがどのようにすればよいのでしょうか
775:デフォルトの名無しさん
08/11/03 18:49:03
>>774
スレ違い
C/C++の宿題を片付けます 117代目
スレリンク(tech板)
こっちだな
776:デフォルトの名無しさん
08/11/03 18:55:33
>>775
すいません、これをSaveDialogやOpenDialogなどを用いてc++builderで
実行しなくてはいけないのですが読み込んだファイルを同じ名前のテキスト形式で自動生成する保存の方法を教えていただけないでしょうか
777:デフォルトの名無しさん
08/11/03 19:46:17
>>776
君の質問に回答できる奴はエスパー
778:デフォルトの名無しさん
08/11/03 20:06:21
そんな事できません
バイナリの中身が構造体だったり、浮動小数点と整数が
交互に書かれていたりする時どうやって判別するのですか?
コンピュータから見るとどちらもただの0と1の羅列ですよ?
779:デフォルトの名無しさん
08/11/04 04:10:55
00010111000 とかをテキストで保存するんだろ。
780:デフォルトの名無しさん
08/11/04 12:41:53
それはファイルダンプじゃん。
781:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/04 14:14:42
Execute()する前に
DirectoryExists(OpenDialog1->InitialDir)
してみい
falseが返ってくるからさ
783:デフォルトの名無しさん
08/11/04 14:41:37
そうじゃなくて
FileNameにフルパスでいれときゃいい
784:デフォルトの名無しさん
08/11/04 15:16:55
>>782
はい、falseでした。
一度動くようになると、PCを再起動してもtrueですね・・・。
なぜでしょう?
>>783
汚い書き方ですが、
OpenDialog1->FileName = OpenDialog1->InitialDir;
をExecute()の前に置いたら動作しました。
Execute()で最初に開くフォルダはFileNameのフォルダで、InitialDirでは無いってことでよろしいでしょうか?
785:デフォルトの名無しさん
08/11/04 17:13:51
さっさと教えてくださいよ。グズは嫌いですよ。
こっちも忙しいんだから早くして下さいね。
786:デフォルトの名無しさん
08/11/04 23:57:41
>>784
>一度動くようになると
パスが通ってるから。
想定される状況で通るように場合分けしたら?
フォルダを開くという概念がどうもね。
787:デフォルトの名無しさん
08/11/07 17:01:27
ShowMessage()で表示したメッセージを
指定時間後に自動的に閉じることって可能でしょうか?
可能であればどうすればいいのでしょうか?
788:デフォルトの名無しさん
08/11/07 17:24:43
根性
789:デフォルトの名無しさん
08/11/07 17:47:09
>>787
TSplashForm
790:デフォルトの名無しさん
08/11/07 23:35:09
タイマーで閉じればいいじゃん。
791:デフォルトの名無しさん
08/11/08 00:16:07
タイマーイベントを設定して
Close();
Release();
で閉じれるね
792:デフォルトの名無しさん
08/11/08 02:51:27
Delphi/C++Builderにはスプラッシュウィンドウが用意されてなかったっけ?
793:デフォルトの名無しさん
08/11/08 04:17:33
VC++には昔っからあるのにね。
ってか、大麻付きダイアログを作ればいいだけだけど。
794:デフォルトの名無しさん
08/11/08 04:38:46
面倒くさい。とか言ってる奴がBCB使うわけで。
795:デフォルトの名無しさん
08/11/10 09:41:38
あるある
796:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/10 16:16:55
AnsiStringの配列じゃダメなのか?
798:796
08/11/10 16:25:20
>>797
AnsiStringでいいです。別のところでそれぞれの配列を使って計算したいので。。
どういう風に書けば9個格納できるでしょうか。
799:デフォルトの名無しさん
08/11/10 16:36:03
AnsiStringの配列でいいじゃないかw
800:デフォルトの名無しさん
08/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
08/11/10 17:26:07
>>800
うまくいきません。
Memo1->Lines->Add(A1)で確認してみたのですがうまく読み込めていませんでした。
読み込むファイルが数百行というのは関係あるのでしょうか。
A1 = 1回目に読み込んだ配列
A2 ・・・
という感じでやりたいのですが。。。
とりあえずがんばってやってみます。
802:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/10 17:59:23
Memoに表示された20行の数字をkekkaに入れたくて
AnsiString kekka;
for(int I=0;I<20; I++){
kekka = Memo1->Lines->Strings[I];
}
という風に試したのですがMemo1に表示させてある内容と違う値が出てしまいました。
わからないのでアドバイスください。
804:デフォルトの名無しさん
08/11/11 00:44:15
>>803
kekkaは一つしか無いでしょ。
Memo1->Lines->Stringis[I]は20個あるでしょ。
20回ループまわしてもkekkaは一つしか無いでしょ。
805:デフォルトの名無しさん
08/11/11 10:28:51
>>803
っていうか俺のTStringListは無視か!!
それにkekkaを配列にすりゃいいって最初に言っただろう!
806:デフォルトの名無しさん
08/11/11 14:56:40
頭の中だけでなんとなく考えてるんだろうなぁ・・・
それで出来るようになるのってちゃんとしたプログラムがいくつも書けるようになってからだろうに。
クラス図とかメモリマップとか妄想絵図とか、何でもいいからソースコード以外の何かで書いてみたら
自分がどこに引っかかってるのか分かるような気がする。
807:デフォルトの名無しさん
08/11/11 19:02:06
プログラミングに限らず、段取りをすっ飛ばした想像しか出来ない奴っているからな。
808:デフォルトの名無しさん
08/11/11 21:27:18
んだんだ。
妄想を紙に書いてみると
自分のアホさが
よくわかる。
809:デフォルトの名無しさん
08/11/13 10:39:08
非常に今更な感があるけど出来たら教えて欲しいことが・・・
・BCB5
・複数のカラム追加したListViewを設置
・上記カラムの1つはAutoSize
このListViewにデータを流し込んだ時に後から発生した
縦スクロールバー分の幅が自動調整されないんだけど
これを自動調整するには何がベストなんでしょうか?
今は仕方なくデータを流し込んだ後にListViewの幅を
-1 >> +1として調整してます
810:デフォルトの名無しさん
08/11/13 10:58:48
何で調整したいんだ?
ListViewの幅か?カラムか?
811:デフォルトの名無しさん
08/11/13 11:53:38
カラムの方
右端が発生したスクロールバーで隠れるのよ・・・
812:デフォルトの名無しさん
08/11/14 10:51:35
TListView::OnInsertでTListView::ClientWidth読んで調整すればいいんじゃない?
813:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/17 15:35:15
”バリアントの型変換が不正です”って出たのですがどういうときに出るんですか?
815:デフォルトの名無しさん
08/11/17 15:39:13
バリアントの型変換が不正な時に出るんだろうよ
816:デフォルトの名無しさん
08/11/17 15:56:25
バリアントの型変換が不正な時に出るんだよ
817:デフォルトの名無しさん
08/11/17 15:59:29
バリアントの型変換が不正な時に出るんよ
818:デフォルトの名無しさん
08/11/17 16:00:01
バリアントの型変換が不正な時に出るよ
819:デフォルトの名無しさん
08/11/17 16:19:59
バリウム飲んだから白いうんこが出るんだよ
820:デフォルトの名無しさん
08/11/17 16:25:56
お前らあんまり荒らすな
プログラム板がID制になってもいいのか
821:デフォルトの名無しさん
08/11/17 16:28:33
>ID制
大賛成
822:デフォルトの名無しさん
08/11/17 16:29:03
ごみん
823:デフォルトの名無しさん
08/11/17 16:46:11
大貧民
824:814
08/11/17 19:14:13
ありがとうございます。解決しました
825:デフォルトの名無しさん
08/11/17 19:24:18
むしろID制にしてくれ
826:デフォルトの名無しさん
08/11/18 00:41:26
むしろBe強制に
827:デフォルトの名無しさん
08/11/18 10:17:08
むしろ実名が表示されちゃうでいいよもう
828:デフォルトの名無しさん
08/11/18 10:32:49
実名が表示されたら俺が超紳士なことがバレちゃうじゃないかやめろ
829:デフォルトの名無しさん
08/11/18 10:47:53
んじゃ(仮名)てつけば問題ないよな
830:811
08/11/18 16:14:59
>>812
変化するイベントで自分で再設定すれば出来るのは知っているんですが
コンポーネントのサイズ変更を行えば自動でやってくれる以上
なんとかそれを直接行えないかなと思ってるんですか・・・
831:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/21 18:24:18
どういう風に格納したいんだ
833:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/23 17:20:19
>>834
遅くなってしまってすいません、そして説明不足でした・・・。
できればMemo1の内容を再利用したいのですが、c++builderのバージョンが5なので
Delimiterが使えないようなのです・・・
お手数ですがDelimitedText以外での表し方を教えていただけないでしょうか。
836:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/23 20:05:59
ちゃんと Values、x、y は new して使ってる?
TStringList* Values = new TStringList;
使用後
delete Values;
839:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/24 19:55:12
delete の位置は何度も変えてみましたが結果は同じでした。
もしよろしければアドバイスお願いします。
842:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/28 02:16:31
32BitのBitmapへ色を塗る時、アルファチャンネルの指定はどのように行えばよろしいのでしょうか?
TColorは24bit専用なのでしょうか?完全な白の時は透過になるのですが、それ以外は全く透過しません。
色によって透過度を変えたいのですが、上手くいかないのが現状です。
PixelFormatで32bitの指定はしているのですが・・・。
すいませんがよろしくお願いします。
844:デフォルトの名無しさん
08/11/28 11:26:00
教えてください。
BDS2006を使っています。
ファイルの数が多くなってきたので
ヘッダファイルを、header1.hというファイルにまとめて
#include "Main.h"
#include "About.h"
・・・
という感じに記述して
.cppファイルの方には、
#include header1.h
と記述するようにしました。
このように変更してから、
再構築を行い、プログラムを実行し
バージョン情報を表示すると、EClassNotFound
TImageが見つかりませんというエラーがたまに出るようになりました。
About.cppをコンパイルし直すと正常に動作します。
他のクラスでも同じように、エラーが発生し再コンパイルすると正常になることがあります。
どうしてこのようなことが発生し、どうすれば回避できるのでしょうか。
ヘッダをまとめて1個のファイルにしてしまうのはダメなのでしょうか。
845:デフォルトの名無しさん
08/11/28 14:26:15
一度プリコンパイルヘッダ消せ
846:デフォルトの名無しさん
08/11/28 15:43:04
いいやお前が消えろ!
847:デフォルトの名無しさん
08/11/28 15:49:08
ヒント:あらしはスルーwww
848:デフォルトの名無しさん
08/11/29 01:55:44
すいません、どなたか>>843にも答えていただけないでしょうか。
849:デフォルトの名無しさん
08/11/29 09:34:25
ファイルのサイズを取得したくて
TSearchRecのSize変数から取ったのですが、
ファイルサイズが大きいと戻り値がマイナスになってしまいます。
大きいファイルサイズでも正確に取得するには
どうすればいいのでしょうか。
850:デフォルトの名無しさん
08/11/29 10:20:56
APIのFindFirstFile、GetFileSize、GetFileSizeEx
851:デフォルトの名無しさん
08/11/29 10:22:52
もしくはバージョンうp。今はTSearchRecのSizeは__int64になってるらしいので。
852:デフォルトの名無しさん
08/11/29 10:33:20
TSearchRec.FindData.nFileSizeHigh
TSearchRec.FindData.nFileSizeLow
853:デフォルトの名無しさん
08/11/29 10:34:58
あ、そうか。失礼。
854:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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();
856:デフォルトの名無しさん
08/11/30 00:36:10
if (RESULT == FALSE) {
Application->NormalizeTopMosts();
Application->MessageBox(str, L"AlphaBlend()でエラーが起きました", MB_OK);
Application->RestoreTopMosts();
}
delete bt;
}
857:デフォルトの名無しさん
08/11/30 00:42:59
補足ですが、rgbq.rgbReserved must be zero.とMSDNには書いて
ありますが、これがまさにアルファ値そのものです。
ですからここにアルファ値をセットしてAlphaBlend()を呼び出せば、
期待通りの結果が得られます。
もちろんPixelFormatはpf32bitでなければなりません。
858:843
08/11/30 19:35:36
>>855-857
丁寧にありがとうございます。
WideStringのところでひっかかったり、AlphaBlendが見つからなかったり(wingdi.hをインクルードするだけじゃダメなのかな?)していてまだ確認できていませんが、
いろいろ調べてやってみます。
ありがとうございました。
859:デフォルトの名無しさん
08/11/30 20:26:46
>>858
BCB6だと、AlphaBlend()やTransparentBlt()使うときインポートライブラリ作らないといけないよ。
implib.exe msimg32.lib msimg32.dll でインポートライブラリを作り
tlib.exe lib\import32.lib + msimg32.lib 上記dll内のAPIをimport32.libに追加
これでいつでもAlphaBlend()が使えるはず。(BCB5以前ならネットからAlphaBlend()の関数定義もコピって来る)
>>855 は多分BCB2009にあわせてユニコード使ってるだけなので、BCB2007以前ならWideStringの代わりにAnsiString使えばいいよ。
860:843
08/11/30 21:16:16
>>859
はい、BCB6を使用しています。
CBuilder6\Lib\Psdkに同名のファイルがあるので、パスが通っていれば良いのかと思っていました。
インポートライブラリを作成したところ、動作しました。
ありがとうございます。
ところで実行結果ですが、これでよろしいのでしょうか?
URLリンク(www3.uploda.org)
rgbq.rgbReserved = k;の部分で透明度が変わるはず・・・ですよね?
ti->Transparent = true;
ti->Canvas->Brush->Style = bsClear;
を入れてみてもダメでした。
861:デフォルトの名無しさん
08/11/30 22:14:10
>>860
それで合っています。
どうしても疑問に思われるなら、rgbq.rgbReservedにいろんなアルファ値(0~255)
を入れてやってみて下さい。
862:デフォルトの名無しさん
08/11/30 22:16:02
例えばrgbq.rgbReserved = 100; にしたりすると
明らかに実行結果が変わります。
あとこういうグラデーション画面ではなくて、画像のbitmapを
使うとよくわかります。
863:デフォルトの名無しさん
08/11/30 22:21:09
ti->Canvas->Brush->Color = clRed;
ti->Canvas->FillRect(Rect(0, 0, 255, 255));
こんな感じでImageコントロールを赤色で塗りつぶしてから
AlphaBlend()を掛けるとよく効果がわかります。
デフォルトでは白色ですからわかりにくいと思います。
864:843
08/11/30 22:38:05
すいません、やっと理解できました。
ひとつのImageで二つの画像を重ね合わせるのですね。
これを二つのImageで行うことは不可能でしょうか?
下の画像に、上のImageを透明~半透明色で塗った物を重ねたかったので。
Formをアルファブレンドした場合、全体を均一に同じ透明度で半透明になってしまいますよね?
865:デフォルトの名無しさん
08/11/30 22:46:24
>>864
AlphaBlend()に与えるパラメータBLENFUNCTIONの最後のパラメータが
0だと、3つ目のパラメータが全体に与える透過度になります。
しかし今回はピクセル毎に透過度を指定する方法を敢えて選んでいます。
そちらのやり方を欲しておられるように読めたので。
その時は3番目のパラメータを255に、4番目のパラメータをAC_SRC_ALPHA
にして、rgbReservedにピクセル毎のアルファ値を入れる事になるのは説明
した通りです。
もし上のImageを透明~半透明色で塗った物を合成したいのならば、二回
AlphaBlend()を呼び出さなければなりません。
866:デフォルトの名無しさん
08/11/30 22:48:04
と言うのも、AlphaBlend()関数はソースのアルファ値しか参考にしない
ようになっているからです。MSDNをよく読んで見て下さい。
つまり上の画像を別の単色の画像か何かでアルファブレンド、次いで
その画像を下の画像とアルファブレンド、という二段階になります。
867:843
08/12/01 00:48:02
上の画像に模様をつけて、それをさらにマウスで変形させようとするとすっごく大変なことになりそうですね。
ありがとうございましたー。
868:デフォルトの名無しさん
08/12/04 17:03:59
>>842
アドバイスありがとうございます!そして返事が遅れて本当にすいません;
これでやってみたのですが2列目の情報はMemo2に書き出すことができたのですが
4列目の情報を書き出そうとするとなぜかエラーがでてしまい。リストのインデックスが範囲を超えていますとでてしまいます。
原因がどうしてもわからず、困っています。
何かよい書き出し方法はもしくは格納方法はないでしょうか?
当方C++builder5を使用しています。
格納方法もしくは書き出し方法はEEEやRRRがないときは元のテキストのようにスペースとして一行あけて
書き出したいのですがどなたかよろしければアドバイスお願いします。
869:843
08/12/05 19:42:25
たびたびすいません。
>>855に>>863を加えたのですが
rgbq.rgbReserved = k; のkを0にすると、以下のようになりますよね。
URLリンク(www2.uploda.org)
透過度を0にすれば上にかかる色は消えますが、色の濃さは残るようで赤色にグラデーションがかかってしまいます。
濃さも消すことはできないのでしょうか?
870:デフォルトの名無しさん
08/12/05 20:02:48
>>868
「4つめがEEEでもRRRでもなく空の時」って「Values->Strings[ 3 ]」が生成されないってことはないよな?
ブレイクポイント貼るかステップ実行するかして、どのリストからどんな風にはみ出してるのかデバッガ使って変数の値見ておいで。
871:843
08/12/05 22:13:17
>>869ですが、自己解決しました
872:デフォルトの名無しさん
08/12/20 20:13:43
memo1 memo2
5.6 0
6.1 0
6.1 0
7.2 ← 0
10 1
9.0 1
10 1
4.0 1
7.5 ← 0
5.9 0
5.4 0
5.5 0
5.4 ← 0
10 1
10 1
4.5 1
5.2 ← 0
6.1 0
・ ・
・ ・
・ ・
このようにMemo1とMemo2に書き出されており0は正常値、1はエラー値でそれに対応する値が左の数字です。
1が出た場合前後の0の値から線形補間をしていきたいのですがどのように組んでいけばよいのでしょうか
上記の場合であれば(7.2と7.5の間で線形補間、5.4と5.2の間で線形補間)といった感じです。
873:デフォルトの名無しさん
08/12/20 20:16:46
memo2 の値が 1 なら前後に 0 を検索して
0 があったらその値とそこまでの距離を使って
線形補完すればよろし。
ところで端に 1 があった場合はどうすんの?
874:デフォルトの名無しさん
08/12/20 20:19:20
AnsiString A,B;
int s,u;
u = 0;
for( int i = 0;i<Memo2->Lines->Count; i++ ){
if(Memo2->Lines->Strings[i] == '1'){
A = Memo2->Lines->Strings[i-1];
s = StrToInt(i);
u = StrToInt(i);
while(Memo2->Lines->Strings[u] == 0){
u++;
}
}
875:デフォルトの名無しさん
08/12/20 20:20:31
B = Memo1->Lines->Strings[u];
for(int X = s; X< u+1; X++){
Memo1->Lines->Strings[X] = (B - A)/(u+1) * X + A;
Memo2->Lines->Strings[X] = 0;
}
u = 0;
}
このような感じで組んでみたのですが線形補間もうまくできておらず、
エラーが起こる場合もあります、よろしければアドバイスお願いします
876:デフォルトの名無しさん
08/12/20 20:22:45
>>873
返信ありがとうございます。
その場合は手動で0が端にくるようにしたいと思います。
877:デフォルトの名無しさん
08/12/20 20:23:24
>>873
memo1 のデータを保存する必要がないなら、
memo1 のデータをあらかじめ補間した値ですげ替えておけば良い。
メモリに余裕があるなら、memo1 とは別にそういうテーブルを用意してもいい。
最初に一気に補間すると時間がかかるなら無理かもしれないが。
878:デフォルトの名無しさん
08/12/20 20:26:01
すいません、バージョンはc++builder5です。
879:デフォルトの名無しさん
08/12/20 20:34:28
memo1 を書き換えたのでいいのね。
文字列を引き算したり
A に Memo2 の値を入れたり
整数を StrToInt したり
'0' じゃなくて 0 と比較してたり
X の範囲がおかしかったり
線形補間の分母がおかしかったり
おかしいところがありすぎて困っちゃう。
あと、今はまあいいんだけど、
最終的には補間後に i を補間の終了した地点にまで移動させた方が効率がいい。
880:デフォルトの名無しさん
08/12/20 20:35:26
こういうことが起こるのも、変数名が 1 文字で分かりにくいからってのはあると思うぜ。
変数名は分かりやすい意味のある名前をつけよう。
881:デフォルトの名無しさん
08/12/20 21:39:53
>>879 >>880
返信、アドバイスありがとうございます><
プログラム知識も浅く見様見真似で作ったのでこんな形になってしまいました・・
おかしい言われたところも自分ではどのようにして変えていけばよいのかわからず
困り果てています。
線形補間をしてmemo1に書き換えるにはどのようにプログラムを組めばよいでしょうか・・
882:デフォルトの名無しさん
08/12/20 22:08:35
こっちもどうアドバイスしていいのかわからんレベルなんだが…。
とりあえず考え方として
Memoから値を文字列→数値に変換して配列とかvectorに格納する
数値に必要に応じて線形補完する
数値を文字列に変換してMemoに格納する
というように、やるべきことを自分が理解できるところまで分解してみてはいかが?
自分で理解できないものを作ることはできないんだし。
883:デフォルトの名無しさん
08/12/21 07:27:35
Memoとかコントロールに入っている値を取りだしてどうこうしてまた
戻す操作は一般に遅いので>>882さんみたいにvectorに入れる
など考えた方がいいよ
884:デフォルトの名無しさん
08/12/21 16:35:08
vectorの格納とはいったいどういうものなんでしょうか?
今日調べていたのですが使い方もわからずじまいでした;
動作速度は遅くてもよいので具体的にこのように
memo1とmemo2を見比べてエラー値のあった部分は前後の0(正常値)から
線形補間していきmemo3のように線形補間された配列を書き出すプログラムを作りたいのですが
どのように書いていけばよいのでしょうか?
お手数ですがよろしくお願いします。
memo1 memo2 memo3
5.6 0 5.6
6.1 0 6.1
6.1 0 6.1
7.2 ← 0 7.2
10 1 7.26
9.0 1 7.32
10 1 7.38
4.0 1 7.44
7.5 ← 0 7.5
5.9 0 5.9
5.4 0 5.4
5.5 0 5.5
5.4 ← 0 5.4
10 1 5.35
10 1 5.3
4.5 1 5.25
5.2 ← 0 5.2
6.1 0 6.2
・ ・ ・
・ ・ ・
885:デフォルトの名無しさん
08/12/21 17:30:23
身近に聞ける人はいないのん?
そりゃ答え教える事はできるけど・・・
今後もずっと聞き続けるのん? って話だしなあ。
886:デフォルトの名無しさん
08/12/21 17:32:06
C++には型ってものがあってだな、ってところから説明が必要なのか?
Vectorがわからないなら配列でいいんで、せめてそのくらいは勉強しようね。
で、丸投げならそういうスレにいってもらうとして、そうでなければ、
あなたが同じことをやるとしたらどうやってそれを実現するのか、を手順として
分解していって、それをプログラムとしてコーディングする、という手順で。
とりあえず文字列は数値計算できないものなので、これを一旦doubleにして、
計算して、終わったら文字列に戻す…てなふうに。
887:デフォルトの名無しさん
08/12/21 17:54:17
こういう単純な変換をするなら、
スクリプト言語使った方が楽だと思うんだがね。
888:デフォルトの名無しさん
08/12/21 21:58:26
>>884
とりあえずアルゴリズム云々以前ぽいけど、BCBに因る問題だけは説明。
Memo2->Lines->Strings[ i ] は文字ではなく文字列なので
Memo2->Lines->Strings[ i ] == '1' や Memo2->Line->Strings[ i ] == 0 ではいけない。
比較するのなら Memo2->Line->Strings[ i ] == "1" とする。
Memo1のデータは数字に見えても実際は文字列なのでそのままでは計算できない。
なので一旦 ToDouble() メソッドを使って小数型にする。
(AnsiString::ToInt() や StrToInt() では整数になるので 5.4 とかは 5 に切り上げられてしまう)
※例として Memo1 の値を半分にして Memo3 に格納。
Memo3->lines->Add( Memo1->Lines->Strings[ i ].ToDouble() / 2.0 );
889:デフォルトの名無しさん
08/12/22 16:18:17
TDateTime と COleDateTime って、 double 値として見れば等価ですか?
890:884
08/12/22 18:25:02
for( int i = 0;i<Memo2->Lines->Count; i++ ){
if(Memo2->Lines->Strings[i] == "1"){
c = i;
while(Memo2->Lines->Strings[c] == "0"){
c++;
}
Memo3->Lines->Add(c-i);
for(int x = i; x<c; x++){
Memo2->Lines->Strings[x] = 0;
}
c = 0;
}
}
線形補間をする上でエラー値の1がどれだけ続くのかを調べるために
上の方法でやってみたのですがうまくいかないのです。(常にcとiの値が同じで0になってしまう)
どこに問題があるのかアドバイスの方よろしくお願いします。
891:デフォルトの名無しさん
08/12/29 18:17:29
プログラム内でA1,A2,A3,A4,A5,B1,B2,B3,B4,B5,C1,C2,C3,C4,C5
に計算した値が入っていて、
Memo1
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
C1,C2,C3,C4,C5
というCSV形式でMemo1出力したいのですがどういう風に書けばいいですか?
892:デフォルトの名無しさん
08/12/29 19:23:03
1個ずつ出力して下さい。
ループが欲しけりゃ配列にして下さい。
893:デフォルトの名無しさん
09/01/06 13:15:46
TBitBtnやTToolBarで使えるビットマップデータはどこで入手できますか?
インストールされたフォルダを探してもサンプル用のがちょっとあるだけだし、
いちいち作るの大変だし…
894:デフォルトの名無しさん
09/01/06 23:25:37
C++Builder 2009 のトライアル版を使い始めたのですが、
良い関連書籍は無いでしょうか?初心者向けの。。。
今日ヨドバシに行ったのですが、VC++の本ばかりで、
C++Builder関連は3冊くらい(応用編のような感じ)しかありませんでした。
895:デフォルトの名無しさん
09/01/07 09:19:24
Delphiの本と開発者ガイドで大抵は事足りる。
896:デフォルトの名無しさん
09/01/12 21:25:18
ユーザーが商品コードを入力(Edit1)して検索ボタン(Button1)を押したら、
商品名(Label1)を表示したいのですが、
ACCESSのDLookupのような命令はどう書けば良いでしょうか?
897:デフォルトの名無しさん
09/01/12 22:51:53
また>>896みたいな阿呆が沸いてきたな
情報を小出しにするのはヤメレ
898:896
09/01/12 23:50:12
>>897
阿呆な質問だったみたいですいません。
サーバーにあるMySQLの商品テーブル接続まではうまく行って、
テストで特定のEdit欄に商品名を表示することまでは出来たのです。
で次は、Editに商品コードを入力して検索ボタンを押したら、
Labelに該当する商品名を表示させたいと思ったんですが、そこが
うまくいかなくて。
TADOConnectionコンポーネントでADO接続。
TADOTableで商品テーブルと接続。
TDataSourceを配置。
IF文で、Text1のコードで商品テーブルの商品コードを検索し、
該当のコードがあればそのレコードの商品名を返せば良い。
というのはわかるんですが。
コンポーネント活用ガイド&実践プログラミング〈Vol.3〉データベーステクニック編
を読みながら書いても、2009版ではエラーが出てしまって。
全然解決しないもので、困ってました。
899:デフォルトの名無しさん
09/01/13 14:42:37
エラーと漠然と書かれても、コンパイルエラーなのか実行時エラーなのかもわからんし、
答えようもない。
900:896
09/01/13 19:41:05
すいません。
Lookupで自己解決しました。
901:デフォルトの名無しさん
09/01/14 16:06:50
計算をしたとき算出した小数の値が8.4345356554E248のようにEを含んだ値になってしまうのですが
これをEを含ませず、また答えとして小数点6桁程度に抑えたいのですがどのようにすればよいのでしょうか?
上記の答えは double A;で宣言したときになったものでfloat A;で宣言するとオーバーフローとエラーがでてしまいます。
902:デフォルトの名無しさん
09/01/14 17:25:58
>>901
ひとまずグーグル先生に「書式 sprintf」と聞いてみたらいいと思うよ。
903:デフォルトの名無しさん
09/01/14 18:12:23
>>902
返信ありがとうございます。
サイトでは何度も確認していたのですが、c++builderでは下のように書き出しており
%●●という形で小数点の値を6桁と指定して残りを切り捨てという形に仕方はどうしてもわかりません。
宣言文の箇所で小数点の桁数の指定、またEなど数字以外のものを使用させないようにすることはできないでしょうか?
基本的なことなのかもしれませんがどうしてもわかりません;
double A;
---(計算)----
Memo1->Lines->Add(A);
このような感じです
904:デフォルトの名無しさん
09/01/14 18:26:04
>>903
URLリンク(www9.plala.or.jp)
905:デフォルトの名無しさん
09/01/14 18:27:03
>>903
ひとまずグーグル先生に「書式 sprintf」と聞いてみたらいいと思うよ。
906:デフォルトの名無しさん
09/01/14 18:58:37
>>903
Memo1->Lines->Add(AnsiString.sprintf("自分で考えてね", A));
って書けばいいよ。
907:デフォルトの名無しさん
09/01/22 02:14:20
手元に環境が無いため、曖昧な質問ですいません。
日本語環境(XP SP3&BCB6)で作成したものを英語版のWindowsXPで実行すると、表示がおかしくなるようなことってありますか?
Imageの中の表示がおかしいだけでなく、コンポーネントの配置や大きさもずれていたりします。
表示等に2byte文字は使っていないつもりです。
グラボとかの問題でもこのようなことは発生することってありますか?
よろしくお願いします。
908:デフォルトの名無しさん
09/01/22 17:27:03
>>907
設計時のフォームのフォントのCharsetが気になるな。
フォームのコンストラクタでthis->Font = Screen->IconFont;して
表示崩れ直るか確認してみたら?(ParentFont=trueの状態で)
909:デフォルトの名無しさん
09/01/22 23:49:09
>>908
返事ありがとうございます。
this->Fontでは表示は崩れませんでした。
ただ、CharsetはシフトJISになっていました。
これによって位置がずれたりするのでしょうか?
910:デフォルトの名無しさん
09/01/23 16:21:09
>>909
charsetが影響するよ。実行時環境のcharsetが特定できないなら、
好みのフォント設定後、this->Font->Charset = Screen->Font->Charset
でいいんじゃないかな。
英語XPでも、言語オプションの非ユニコードアプリを何語と解釈するかを「日本語」に
セットすることで日本語XPと同じ表示にできるよ(フォントがインストールされていれば)
911:デフォルトの名無しさん
09/01/26 16:04:21
アプリを起動するときvcl60.bplが見つからない。のエラーが出るときは、
「共有RTL DLLを使う」のチェックを外してコンパイルすると
vcl60.bplをいっしょに配布しないで良いですが、
hoge.dllファイルを配布しない方法はないでしょうか?
URLリンク(me.me.tokushima-u.ac.jp)
このページ見ると、静的、動的どちらにしてもプログラムの見えるところに
dllファイルを置かないとだめなようですが。
912:デフォルトの名無しさん
09/01/26 16:37:23
hoge.dllはあなた独自のdllだから一緒に配布しちゃえばいいんでないの
913:デフォルトの名無しさん
09/01/26 17:07:32
>>912
レスありがとうございます。
URLリンク(www.gesource.jp)
こういうページもあったのでやってみましたが、dllが同じフォルダにないと
起動したときにエラーでちゃいます。
できるのはbuilderのライブラリだけですか。
いろいろ検索してるとgccのページが出てくるんですが、
静的リンクでコンパイルするとサイズが大きくなると書いてあったので
てっきり実行ファイルの中にライブラリが埋め込まれる感じで
ライブラリが要らなくなるものだと思いました。
静的ライブラリも動的ライブラリもいっしょに配らないとだめで、
ロードされるタイミングだけなんですね。
914:デフォルトの名無しさん
09/01/26 17:43:42
自作でDLLを作成して呼び出すようにしたのが悪いんだろ
DLLも全部一緒くたに中に書いてしまえ
915:デフォルトの名無しさん
09/01/26 17:45:34
もしかしてスタティックリンクライブラリとDLLの区別がついてないんじゃないか
916:デフォルトの名無しさん
09/01/26 17:46:35
ていうか、DLLのソースorOMF形式のobjまたはlib(インポートライブラリじゃなくてスタティックリンクライブラリのほう)はないのか?
それがあるならプロジェクトにobjやlib放り込めばDLLいらないんだが。
917:911
09/01/26 18:32:24
>>914-916
レスありがとうございます。
>インポートライブラリじゃなくてスタティックリンクライブラリのほう
なるほど、検索すると出てきました。拡張子が同じでも本物と
ちょっと違うのがあって、implibで作ったのはインポートライブラリ。
スタティックリンクライブラリを作ってやってみます。
918:デフォルトの名無しさん
09/02/12 19:59:45
リストボックスに入りきらない場合、水平スクロールバーを出したいのですが、どのように設定したらよいのでしょうか?
919:デフォルトの名無しさん
09/02/12 22:31:42
LB_SETHORIZONTALEXTENT
920:デフォルトの名無しさん
09/02/19 11:52:00
c++builderって指名ユーザーライセンスという形態を取っているみたいですが、
自宅用に買ったc++builderを会社のマシンに(もちろん使うのは自分のみ)
インストールして使うのは有りなんでしょうか?
921:デフォルトの名無しさん
09/02/19 12:06:50
>>920
ありでしょ。
不安なら問い合わせてみれば?
922:デフォルトの名無しさん
09/02/19 20:42:32
アカデミックからスタンダードにライセンスをアップグレードすることって出来ますか?