トップページ⇒tech
1001コメント337KB

C++Builder相談室 Part15

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/21(日) 17:48:30
C++Builderに関する質問・回答や議論等を行う相談室スレッド。


過去スレ・関連サイトは>>2-7あたり。
0133デフォルトの名無しさん2005/09/16(金) 08:33:35
>>132
1バイトづつIntToHex
0134デフォルトの名無しさん2005/09/16(金) 09:07:48
#define NO_WIN32_LEAN_AND_MEAN
0135デフォルトの名無しさん2005/09/18(日) 18:04:00
C++Builderを使用しているのですが、BuilderからExcelを操作する(グラフの書き方)
方法がわかりません。
Excelに数字を保存する方法はわかったのですが、グラフの書き方がわからないので、
知っている人がいれば教えてください。
0136ミ,,゚Д゚彡 ◆A6VzDeLphI 2005/09/18(日) 20:38:29
とある行or列にデータが入ったら
グラフが描かれるテンプレートを用意して
xltとして保存しておいて

Excelをコントロールするとき
Excel起動後、新規シートではなく
xltを読み込んで動作させてはいかがかと。
0137デフォルトの名無しさん2005/09/18(日) 22:03:55
64ビットのプログラムは作れますか?
0138デフォルトの名無しさん2005/09/18(日) 22:17:03
RichEditへの描画
投稿日 : 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:17
デスクトップに文字などを表示するには

void __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
>>132
処理に困っているのは 0x00 だけ?
バイナリデータって聞くとそれ以外にも普通に表示されないコードが
あると思っちゃうけど無いの?
もしあるならどういう風に表示させるつもり?

TFileStream::Read() を使って unsigned char の配列に入れて
表示したいように加工してから表示・・・?
0141デフォルトの名無しさん2005/09/21(水) 00:21:17
CppWebBrowser1NewWindow2(TObject *Sender,
LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
一部省略
*ppDisp = CppWebBrowser->Application;

}

*ppDisp = CppWebBrowser->Application;

ってどういう意味なのですか?一般的に

