C++Builder相談室 Part18at TECH
C++Builder相談室 Part18 - 暇つぶし2ch812:809
08/06/07 06:48:02
三番目の引数が関数じゃないって怒られました \(^o^)/

813:デフォルトの名無しさん
08/06/07 10:45:35
関数オブジェクト使えよ

sortName(Asc) とか sortName(Desc) と書けるように

814:809
08/06/08 05:43:37
関数オブジェクトが理解できません\(^o^)/
ヤバス

815:デフォルトの名無しさん
08/06/08 11:51:43
STLよく知らんがこんなんでいいんじゃないん?
struct CData {
CData(std::string name, int value):Name(name), Value(value){};
std::string Name;
int Value;
};
struct CCompareTest {
int mode;
CCompareTest(int val) : mode(val) {}
operator()(const CData& l, const CData& r) {
if (mode == 0) { return (r.Value > l.Value) ? true : false; }
else { return (r.Value < l.Value ) ? true : false; }
}
};

main() {
std::vector<CData> test;
test.push_back(CData("Item1", 0));
test.push_back(CData("Item2", 4));
test.push_back(CData("Item3", 2));
test.push_back(CData("Item4", 3));
test.push_back(CData("Item5", 0));
std::sort(test.begin(), test.end(), CCompareTest(1));
for(std::vector<CData>::iterator it = test.begin(); it < test.end(); it++) {
std::cout << (*it).Name << ":" << (*it).Value << endl;
}
}
Name基準でしかソートしないならoperator >(const FI&, const FI&)とoperator <(const FI&, const FI&)定義して
std::greaterとstd::less使えば事足りるだろうけど。

816:デフォルトの名無しさん
08/06/08 12:41:25
関数オブジェクトってのは単に operator() をオーバーロードしたクラスのオブジェクトってだけのことだ。

817:デフォルトの名無しさん
08/06/08 16:43:38
なんだ関数オブジェクト知らなかったのか
普通に関数呼び出すよりも関数オブジェクトの方が
最適化を掛けるとインライン化されて速度が上がる可能性が高い

まあ中にはVCみたいに関数呼び出しまでインライン化するお馬鹿な
コンパイラもある事にはあるが

818:デフォルトの名無しさん
08/06/10 18:37:40
Variant型のvarDispatchタイプにバイナリデータが入ってるのですが
これをHEX文字に変換する方法を教えてください

819:デフォルトの名無しさん
08/06/11 06:39:17
ん。varDispatchってことは、インターフェースへのポインタが入ってるわけでしょ?
そのインターフェースに何かしらのデータ取得用のメソッドないの??
varByte || varArrayなどのSafe配列としてバイナリデータ格納されてるわけじゃないんでしょ?


820:デフォルトの名無しさん
08/06/16 20:02:23
HBITMAP Spi_LoadImage(LPSTR plugin,LPSTR filename)

というHBITMAPを返す関数があるのですが、これをフォームに表示する方法がわかりません><

HBITMAP bitmap = Spi_LoadImage( "c:\\ifjpeg.spi", "c:\\0.jpg" );
Image1->Canvas->CopyRect(
Rect(0,0,bitmap->Width,bitmap->Height),
bitmap->Canvas,
Rect(0,0,bitmap->Width,bitmap->Height)
);

とすると「E2288 -> か ->* の左には構造体のポインタが必要」ってエラーが出てしまうのです。
どうしたらいいでしょうか

821:デフォルトの名無しさん
08/06/16 20:08:16
TBitmap::Handleに戻り値のハンドルぶち込めばいいんじゃね?

822:820
08/06/16 20:13:17
>>821 TBitmapコントロールってないですよね?><
フォームにはTImageを張ればいいのでしょうか??

823:デフォルトの名無しさん
08/06/16 20:24:47
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
HBITMAP hBitmap = Spi_LoadImage("IFPSD.spi", "test.psd");
Image1->Picture->Bitmap->Handle = hBitmap;
}
//---------------------------------------------------------------------------

__fastcall TForm1::~TForm1()
{
Image1->Picture->Bitmap->ReleaseHandle();
}

824:820
08/06/16 20:29:22
>>823 ひぃ~、できました!!感動です!ありがとうございます!!
このスレはすぐ的確な回答が返ってくる素晴らしいスレだと思います!!

825:デフォルトの名無しさん
08/06/16 20:31:01
つーかちゃんとVCLのドキュメント嫁

826:820
08/06/16 20:34:02
bcbに関しては全部ネットで勉強してるので、
なんかとっかかりがないんです(汗
VBとかVCはIDEがナビゲートしてくれる感じなのですが。。

827:820
08/06/16 21:39:47
たびたびすみません;;
テキストボックスを入力不可にしてグレーにしたいんです。
VBとかだとenableをfalseにすると勝手にグレーになって編集不可になったと思うのですが、
bcbだとreadonly=trueにして、自前で色を変更しないといけないのでしょうか?;;

828:デフォルトの名無しさん
08/06/16 21:48:06
自前でどうぞ。

829:デフォルトの名無しさん
08/06/16 21:49:33
無効にすればそうなるはずだが

830:820
08/06/16 21:55:24
ああ、enabled=falseにすると、エディットボックスのテキストがグレーになりました!!
テキストボックス自体をグレーにするには自前でするしかなさそうですね。。

831:デフォルトの名無しさん
08/06/17 15:36:15
知らないならレスしないでください。

832:デフォルトの名無しさん
08/06/18 21:49:33
ベッキーのようにexeから関数をエクスポートしたいのですが、
exeとエクスポート先のexe両方ともコンパイルできたのたのですが、
呼び出しexeで初期化が失敗しましたとでます。

とりあえず、exeのlibを作って静的にリンクしています。
またソースは
extern "C" __declspec(dllexport) char* __stdcall GetA(void);
という形で両exeに宣言してます。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch