C++Builder相談室 Part15
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/21(日) 17:48:30過去スレ・関連サイトは>>2-7あたり。
0102デフォルトの名無しさん
2005/09/12(月) 04:14:24http://blog.livedoor.jp/junki560/
0103デフォルトの名無しさん
2005/09/12(月) 05:38:10機動は早くなるよ
0104デフォルトの名無しさん
2005/09/12(月) 07:35:51どのような方法が、良いのでしょうか?
起動時にOSの言語を判定して、キャプションやフォントを変更していく以外に何はよい方法はないでしょうか?
0105デフォルトの名無しさん
2005/09/12(月) 11:15:28http://www.plustarnet.com/aspil/Programming/cpp01.htm
//コンストラクタ(constructor)とデストラクタ(destructor)
__fastcall ~TForm1();
__fastcall TForm1::~TForm1()
{
delete pBitmap;
delete pBitmap2;
delete tmpImage;
pixelinfolist->Clear();
delete pixelinfolist;
pixelinfolist2->Clear();
delete pixelinfolist2;
}
0106デフォルトの名無しさん
2005/09/12(月) 22:16:05リソースdllを丸ごとすげ替える方法がある。
ヘルプ読め
0107デフォルトの名無しさん
2005/09/12(月) 23:58:34ヘルプを読んでみたのですが、フォームの内容をDLLに保存する方法がよく分かりません
0108デフォルトの名無しさん
2005/09/13(火) 08:16:26http://makimo.to/2ch/piza2_tech/997/997074601.html
http://makimo.to/2ch/pc3_tech/1016/1016065855.html
http://makimo.to/2ch/pc2_tech/1035/1035596146.html
http://makimo.to/2ch/pc2_tech/1045/1045542179.html
http://makimo.to/2ch/pc5_tech/1054/1054280736.html
http://makimo.to/2ch/pc2_tech/1061/1061594556.html
http://makimo.to/2ch/pc5_tech/1080/1080541814.html
http://makimo.to/2ch/pc5_tech/1089/1089299158.html
http://makimo.to/2ch/pc5_tech/1094/1094749339.html
http://makimo.to/2ch/pc5_tech/1099/1099238936.html
http://makimo.to/2ch/pc8_tech/1108/1108468718.html
0109デフォルトの名無しさん
2005/09/13(火) 18:19:07テキストファイルからボタンのキャプションなどを読み込めばいいのでは?
0110デフォルトの名無しさん
2005/09/13(火) 20:25:41リソースdllウィザードとかその類いのが新規作成の中に無いか?
0111デフォルトの名無しさん
2005/09/14(水) 00:22:18行ったことは、まず
SDL-1.2.9.zipをダウンロードして展開。
中に入っていたBorland.zipを展開。(Borlandディレクトリができる)
Borland\bcb6にlibSDL.bpgをダブルクリックする。
プロジェクトメニューからすべてのプロジェクトをメイクをしました。
そうすると、パッケージのインポートライブラリーが見つかりませんと出ました。
これは、同梱されていたBorland.htmlというファイルを参考に実行しましたが
うまくできません。
どうやったらうまく導入できるんでしょうか?
0112デフォルトの名無しさん
2005/09/14(水) 12:57:16試してみたけどプロジェクトが出鱈目な感じだった。一応できたので以下やってみた手順。
・aliens.exeプロジェクトは、aliens.cが見当たらないのであきらめる。libSDLプロジェクトグループからaliensを削除。デモゲームらしい。
・SDL.dllプロジェクトにSDL-1.2.9/src/cpuinfo/SDL_cpuinfo.cを追加する。
・SDLmain.libプロジェクトのSDL_main.cを削除して、代わりにSDL-1.2.9/src/main/win32/SDL_win32_main.cを追加する。
・IDEを閉じた状態で、SDL.bprとgraywin.bprをメモ帳等の適当なエディタで開いて、「<PACKAGES value=vcl.bpi rtl.bpi…略」となってる部分を、「<PACKAGES value=""/>」とするかこのノード自体を削除して保存する。
・libSDLを開いて、「すべてのプロジェクトを再構築」を実行。
・途中で何回かコンパイルエラーが出るので、その都度userWindowProcを(FARPROC)userWindowProcという風にキャストして再度コンパイル。
で、コンパイルはできた。
0113デフォルトの名無しさん
2005/09/14(水) 14:06:30どうも試してくれありがとう。
あれから、色々検索しまして、簡単な導入方法がわかりました。
SDL-1.2.9-win32.zipの中のSDL.DLLをc:\windows\systemディレクトリに入れて
SDL-1.2.9.zipの中のborland.zipを展開した中に入っているものを全部borland C++ builder
をインストールした場所の各ディレクトリに入れました。
ヘッダファイルもinclude\SDKに入れまして、ライブラリもlib\SDKに入れてしまい
bcc32.cfgとilink32.cfgにパスを通して終わりです。
実際にSDLのテストプログラムをコンパイルしてみましたら、うまく実行できました。
0114デフォルトの名無しさん
2005/09/14(水) 19:49:33やっぱランタイムだけでよかったのね。DLLをソースからビルドしたい理由があったのかと思った。
0115デフォルトの名無しさん
2005/09/15(木) 09:28:31TImageに表示するにはどうすればいいのでしょうか?
そのままTBitmap::ScanLineで読み込んでも変な表示がされるのみでしてorz
0116デフォルトの名無しさん
2005/09/15(木) 10:22:570117デフォルトの名無しさん
2005/09/15(木) 10:23:26TImage::Picture::Bitmap::KiadFromStream使えば?
0118デフォルトの名無しさん
2005/09/15(木) 10:24:09ScanLine でコピーするならパレットもグレースケール化しないとね。
0119115
2005/09/15(木) 11:14:29LoadFromStreamでは「ビットマップイメージが不正です」と言われてしまいます。
DIBフォーマットってTBitmapでは直接読めないのでしょうか?
この辺りの処理をちゃんとやってないからScanLineでもダメなのでしょうねorz
0120デフォルトの名無しさん
2005/09/15(木) 11:25:42読み込み先の PixelFormat はどうなってます?
pf8bit なら、パレットをグレイスケール化することは必須
pf24bit なら ScanLine は TRGBTriple へのポインタだから RGB に同じ値を与えてグレースケールにする
pf32bit なら ScanLine は TRGBQuad 以下同上
0121デフォルトの名無しさん
2005/09/15(木) 14:16:14Graphics:TBitmap::PixelFormatをいじったか?
pfDeviceにでもなってんじゃないの?pf1bitに変更汁。
0122デフォルトの名無しさん
2005/09/15(木) 14:42:13pf8bit だろ、グレイスケールといえば普通。pf1bit ならスケールなんてない。黒白
0123デフォルトの名無しさん
2005/09/15(木) 15:22:080124デフォルトの名無しさん
2005/09/15(木) 15:27:550125115
2005/09/15(木) 16:04:38さっぱりワケわかめです。どうも読み込もうとしているDIBが画像データのみで、
ヘッダ情報が含まれていないようです。
ググっても、微に入り細に渡るBitmapフォーマットについての説明(勉強しているのなら
ありがたいですが、それは時間のある時に…)はあっても「だからこうしろゴルァ!」という
ズバッとしたサンプルソースがありませんorz
0126デフォルトの名無しさん
2005/09/15(木) 16:17:40データにWindowsBitmapのヘッダ付いてないならScanlineで書き込むしかない。
0127115
2005/09/15(木) 17:28:17上記のようにTBitmap::PixelFormatはpf8bitに設定して
TBitmap::Canvas::Pixels[x][y]にDIBの画像データをちまちまと入れたら出来ました。
お騒がせしました。
0128デフォルトの名無しさん
2005/09/15(木) 18:28:340129デフォルトの名無しさん
2005/09/15(木) 18:29:11Pixelsは猛烈に遅くなるからやめい。
0130デフォルトの名無しさん
2005/09/15(木) 18:29:15Pixels 使うのは最低だな
0131デフォルトの名無しさん
2005/09/16(金) 01:06:17だからScanLineを使って入れろというに。
Pixels使うと、一ドット毎にシステムコール起こるの知ってる?
0132デフォルトの名無しさん
2005/09/16(金) 05:22:48どうしたらいいでしょうか。当然NULLで文字が切れてしまいます。
0133デフォルトの名無しさん
2005/09/16(金) 08:33:351バイトづつIntToHex
0134デフォルトの名無しさん
2005/09/16(金) 09:07:480135デフォルトの名無しさん
2005/09/18(日) 18:04:00方法がわかりません。
Excelに数字を保存する方法はわかったのですが、グラフの書き方がわからないので、
知っている人がいれば教えてください。
0136ミ,,゚Д゚彡 ◆A6VzDeLphI
2005/09/18(日) 20:38:29グラフが描かれるテンプレートを用意して
xltとして保存しておいて
Excelをコントロールするとき
Excel起動後、新規シートではなく
xltを読み込んで動作させてはいかがかと。
0137デフォルトの名無しさん
2005/09/18(日) 22:03:550138デフォルトの名無しさん
2005/09/18(日) 22:17:03投稿日 : 2005/08/01(Mon) 10:35
投稿者 : lovez00
RichEditにはCanvasプロパティがないので、
使い捨てCanvasを作れば解決です。
練習がんばってねー。
//-------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//使い捨てCanvas
TCanvas *RECanvas = new TCanvas;
RECanvas->Handle = GetDC( RichEdit1->Handle );
//ペン設定
RECanvas->Pen->Color = clBlack;
RECanvas->Pen->Width = 2;
//線を引く
RECanvas->MoveTo( 0, 20 );
RECanvas->LineTo( RichEdit1->ClientWidth, 20 );
//使い終わったら消す
delete RECanvas;
}
0139デフォルトの名無しさん
2005/09/19(月) 14:39:17void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCanvas *c=new TCanvas;
c->Handle= GetDC(0);
//ここから好きな処理をする
c->Font->Size= 100;
c->TextOut(10,10,"いろは");
c->MoveTo(100,100);
c->LineTo(500,500);
//ここまで
ReleaseDC(0,c->Handle);
delete c;
}
0140デフォルトの名無しさん
2005/09/20(火) 05:30:42処理に困っているのは 0x00 だけ?
バイナリデータって聞くとそれ以外にも普通に表示されないコードが
あると思っちゃうけど無いの?
もしあるならどういう風に表示させるつもり?
TFileStream::Read() を使って unsigned char の配列に入れて
表示したいように加工してから表示・・・?
0141デフォルトの名無しさん
2005/09/21(水) 00:21:17LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
一部省略
*ppDisp = CppWebBrowser->Application;
}
*ppDisp = CppWebBrowser->Application;
ってどういう意味なのですか?一般的に
0142デフォルトの名無しさん
2005/09/21(水) 00:56:000143デフォルトの名無しさん
2005/09/21(水) 02:41:420144デフォルトの名無しさん
2005/09/21(水) 03:22:06パッケージを使ってビルドすれば、BPLに対応するリソースdll(日本語ならJPN)が自動で選ばれる。リソースdllが無ければVCL内のメッセージについては英語のはず。
静的ビルドのときは、CDに入ってる(←バージョンによっては)英語版VCLでビルドするか、最悪でもやはりリソースとして.exeに埋めこまれてるのでリソース編集ツールで置き換えられる。
0145デフォルトの名無しさん
2005/09/21(水) 03:23:280146デフォルトの名無しさん
2005/09/21(水) 11:19:32強制的に最初のタブがアクティブになってしまうけど、
私はその削除するタブの一個前をアクティブにしたいのだが、
どうすれば良いのですかね。今現在ページの移動が見苦しい
<現在の擬似コーディング>
//現在のページ数
int PageNum = PageCtrl->PageCount;
//削除するページを得る(最後のページ)
TTabSheet *pDelPage = PageCtrl->Pages[PageNum - 1];
//次にアクティブにするページ
TTabSheet *pNextActivePage = PageCtrl->Pages[PageNum - 2];
//ページ削除(一旦先頭のページに移動)
delete pDelPage;
//次にアクティブにするページに移動(仕方なく入れてる)
PageCtrl->ActivePage = pNextActivePage;
0147デフォルトの名無しさん
2005/09/21(水) 13:08:12削除前に移動してもだめ?
0148デフォルトの名無しさん
2005/09/21(水) 13:51:16TPageControl::RemovePageをオーバライドするしか無いような‥‥
てかそこで削除したページの次を検索してそのページに切り替え動作やってるようだ。
0149146
2005/09/21(水) 14:05:24>>148 TPageControl::RemovePageは、privateにあって難しいかも。
VCLのソースそのものの書き換えが必要?
0150デフォルトの名無しさん
2005/09/21(水) 14:44:55ヘッダ書き換えで行けないかね‥‥
0151デフォルトの名無しさん
2005/09/21(水) 17:01:36TPageControlを継承した派生クラス作って、
RemovePage()をオーバーライドでどう?
0152デフォルトの名無しさん
2005/09/21(水) 18:33:370153146
2005/09/22(木) 09:03:530154デフォルトの名無しさん
2005/09/22(木) 09:18:59class Base {
private:
virtual void func() { cout << "Base::func()\n"; }
public:
virtual void funca() { func(); }
};
class Ext : public Base {
public:
virtual void func() { cout << "Ext::func()\n"; }
};
main() {
Ext a;
a.funca();
cout << endl;
}
0155デフォルトの名無しさん
2005/09/22(木) 13:40:32並べてみると壮観だね
A list of features in Dexter
http://groups.google.co.jp/group/borland.public.cppbuilder.non-technical/msg/901d7e5f9cb15e40?hl=ja&
0156デフォルトの名無しさん
2005/09/22(木) 15:31:150157デフォルトの名無しさん
2005/09/23(金) 23:37:18二郎 90
一郎 70
太郎 80
点数をソートして、名前を点数順に取得する方法がわかりません。
知っている人がいれば教えてください。
0158デフォルトの名無しさん
2005/09/23(金) 23:44:00TStringList
0159デフォルトの名無しさん
2005/09/23(金) 23:59:49158じゃないけど、TStringListで良いんじゃないの?
その場合、090という風に桁数を合わせないとダメだけど。
090二郎
070一郎
080三郎
という感じにして、Sort()で昇順になるから、逆順(高い者順)なら
下から取ってくれば良い。
0160デフォルトの名無しさん
2005/09/24(土) 01:55:00//構造体を定義
struct name_value {
String name;
int value;
name_value( String n=EmptyStr, int v=0 ) : name(n), value(v) {};
};
bool operator<( const name_value& lh, const name_value& rh ) {
return lh.value < rh.value;
}
//こんなふうにつかう
#include <set>
void some_function()
{
typedef std::set<name_value> name_value_set;
name_value_set nvset;
nvset.insert( name_value("二郎",90) );
nvset.insert( name_value("一郎",70) );
nvset.insert( name_value("太郎",80) );
...
//あとは頭からでもけつからでも好きな方から読み出せばいい。
}
0161デフォルトの名無しさん
2005/09/24(土) 12:31:08IDEの起動に物凄い時間がかかってメモリもありえないほど喰うけどな
0163デフォルトの名無しさん
2005/09/24(土) 13:15:18そうか。
で、それがどうかしたか?
>>160のソースに問題はないのでリンカエラーを起こしたのは君の責任だ。
0164デフォルトの名無しさん
2005/09/24(土) 13:20:21俺は>>160さんのソースを打ち込んで、適当にアレンジしてMemoに
中身を貼り付けるようにしてみたが、ちゃんと動いたぞ。
Windows用のPeekMessageとGDIを使った簡単なアニメーションと言うかゲームみたいなプログラムのソースを読んだんですが、C++Builderのプログラムに移植したいと思ったんですけど、PeekMessageを使っててメッセージループ中に他の自作関数を呼んだりしないといけません。
でもC++Builderのプログラムにはメッセージループがありません。どこにあるのですか?どうしたらカスタマイズできますか。
0166デフォルトの名無しさん
2005/09/24(土) 14:09:07BEGIN_MESSAGE_MAP
0167デフォルトの名無しさん
2005/09/24(土) 14:25:09http://www.borland.co.jp/qanda/cbuilder/c0002864.html
0168デフォルトの名無しさん
2005/09/24(土) 14:32:46TApplicationクラスのprivate関数ProcessMessageにメッセージループはある
0169デフォルトの名無しさん
2005/09/24(土) 14:59:01strA = "Button1"
From1.controls(strA).Visible = True
みたいにBCBで
Form1 -> strA -> Visible = True
みたいには出来ますか。
0170デフォルトの名無しさん
2005/09/24(土) 15:21:08String strA = "Button1";
Form1->FindChildControl(strA)->Visible = True;
ただし、実際はifでくくったほうが良い。
if ( TControl* ctrl = Form1->FincChildControl(strA) )
ctrl->Visible = True;
0171デフォルトの名無しさん
2005/09/24(土) 15:24:05さすがだね。ありがとう
0172デフォルトの名無しさん
2005/09/24(土) 15:24:51×True
○true
×FincChildControl
○FindChildControl
0173デフォルトの名無しさん
2005/09/24(土) 15:53:51boostを使えるようにする方法を教えてく浅い。
0174デフォルトの名無しさん
2005/09/24(土) 15:57:42binフォルダ中のbcc32.cfgに
-I"C:\boost_1_33_0"等を追加。既に-Iがあると思うので、セミコロンで
区切って後ろに追加する。
buildは・・・・・諦めた方がいいかもね。
0175デフォルトの名無しさん
2005/09/24(土) 17:43:20http://groups.google.co.jp/group/borland.public.cppbuilder.non-technical/msg/901d7e5f9cb15e40?hl=ja&
Here's a list of things I got out of it for Dexter.
- Conformance for Boost and ACE. Almost 100% ANSI conformance.
※直訳
Delphi2006買ってください><
0176デフォルトの名無しさん
2005/09/24(土) 17:54:27- Updates for BCB6
orz
0177デフォルトの名無しさん
2005/09/24(土) 21:30:340178デフォルトの名無しさん
2005/09/24(土) 23:27:46先頭の0を取り除く方法がわかりません。
0179デフォルトの名無しさん
2005/09/24(土) 23:30:32z = AnsiString(z.ToInt());
0180デフォルトの名無しさん
2005/09/24(土) 23:32:29AnsiString z = "070";
Caption = IntToStr( StrToInt(z) + 0 );
0181デフォルトの名無しさん
2005/09/24(土) 23:37:060182デフォルトの名無しさん
2005/09/25(日) 00:03:21char *p=new char[z.Length()+1];
if(p){
strcpy(p,z.c_str());
z=AnsiString(p+1);
delete[] p;
}
0183デフォルトの名無しさん
2005/09/25(日) 00:20:32void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList* MyList = new TStringList();
AnsiString a = "070二郎";
AnsiString b = "100一郎";
AnsiString c = "080三郎";
MyList->Add(a);
MyList->Add(b);
MyList->Add(c);
MyList->Sort();
Memo1->Lines->Add(MyList->Count);
Memo1->Lines->Add(MyList->IndexOf(a));
Memo1->Lines->Add(MyList->IndexOf(c));
Memo1->Lines->Add(MyList->IndexOf(b));
Memo1->Lines->Add(MyList->Strings[0]);
Memo1->Lines->Add( ( (MyList->Strings[0]).SubString(1,3)).ToInt() );
Memo1->Lines->Add( ((WideString)MyList->Strings[0]).SubString(4,2) );
delete MyList;
}
0184デフォルトの名無しさん
2005/09/25(日) 00:24:01ま、なんだ。こういうところで安易に質問する前に
自分でもちっと勉強しろって事だな。
説明がわるかったけど、独自メッセージを処理したいというより
リアルタイム処理のためにGetMessageじゃなくてPeekMessageをつかったメッセージループとそのループ中に関数呼び出しを挿入したいということだけど、やっぱり分かりにくいか。
>>170
private関数じゃどうにもならないね。
0186デフォルトの名無しさん
2005/09/25(日) 02:00:470187165
2005/09/25(日) 05:39:28>>166 >>167 >>168
失礼しました。そしてありがとう。
>>168 >>186
メインループは書き換えられないけど、時間のかかるループの中でこれを呼べばいいみたいですね。
どうもありがとうございました。
0188デフォルトの名無しさん
2005/09/25(日) 08:49:05タイマースレッド作ってSleepなりSetTimerなりでループ回してやれば?
0189デフォルトの名無しさん
2005/09/25(日) 12:26:41ここではAPIを使用して自ウインドウへのメッセージ(WM_MOVE、WM_SIZE、WM_CLOSE)をフックする方法を説明します。このメッセージフックの方法は結構使えるので知らない人は覚えておきましょう。
■使用するAPI関数
SetWindowLong(ウインドウに関する情報を設定する)
CallWindowProc(Windowsメッセージをデフォルトのウインドウ プロシージャに渡す)
■メッセージ
WM_MOVE(ウインドウが移動した時に送られる)
WM_CLOSE(ウインドウを終了しろと言われた時に送られる)
WM_SIZE(ウインドウのサイズが変更した時に送られる)
0190165
2005/09/25(日) 12:28:11うん、その方法もあるね。
たまたま見たプログラムがメッセージループをいじくるやつだから、Builderだとどうなるかと思ったんです。
0191デフォルトの名無しさん
2005/09/25(日) 15:24:55>>189
WndProcオーバーライドしろと
0192デフォルトの名無しさん
2005/09/25(日) 17:26:37http://thecoadletter.com/article/0,1410,17819,00.html
if (msg == WM_VSCROLL)
ShowMessage("The vertical scrollbar is scrolling!"); //ここでカーソルが固まる
カーソルが固まるのを防ぐ方法がわかりません。
0193デフォルトの名無しさん
2005/09/25(日) 17:27:28休まずかき混ぜ続けるんだ
0194デフォルトの名無しさん
2005/09/25(日) 18:15:13そりゃ、スクロールイベントをShowMessageで止めてるんだからそうなるでしょ
0195デフォルトの名無しさん
2005/09/25(日) 18:37:24if (msg == WM_VSCROLL)
OutputDebugString("The vertical scrollbar is scrolling!")
これで解決
0196デフォルトの名無しさん
2005/09/25(日) 20:49:46そして、ダイアログボックスの嵐の罠(´Д`)
0197デフォルトの名無しさん
2005/09/25(日) 21:11:430198デフォルトの名無しさん
2005/09/26(月) 00:12:18http://www.geocities.com/fekinci37/vol.htm
0199デフォルトの名無しさん
2005/09/26(月) 10:22:21//#include <windows.h>
//Setting Master Volume
//http://www.geocities.com/fekinci37/vol.htm
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD Vollevel;
Vollevel = GetMixerVolume(GetMixerControlID (MIXERLINE_COMPONENTTYPE_DST_SPEAKERS));
//Vollevel = GetMixerVolume(GetMixerControlID (MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT));
//Vollevel = GetMixerVolume(GetMixerControlID (MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER));
if (Vollevel)
SetMixerVolume(GetMixerControlID (MIXERLINE_COMPONENTTYPE_DST_SPEAKERS), 0);
else
SetMixerVolume(GetMixerControlID (MIXERLINE_COMPONENTTYPE_DST_SPEAKERS), 65535);
}
0200デフォルトの名無しさん
2005/09/26(月) 13:46:27//WOutLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
//WOutLine.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
http://www.gbuilder.times.lv/mixer.htm
http://www.gbuilder.times.lv/bcb_tips/MIXER_DEMO.rar
WinRAR
RAR/ZIPファイルの圧縮・解凍
http://www.vector.co.jp/soft/win95/util/se100730.html
0201デフォルトの名無しさん
2005/09/26(月) 18:11:59Form1->TrackBar1->Max = 65535;
■ このスレッドは過去ログ倉庫に格納されています