0142デフォルトの名無しさん2005/09/21(水) 00:56:00
一般的に言うと>>141はかなりのバk(ry
0143デフォルトの名無しさん2005/09/21(水) 02:41:42
英語版Windows上で実行したときに、エラーメッセージを英語化したいのですが、どのようにしたらよいのでしょうか?
0144デフォルトの名無しさん2005/09/21(水) 03:22:06
>>143
パッケージを使ってビルドすれば、BPLに対応するリソースdll(日本語ならJPN)が自動で選ばれる。リソースdllが無ければVCL内のメッセージについては英語のはず。
静的ビルドのときは、CDに入ってる(←バージョンによっては)英語版VCLでビルドするか、最悪でもやはりリソースとして.exeに埋めこまれてるのでリソース編集ツールで置き換えられる。
0145デフォルトの名無しさん2005/09/21(水) 03:23:28
日本語ならJPだった。
0146デフォルトの名無しさん2005/09/21(水) 11:19:32
C++BuilderのTPageControlで、一番最後のタブを削除すると
強制的に最初のタブがアクティブになってしまうけど、
私はその削除するタブの一個前をアクティブにしたいのだが、
どうすれば良いのですかね。今現在ページの移動が見苦しい

<現在の擬似コーディング>

//現在のページ数
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
>>146
削除前に移動してもだめ?
0148デフォルトの名無しさん2005/09/21(水) 13:51:16
>>146
TPageControl::RemovePageをオーバライドするしか無いような‥‥
てかそこで削除したページの次を検索してそのページに切り替え動作やってるようだ。
01491462005/09/21(水) 14:05:24
>>147 削除前に移動しても、やっぱり最初のページに移動してしまいます。
>>148 TPageControl::RemovePageは、privateにあって難しいかも。 
VCLのソースそのものの書き換えが必要?
0150デフォルトの名無しさん2005/09/21(水) 14:44:55
>>149
ヘッダ書き換えで行けないかね‥‥
0151デフォルトの名無しさん2005/09/21(水) 17:01:36
>>149
TPageControlを継承した派生クラス作って、
RemovePage()をオーバーライドでどう?
0152デフォルトの名無しさん2005/09/21(水) 18:33:37
そういやTPageControlのRemovePageは呼び出す必要なかったな‥‥
01531462005/09/22(木) 09:03:53
>>もっと詳しく・・
0154デフォルトの名無しさん2005/09/22(木) 09:18:59
>>153
class 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
568 名前: デフォルトの名無しさん [sage] 投稿日: 2005/09/22(木) 11:44:11
並べてみると壮観だね

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:15
良さげだね。SSE2は既にサポートしてるような。SSE3の間違いだべか。
0157デフォルトの名無しさん2005/09/23(金) 23:37:18
名前 点数
二郎 90
一郎 70
太郎 80

点数をソートして、名前を点数順に取得する方法がわかりません。
知っている人がいれば教えてください。
0158デフォルトの名無しさん2005/09/23(金) 23:44:00
>>157
TStringList
0159デフォルトの名無しさん2005/09/23(金) 23:59:49
>157
158じゃないけど、TStringListで良いんじゃないの?
その場合、090という風に桁数を合わせないとダメだけど。
090二郎
070一郎
080三郎
という感じにして、Sort()で昇順になるから、逆順(高い者順)なら
下から取ってくれば良い。
0160デフォルトの名無しさん2005/09/24(土) 01:55:00
>>157

//構造体を定義
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:08
>>156
IDEの起動に物凄い時間がかかってメモリもありえないほど喰うけどな
0162デフォルトの名無しさん2005/09/24(土) 12:33:01
>>160さん
bcb6を使って>>160を試しましたが、
リンカエラーになります。
0163デフォルトの名無しさん2005/09/24(土) 13:15:18
>>162
そうか。
で、それがどうかしたか?
>>160のソースに問題はないのでリンカエラーを起こしたのは君の責任だ。
0164デフォルトの名無しさん2005/09/24(土) 13:20:21
>>162
俺は>>160さんのソースを打ち込んで、適当にアレンジしてMemoに
中身を貼り付けるようにしてみたが、ちゃんと動いたぞ。
0165 2005/09/24(土) 13:42:49
メッセージループをいじくるにはどうしたら言いのですか。
Windows用のPeekMessageとGDIを使った簡単なアニメーションと言うかゲームみたいなプログラムのソースを読んだんですが、C++Builderのプログラムに移植したいと思ったんですけど、PeekMessageを使っててメッセージループ中に他の自作関数を呼んだりしないといけません。
でもC++Builderのプログラムにはメッセージループがありません。どこにあるのですか?どうしたらカスタマイズできますか。
0166デフォルトの名無しさん2005/09/24(土) 14:09:07
>>165
BEGIN_MESSAGE_MAP
0167デフォルトの名無しさん2005/09/24(土) 14:25:09
ユーザー定義のメッセージを受け取るには?
http://www.borland.co.jp/qanda/cbuilder/c0002864.html
0168デフォルトの名無しさん2005/09/24(土) 14:32:46
>>165
TApplicationクラスのprivate関数ProcessMessageにメッセージループはある
0169デフォルトの名無しさん2005/09/24(土) 14:59:01
VBで言うところの

strA = "Button1"
From1.controls(strA).Visible = True

みたいにBCBで

Form1 -> strA -> Visible = True

みたいには出来ますか。


0170デフォルトの名無しさん2005/09/24(土) 15:21:08
>>169
String strA = "Button1";
Form1->FindChildControl(strA)->Visible = True;

ただし、実際はifでくくったほうが良い。

if ( TControl* ctrl = Form1->FincChildControl(strA) )
 ctrl->Visible = True;

0171デフォルトの名無しさん2005/09/24(土) 15:24:05
>>170
さすがだね。ありがとう
0172デフォルトの名無しさん2005/09/24(土) 15:24:51
↑
×True
○true
×FincChildControl
○FindChildControl
0173デフォルトの名無しさん2005/09/24(土) 15:53:51
boostのBCBへのインストールの方法がよく分かりません。
boostを使えるようにする方法を教えてく浅い。
0174デフォルトの名無しさん2005/09/24(土) 15:57:42
>>173
binフォルダ中のbcc32.cfgに
-I"C:\boost_1_33_0"等を追加。既に-Iがあると思うので、セミコロンで
区切って後ろに追加する。

buildは・・・・・諦めた方がいいかもね。
0175デフォルトの名無しさん2005/09/24(土) 17:43:20
>>173
http://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
These are not planned.
- Updates for BCB6

orz
0177デフォルトの名無しさん2005/09/24(土) 21:30:34
重くなるだけみたいね
0178デフォルトの名無しさん2005/09/24(土) 23:27:46
AnsiString z = "070";
先頭の0を取り除く方法がわかりません。
0179デフォルトの名無しさん2005/09/24(土) 23:30:32
>>178
z = AnsiString(z.ToInt());
0180デフォルトの名無しさん2005/09/24(土) 23:32:29
>>178
AnsiString z = "070";
Caption = IntToStr( StrToInt(z) + 0 );
0181デフォルトの名無しさん2005/09/24(土) 23:37:06
Caption = Format("%3.3d", OPENARRAY(TVarRec, (70))); //070
0182デフォルトの名無しさん2005/09/25(日) 00:03:21
>>178
char *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:32
>>157

void __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
>>157 >>178
ま、なんだ。こういうところで安易に質問する前に
自分でもちっと勉強しろって事だな。
0185 2005/09/25(日) 00:45:22
>>168 >>169
説明がわるかったけど、独自メッセージを処理したいというより
リアルタイム処理のためにGetMessageじゃなくてPeekMessageをつかったメッセージループとそのループ中に関数呼び出しを挿入したいということだけど、やっぱり分かりにくいか。

>>170
private関数じゃどうにもならないね。
0186デフォルトの名無しさん2005/09/25(日) 02:00:47
Application->ProcessMessages()を使う
01871652005/09/25(日) 05:39:28
アク禁くらってて慌ててたため、番号が間違えてました。
>>166 >>167 >>168
失礼しました。そしてありがとう。

>>168 >>186
メインループは書き換えられないけど、時間のかかるループの中でこれを呼べばいいみたいですね。
どうもありがとうございました。
0188デフォルトの名無しさん2005/09/25(日) 08:49:05
>>185
タイマースレッド作って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(ウインドウのサイズが変更した時に送られる)
  
01901652005/09/25(日) 12:28:11
>>188
うん、その方法もあるね。
たまたま見たプログラムがメッセージループをいじくるやつだから、Builderだとどうなるかと思ったんです。
0191デフォルトの名無しさん2005/09/25(日) 15:24:55
コピペ荒らしにマジレスしちゃうが
>>189
WndProcオーバーライドしろと
0192デフォルトの名無しさん2005/09/25(日) 17:26:37
Trapping Windows Messages
http://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
>>192
休まずかき混ぜ続けるんだ
0194デフォルトの名無しさん2005/09/25(日) 18:15:13
>>192
そりゃ、スクロールイベントをShowMessageで止めてるんだからそうなるでしょ
0195デフォルトの名無しさん2005/09/25(日) 18:37:24
>>192
if (msg == WM_VSCROLL)
OutputDebugString("The vertical scrollbar is scrolling!")

これで解決
0196デフォルトの名無しさん2005/09/25(日) 20:49:46
別スレッドを作ってShowMessage(・∀・)
そして、ダイアログボックスの嵐の罠(´Д`)
0197デフォルトの名無しさん2005/09/25(日) 21:11:43
モーダルダイアログの意味が分かってないのね
0198デフォルトの名無しさん2005/09/26(月) 00:12:18
Setting Master Volume
http://www.geocities.com/fekinci37/vol.htm

0199デフォルトの名無しさん2005/09/26(月) 10:22:21
//#include <mmsystem.h>
//#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_SRC_WAVEOUT;
//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:59
>>200

Form1->TrackBar1->Max = 65535;
0202デフォルトの名無しさん2005/09/26(月) 23:37:11
BCBに未来はあるんでしょうか?
0203デフォルトの名無しさん2005/09/26(月) 23:39:07
C++に未来はあると俺は思う。
BCBに未来があるかどうかは、俺にはわからない。
0204デフォルトの名無しさん2005/09/27(火) 09:10:26
Win32では「プロトタイプ→製品」に関して最強。自分が使えれば、BCBに未来が有っても無くても構わん。
0205デフォルトの名無しさん2005/09/27(火) 20:35:380
フォームを消す!?
常駐系のアプリケーションを作成する場合など、タスクバーにアプリケーションのアイコンを表示したくない場合があります。

そんな時は、プロジェクトファイル(*.bpr)のソース(*.cpp)に以下のように追加します。


Project1.cpp
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->ShowMainForm = false; //これを追加
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}


ただしこのままだと終了させる術がないので、タスクトレイにアイコンを表示するなどの処置はしておきましょう(^^;

ただしShowMainFormプロパティはアプリケーションの起動時に表示するかしないかを決めています。
そこで、フォームを表示させたい場合はForm1->Show()などとして表示させましょう。
0206デフォルトの名無しさん2005/09/27(火) 20:56:220
うざ
0207デフォルトの名無しさん2005/09/27(火) 21:23:36ID:0
>>204
仕事で使いたいなと思っているんだけど
もう新製品が出ませんとかだとなかなかね〜
0208デフォルトの名無しさん2005/09/27(火) 21:41:52ID:0
逆に言うと、環境の入れ替えは不要だけどな
移行のテストも新バージョンの隠れたバグにも悩まされない

でも正直、環境入れ替えの移行テストもしたいし、SPが配布
されるのを心待ちにもしい・・・・・・・・・・・・・・・・・・・・・・
0209デフォルトの名無しさん2005/09/27(火) 22:02:03ID:0
>>207
年末に出ますよ。
2007年にはwin64対応版も出るとの事です。

Delphi RoadMap
http://blog.marcocantu.com/blog/ekondelphiroadmap.html
> Delphi/C++ for win64 (circa 2007): the name says it all My Comment
0210デフォルトの名無しさん2005/09/27(火) 22:52:45
Dexterの新機能発表

EKon 9 Delphi Product Address
http://81.70.196.39:4242/Weblog/Blog.aspx?RootId=5:156
0211デフォルトの名無しさん2005/09/27(火) 22:54:41
>>210
Delphi談話室と間違えました
マルチポスト御免なさい mOm
0212デフォルトの名無しさん2005/09/28(水) 10:40:38
5と6ってどっちがバグ多いですか?
同じくらいならどっちを使うのがいいですか?
0213デフォルトの名無しさん2005/09/28(水) 10:43:50
>>212
急ぎじゃなければDelphi2006待ってから決めるのが吉
0214デフォルトの名無しさん2005/09/28(水) 10:47:25
TListViewでオーナードローを使ってCaptionとSubItemを違う色で表示したいのですが
SubItemがCaptionと同じ色で表示されてしまいます。

void __fastcall TForm1::ListView1DrawItem(
TCustomListView *Sender, TListItem *Item, TRect &Rect,
TOwnerDrawState State)
{
TCanvas *canvas = Sender->Canvas;

if (Item->Selected)
{
canvas->Brush->Color = clHighlight;
}
else
{
canvas->Brush->Color = clBlack;
}

canvas->Font->Color = clWhite;
canvas->TextOutA(0, Item->Top, "Caption");

canvas->Font->Color = clFuchsia;
canvas->TextOutA(ListView1->Columns->Items[0]->Width, SubItem);
}

どこがいけないのでしょうか。
0215デフォルトの名無しさん2005/09/28(水) 11:45:59
>>213
急ぎではないですが、それはいつ発売されますか?
0216デフォルトの名無しさん2005/09/28(水) 12:26:44
>>215
年末くらい
0217デフォルトの名無しさん2005/09/28(水) 16:54:11
>>214
最近BCB触ってないからアレなんだが・・・↓のコードでいけないか?

void __fastcall TForm1::ListView1DrawItem(
TCustomListView *Sender, TListItem *Item, TRect &Rect,
TOwnerDrawState State)
{
TCanvas *canvas = Sender->Canvas;

if (Item->Selected)
{
canvas->Brush->Color = clHighlight;
}
else
{
canvas->Brush->Color = clBlack;
}

SetTextColor(canvas->Handle, clWhite); // ← 変更
canvas->TextOutA(0, Item->Top, "Caption");

SetTextColor(canvas->Handle, clFuchsia); // ← 変更
canvas->TextOutA(ListView1->Columns->Items[0]->Width, SubItem);
}
0218デフォルトの名無しさん2005/09/28(水) 17:14:31
>>214
最後の行はcanvas->TextOutA(ListView1->Columns->Items[0]->Width, Item->Top, "SubItem");
の打ち間違い?だとして、それでちゃんと色分けされたけどな。
0219デフォルトの名無しさん2005/09/28(水) 18:24:03
//http://homepage3.nifty.com/endou/tips/01/tips1.htm
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *mBitMapA; //ビットマップオブジェクトの宣言
Graphics::TBitmap *mBitMapB; //A:ソース B:オブジェクト
mBitMapA = new Graphics::TBitmap();
mBitMapB = new Graphics::TBitmap();
mBitMapA->LoadFromFile("C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256color\\factory.bmp"); //ソースファイルを読み込む
mBitMapA->PixelFormat = pf24bit; //24ビットのビットマップにする
mBitMapB->LoadFromFile("C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256color\\factory.bmp");
mBitMapB->PixelFormat = pf24bit;
#define kR 2//RGBのオフセット値
#define kG 1//ビットマップの中では、B G Rの順に並んでいます。
#define kB 0
{
int x,y,w,h;
unsigned char*pA,*pB;
w = mBitMapA->Width;
h = mBitMapA->Height;
for(y=0; y<h; y++) {
pA = (unsigned char *)mBitMapA->ScanLine[y];
pB = (unsigned char *)mBitMapB->ScanLine[y];
for(x=0; x<w; x++) {
pB[x*3+kR] = (unsigned char)(255 - pA[x*3+kR]);
pB[x*3+kG] = (unsigned char)(255 - pA[x*3+kG]);
pB[x*3+kB] = (unsigned char)(255 - pA[x*3+kB]);
}
}
}
Form1->Canvas->Draw(0,0,mBitMapB);
}
0220デフォルトの名無しさん2005/09/28(水) 23:36:37
>>216
delphi2006でC++が使えるの?
0221デフォルトの名無しさん2005/09/28(水) 23:49:01
>>220
http://blog.marcocantu.com/blog/ekondexter.html
0222デフォルトの名無しさん2005/09/28(水) 23:58:43
>>221
ほ〜 ありがとう
もうMFC使ってのGUIアプリ作るのは疲れたよ。
0223デフォルトの名無しさん2005/09/29(木) 10:23:32
>>222
そんな目的なら現行 BCB6 を買っておきなよ。D2006 なんか期待しちゃだめ
0224デフォルトの名無しさん2005/09/29(木) 10:41:46
MFCは単一ウィンドウ(ゲーム、物理シミュレーション)とか以外で使おうとは思わん・・・。
0225デフォルトの名無しさん2005/09/29(木) 10:42:36
単一ウィンドウっつーかウィンドウのみの時、ね。
0226デフォルトの名無しさん2005/09/29(木) 14:16:21
http://pc8.2ch.net/test/read.cgi/tech/1124614110/l50
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50
0227デフォルトの名無しさん2005/09/29(木) 23:44:08

[リンカ 致命的エラー]fatal:オプションの間違い:2045;
0228デフォルトの名無しさん2005/09/30(金) 11:01:40
新規作成でフレームを作成し、フォームにそのフレームを貼り付けたのですが
そのフォーム内のイベントでフレーム無いのラベル等のキャプションを変更しようとするとエラーになります。
Frame1->Label1->Caption = "aaa";
上記のコードを実行するときはすでにフレームのコンストラクタは呼ばれていますが
0229デフォルトの名無しさん2005/09/30(金) 11:23:02
>>228
とりあえずオブジェクトインスペクタでフォームに乗っかってるフレームのNameを確認する。
0230デフォルトの名無しさん2005/09/30(金) 11:28:08
>>229
貼り付けたフレームはフォームに貼り付けられたフレームにしかアクセスできませんか?
Frame11->Label1->Caption = "aaa";
たしかにこれならできますが、設計時にフレームを修正するとフォームに貼り付けてるフレームの内容も
同時に修正されるので、Frame1->Label1->Caption = "aaa";みたいに直接フレームないのラベル等の変更ができるかなっておもったんですが
これはできないってことですか?
0231デフォルトの名無しさん2005/09/30(金) 11:34:29
>>230
できません
0232デフォルトの名無しさん2005/09/30(金) 11:40:02
>>231
あ、できないんですか。納得です。
しかしフォームに貼り付けたフレームのボタンのクリックイベントを作成すると
Frame21->BitBtnClick(Sender);
みたいに、フレームのボタンクリックイベントを呼んでるんですよね。
何故これを呼ぶことができるのにキャプションの変更が出来ないのかが謎だなあ
ちなみに、フレーム内のボタンのクリックイベントでラベルの変更を行うのは可能なんですよね。
なんでだろ・・
■ このスレッドは過去ログ倉庫に格納されています