C++Builder相談室 Par ..
[2ch|▼Menu]
657:デフォルトの名無しさん
08/04/14 18:52:01
もう少しOSの事も勉強した方がいいと思うぞ

658:デフォルトの名無しさん
08/04/14 18:53:02
現象だけから見たら、ブチ壊れたポインタ使いながら走ってる典型。


659:デフォルトの名無しさん
08/04/14 19:03:14
特定条件でポインタの初期化が抜けているに90リラ


660:デフォルトの名無しさん
08/04/14 19:24:55
>>659
m9(^Д^)プギャーーーッ

661:デフォルトの名無しさん
08/04/15 10:09:57
質問です
よくウィザード画面てありますよね?
次とか戻るとかの、あれってあたかあも1つのフォームでやってるように見えるのですが
一般的にはどうやってるのでしょうか?
1.同サイズのフォームを用意して次を押されると次のフォームを表示して前のフォームを非表示に
2.PageControlで実行時にタブを非表示にして次を押されると次のタブに移動
これ以外に方法があったら教えてください

662:デフォルトの名無しさん
08/04/15 10:17:12
親フォーム内に子フォーム埋め込んで、次へを押すと子フォームを次のフォームに切り替え。

663:デフォルトの名無しさん
08/04/15 10:45:44
>>662
すみません。どうやって埋め込むんですか?

664:デフォルトの名無しさん
08/04/15 11:13:48
>>663
ボーダーをbsNoneにして
TForm2 *subform = new TForm2(this);
subform->Parent = Panel1; //埋め込みたい位置にパネルなりを配置しておく。
subform->Top = 0;
subform->Left = 0;
subform->Visible = true;

665:デフォルトの名無しさん
08/04/15 11:29:52
>>664
なるほど。
んで次や戻るでフォームを動的にnewして埋め込むと
その場合は次に進んだ時には前フォームの情報は失われるので
自分でファイルなりに保存しておくんですよね?

666:デフォルトの名無しさん
08/04/15 19:47:09
>661
CreatePropertySheetPage()
ただし相当な修羅場を潜り抜けないと使いこなせない。
少なくともリソースについての理解が必要。

667:デフォルトの名無しさん
08/04/15 22:27:22
PageControlでいいじゃん

668:デフォルトの名無しさん
08/04/15 22:31:33
>666の関数をググってみると
VCLはやっぱり神。って思った。

669:デフォルトの名無しさん
08/04/16 10:48:37
>>661
非標準ライブラリの使用がOKならば、JVCLのTJvWizardは?

670:デフォルトの名無しさん
08/04/16 18:04:29
名前を指定してコントロールを取得したいのですが、方法がわかりません
ご教授お願いします

671:デフォルトの名無しさん
08/04/16 18:21:39
名前がわかってんなら、それがコントロールだべや。
なにを聞いているのか意味わかんね。


672:デフォルトの名無しさん
08/04/16 18:23:28
FindComponentってことだろ?このブタ野郎が!

673:デフォルトの名無しさん
08/04/16 18:27:11
説明不足ですいません

for (int i=0; i < 10; i++) {
 AnsiString name = txtID + IntToStr(i);
 // 名前からコントロールにアクセス
}

フォームに連番のついたテキストボックスがあるのですが
大量にあるためループで処理できれば、と考えています。
VB.NETのFindControlみたいなことがしたいのです。

674:デフォルトの名無しさん
08/04/16 18:41:54
>>673
お前みたいなクズは始めてた
お前>>672だけ100回見て1年ROMってろくず

675:デフォルトの名無しさん
08/04/16 18:45:40
配列にすればええねん

676:デフォルトの名無しさん
08/04/17 20:46:56
メモリリークってプログラムの途中じゃ見ることできないですよね?
やっぱ、終わったときだけ?

677:デフォルトの名無しさん
08/04/17 21:02:23
>>674
カルシウム不足
不摂生な生活


678:デフォルトの名無しさん
08/04/18 22:38:08
大学でBorland C++ Builder version.4を使用しています。
自宅でもプログラムを組みたいので、Borland C++ Builder 2007の体験版を使っているのですが、
*.dfmの互換性がないため、大学側のC++ Builderで使用するのに一々フォームを組み直す必要があって非常に面倒です。
*.dfmに下位互換を持たせることはできるのでしょうか?教えてください。

679:デフォルトの名無しさん
08/04/19 02:16:57
>>678
BCB4を大学からコpうわなにをするやめr

680:デフォルトの名無しさん
08/04/19 03:09:32
>>678
両方にTurbo C++ Explorerをインスコ

681:デフォルトの名無しさん
08/04/19 22:05:05
お世話になります。
ファイルマッピングの実装が完了しました。

で、複数のデータをひとつの文字列で送る予定なんですが、
数字であれば、カンマ仕切りで分ければいいのですが、
数字と任意の文字列も含んでおり、任意の文字列の中にカンマがあれば、
受信側で処理ができにくいと考えています。
" "や"|"や","など考えましたが、できるだけ、任意の文字列に例外文字・予約文字?
を作りたくありません。

こんな場合、どういう方法があるのでしょうか?
もちろん、仮想メモリーを別に設ければいいだけなんですが、
良い方法があれば教えてください。

ちょっとスレ違いです。すみません。

682:デフォルトの名無しさん
08/04/19 23:44:53
任意の文字列に"があったら\"に、\があったら\\に変換すればいい

683:デフォルトの名無しさん
08/04/20 01:56:37
普通に考えれば','じゃなく\x9を区切りに使うんじゃね?

684:デフォルトの名無しさん
08/04/20 09:17:58
文字列長も一緒に送るなら\0で区切っても‥‥

685:デフォルトの名無しさん
08/04/20 09:34:53
普通、ファイルマッピングならバイナリーをやり取り出来るわけでわざわざシリアライズする必要はないと思うけどな
もしかして文字列の最大サイズを設けたくないのかな?
あるいは読み出し側でストリームとして読み出してるんだろうか? ならパイプでいいと思うけどな。

とりあえず、文字列の問題は送信時に文字列の部分をエンコードするのが普通
>>682さんの方法のほかに特殊文字は全部 %xx と%の後に2桁の16進数にしてしまう方法がある。

これがエンコードもデコードも簡単。
文字列の部分をエンコードしてからTStringListにAddで入れて CommaText で1行にして送るだけ

エンコードは、1文字づつみて英数字以外は全部 %xx に置換してしまえばいい
デコードは %を見つけたら次の2文字を取ればいいだけ

686:デフォルトの名無しさん
08/04/21 14:07:50
TChartのSeriesCountが1、軸にAutomaticを設定
この状態で最初のデータに2859以上のデータを追加するとエラーになるのはBCBの仕様?

687:デフォルトの名無しさん
08/04/22 00:54:11
シリアライズの件ですが、
難しいです。
検討してみたいと思います。
レスありがとうございました。

688:デフォルトの名無しさん
08/04/24 16:38:01
静的リンクを設定したのですが、BCB非インストール端末にて動作させるとエラーが発生します。
当方BCB6のProを使用しております。
解決方法があれば教えていただきたいです。

以下エラーメッセージ
vclx60.bplが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。

689:デフォルトの名無しさん
08/04/24 16:42:47
リンカとパッケージ

690:デフォルトの名無しさん
08/04/24 16:53:28
>>689
リンカの共有RTL DLL、パッケージの実行時パッケージを使って構築
この二つはチェックをはずしてありますが、他にも設定する部分があるのでしょうか?

691:デフォルトの名無しさん
08/04/24 17:11:41
コードガードとデバッグ情報

692:デフォルトの名無しさん
08/04/24 17:20:46
>>691
CodeGuardは対象無し、デバッグ情報はリリースで再構築しているためチェックが外れています
どうも他の人がやるとエラーの出ない実行ファイルが作成されたので、プロジェクトでなく処理系の設定じゃないかと思っています

693:デフォルトの名無しさん
08/04/24 17:23:56
exeのサイズはそれなりのサイズになっとるかね?
ディレクトリ・条件で無駄なあれがあったら削除してみるとか

694:デフォルトの名無しさん
08/04/24 18:10:39
1.2Mくらいの実行ファイルが出来てます
他の人に作成してもらったものとは30kくらい大きいです
条件は不要なものがあったので削除してみましたが、変化無しでした

695:デフォルトの名無しさん
08/04/24 19:15:13
obj tds dsk とか不要ファイルを全部消してみたら?

696:デフォルトの名無しさん
08/04/24 19:39:56
BDS2006/2007は、単独実行exeを作成するにはオプション3箇所変更する必要あるけど、
Builder5/6は2箇所でいいのかな?
オプションをもう一度目をこらして確認してから、再構築かな。


697:デフォルトの名無しさん
08/04/24 23:02:39
プロジェクトファイルが変になってるとか
新規プロジェクトで再構築はどうかな

698:デフォルトの名無しさん
08/04/25 09:02:21
うおおありがとうありがとう
いろいろやってみたけどどうも上手くいかなかったです
とりあえず再インストールしてやってみます

699:デフォルトの名無しさん
08/05/07 14:15:13
FindFirstでファイルの列挙を取得しています
自分のPCだと問題なく取得できるのですが、ファイルサーバだと取得できません。
調べてみたところTSearchRecのAttrがものすごく大きい値になってしまっているのが原因のようです。
回避策などあればご教授お願いいたします。

TSearchRec sr;
        int attr = faAnyFile;
        if (FindFirst(Edit1->Text + "\\*.EXE", attr, sr) != 0)
        {
            return;
        }

        do
        {

       if ((sr.Attr & attr) != sr.Attr)
                {
                    continue;
       }

                // 処理                

            } while (FindNext(sr) == 0);
       FindClose(sr);
        }


700:699
08/05/07 14:19:19
うお、字下げがひどい
TSearchRec sr;
int attr = faAnyFile;
if (FindFirst(Edit1->Text + "\\*.EXE", attr, sr) != 0)
{
    return;
}

do
{
    if ((sr.Attr & attr) != sr.Attr)
    {
        continue;
    }

     // 処理                

} while (FindNext(sr) == 0);
FindClose(sr);
 

701:デフォルトの名無しさん
08/05/07 14:41:59
TSearchRec.Attrは実装的には0x7FFFまで取りうるはず。
(winnt.h 5208行以降とWindowsSDK WIN32_FIND_DATAのドキュメント参照)


702:デフォルトの名無しさん
08/05/07 15:22:44
Attrってフラグの組み合わせなのに、大きさがどう関係あるの?

> if ((sr.Attr & attr) != sr.Attr)

あとこれの意図は?

703:デフォルトの名無しさん
08/05/07 15:29:07
ああfaAnyFileが全部のフラグカバーしてないじゃないかって事か

704:デフォルトの名無しさん
08/05/07 15:36:38
>>701
確認しました。
圧縮ファイルになっていました。

>>703
ご指摘のとおりです。

顧客の設定がわからないため、とりあえず属性の条件部分をコメントにして動くようにします

705:デフォルトの名無しさん
08/05/07 17:02:28
C++Builder6で、

膨張処理

細線処理

のプログラムをおしえてください。

706:デフォルトの名無しさん
08/05/07 19:24:26
borland C++Builder6からgnuplotを実行し、
グラフを書かせたいのですが、
以下のコードではエラーが出てしまいます。
(pgnuplot.exeを認識しない。)
ご指摘をお願いします。

-----------------------------------------------------
FILE* gp;
gp = _popen("C:/Gnuplot/bin/pgnuplot.exe","wt");
if(gp == NULL){
ShowMessage("I can't find PATH");
exit(EXIT_FAILURE);
}
fprintf(gp, "plot sin(x)\n");
fprintf(gp, "pause -1");
fflush(gp); /* Don't forget to flush the buffer. */
getchar();
_pclose(gp);

exit(EXIT_SUCCESS);
----------------------------------------------------

707:デフォルトの名無しさん
08/05/07 19:55:59
>>706
ディレクトリ区切り記号を\\にしては?
シェル上だとスラッシュでも動作する事多いけどDOS/Windowsの本来のディレクトリ区切り記号はバックスラッシュ。

708:デフォルトの名無しさん
08/05/07 20:28:56
>>707
コメントありがとうございます。
\\でやってみましたが、動きませんでした。。
そもそもC++builderからgnuplotは起動できないのでしょうか・・・。

709:デフォルトの名無しさん
08/05/07 23:14:36
んなことはなかろう。

710:デフォルトの名無しさん
08/05/09 13:36:24
んなことはないつってんだろっ!

711:TOM
08/05/09 14:21:20
// interface
class Interface { public: virtual int getValue() const = 0;};
// print
class Print { public: void out(const Interface& interface) { cout << "## " << interface.getValue() << endl; }};
// class A
class A : public Interface { public: virtual int getValue() const { return 0; }};
// class B
class B : public A {
private: Print p;
public:
virtual int getValue() const { return 1; }
void out() {
// オブジェクトがコピーされて、class Aの値が表示される
p.out((A)*this);
// class AのgetValueが呼び出される
p.out((A&)*this);
}
};
オブジェクトをコピーすることなく、クラスAの値を表示できませんか?

712:デフォルトの名無しさん
08/05/15 01:14:22
Turbo C++ Explorerを使っています。
TEditで文字の右寄せを行いたいのですが、Turbo C++ Explorerでは
コンポーネントの登録ができないため、登録せずに実現する方法があれば
教えていただけないでしょうか?
XP以降ならSetWindowLong()で実現できますが、2000などにも対応したいのです。

713:デフォルトの名無しさん
08/05/15 11:01:33
スレ違い

714:デフォルトの名無しさん
08/05/15 13:18:25
TMemoで代用とかって話があったような

715:デフォルトの名無しさん
08/05/15 13:20:50
>コンポーネントの登録ができないため、登録せずに実現する方法があれば

new して、Parentプロパティに貼り付け先のコンポーネントを設定汁!

716:デフォルトの名無しさん
08/05/16 14:19:36
test

717:デフォルトの名無しさん
08/05/16 20:05:08
>716がBCBで2chブラウザを作るそうです

718:デフォルトの名無しさん
08/05/16 20:09:20
プロジェクトソース部分だけ書けば既存のJaneのソースがそのまま使えそうな>BCBで2chブラウザ

719:デフォルトの名無しさん
08/05/17 23:50:45
スレッドを別に分けて作成しているんですが、
別スレッドからmainの中にあるimageコンポーネントに絵画したいんですが、
どうやら駄目なようです。
このような場合の特殊なやり方教えてください

720:デフォルトの名無しさん
08/05/18 10:07:54
>>719
なんか質問が抽象的杉。
何がダメなんや。
調停入れて描画すればええだけだろ。


721:デフォルトの名無しさん
08/05/18 16:43:33
ビルダーで作っているんですが、
ShellExecuteで他のプロセスを実行させていますが、
自前のプロセスが終了したとき、実行させたプログラムも
一緒に終了させたいのですが、良い方法ありませんか?

今はハンドルを一生懸命さがして
PostMessage
で終了させてます。
ShellExecuteの段階でハンドルがわかればいいとおもうんですが。
いろいろ教えてください。

722:デフォルトの名無しさん
08/05/18 19:51:04
ちょっとお尋ねしたいのですが、


#include <string>
#include <sstream>
#include <fstream>

using namespace std;

int main()
{
stringstream test;

test << (char)0x12 << (char)0x11 << (char)0x10 << (char)0x00 << (char)0x00 << (char)0x09 << (char)0x09 << (char)0x09 << (char)0x09 << (char)0x09;

ofstream fout("test.txt");

fout << test.str();
return 0;

}


このプログラムが吐き出すtest.txtをバイナリエディタで見てみると、後ろから2バイト目に謎の0Dが出てくるのですが、この0Dは一体なんなのでしょう??
コンパイラはMinGWです。


723:デフォルトの名無しさん
08/05/18 19:54:41
すいませんソースコードが間違ってました。
正しいのはこっちです。


#include <cstring>
#include <sstream>
#include <fstream>

using namespace std;

int main()
{
stringstream test;

test << (char)0x12 << (char)0x11 << (char)0x10 << (char)0x00 << (char)0x00 << (char)0x09 << (char)0x09 << (char)0x09 << (char)0x09 << (char)0x09;

int aa = test.str().length();
string uu;
uu = aa;
test << uu;

ofstream fout("test.txt");

fout << test.str();

return 0;

}



724:デフォルトの名無しさん
08/05/18 21:56:54
>>721
CreateProcess使えば?

725:722
08/05/18 23:38:08
誤爆失礼しました。。

726:デフォルトの名無しさん
08/05/18 23:42:07
URLリンク(akky.cjb.net)
これをもう少しスマートにならないものでしょうか?

727:デフォルトの名無しさん
08/05/19 02:36:18
>>722
それテキストモードで開いてないか?

728:デフォルトの名無しさん
08/05/20 18:05:35
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    try
    {
        Chart1->BottomAxis->Automatic = true;
        Chart1->LeftAxis->Automatic = true;

        TChartSeries *cs = new TLineSeries(Chart1);
        Chart1->AddSeries(cs);
        cs->AddXY(30000, 0, "", (TColor)clTeeColor);
    }
    catch (Exception &ex)
    {
        Application->ShowException(&ex);
    }
}

これ実行するとEInvalidPointerになるんだが意味がわからんとです

729:デフォルトの名無しさん
08/05/21 00:16:29
よくわからんけど、
> Chart1->AddSeries(cs);
これいらなくね?あと
> EInvalidPointerになるんだが
どの行で?デバッガで例外を発している処理をちゃんと確認してみたら?

730:デフォルトの名無しさん
08/05/21 10:11:40
>>729
> これいらなくね?
これないと表示されないんだ…
> どの行で?デバッガで例外を発している処理をちゃんと確認してみたら?
ブレークかけてるけど、イベント終了まで例外は発生されなくて、終了後に例外が発生

731:デフォルトの名無しさん
08/05/21 10:20:04
こっちで試した限りじゃ空文字列がまずいようだ

732:デフォルトの名無しさん
08/05/21 11:52:56
空文字を適当な文字列にしたらいけました
ラベルが例外の温床なのかと思い、軸のLabelStyleをtalValueに変えてやってみたら例外発生
あとは実際のプロジェクトで試してみたら例外は変わらず
コンポーネント追加してるのが悪いのかもしらん

733:デフォルトの名無しさん
08/05/21 21:55:24
BCBの64ビット環境への対応に関して情報あれば教えてください。

734:デフォルトの名無しさん
08/05/22 03:20:42
>>733
とりあえずDEP切っておけば動くんじゃね?

735:デフォルトの名無しさん
08/05/22 16:01:31
フォームを持たないプログラムを作るにはどうしたらいいですか?
プロジェクトソースのWinMainにどうやってかけばいいですかね?

736:デフォルトの名無しさん
08/05/22 16:09:43
ウィンドウ持たない常駐型アプリはWindowsの仕様上無理。
メインフォームのVisibleをfalseにすればおk。
起動時に処理してそのまま終了ならコンソールアプリと同じ処理をすればいい(mainをWinMainに置き換えるだけ)

737:デフォルトの名無しさん
08/05/22 16:32:25
TPNGObjectを探してるんだけどこれって本家HPが見れないー
どっかDLできるとこある?

738:デフォルトの名無しさん
08/05/23 23:10:10
>>737
ほんとだねー。
どこかにアップする?

739:デフォルトの名無しさん
08/05/24 05:24:00
Delphiくだすれで見つけた。
URLリンク(www.codeplex.com)
fcしてみたけど手元のv1.564と全く同じだったからこれでいいんじゃないかな。


740:デフォルトの名無しさん
08/05/24 17:53:43
以下のようなエラーが出て、原因がわかりません。。。
エディターはBCC Developerで -W オプションにはチェックをいれています。
初歩的な質問ですみません

> C:\borland\bcc55\Bin\make.exe -fDebug\testWin.mak -B Debug\testWin.obj
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
brcc32 -W -3 -Od -w -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\util\bccdev1221\bccdev1221\DATA\testWin\testWin.cpp
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.

Illegal Parameter: -W

741:デフォルトの名無しさん
08/05/24 17:59:45
リソースコンパイラにC++ソースコンパイルさせるな

742:デフォルトの名無しさん
08/05/24 18:02:32
brcc→bcc32

743:デフォルトの名無しさん
08/05/24 18:04:50
>>741 さん

どういうことでしょうか?
もう少し詳しく教えていただけると助かります。

744:デフォルトの名無しさん
08/05/24 18:14:34
>>743
付属の「Borland C++ Builder ツール」ってヘルプファイルを読みましょう。

結論から行くとmakefileの記述ミスじゃね?BCBIDEだとmakefileいじる機会ほとんどないから予測だけど。

745:デフォルトの名無しさん
08/05/24 18:15:25
>>743
>>742を百万遍嫁

746:デフォルトの名無しさん
08/05/24 18:19:34
>>745 さん

百万遍読んだんですが、どこで設定すればよいのか分からないのです。。。
教えて教えてですみません。

747:746
08/05/24 18:22:53
すみません、解決しました。

ご迷惑お掛けしました。

748:デフォルトの名無しさん
08/05/25 19:54:47
BCB 5を使っているんですが、ブレークポイントから動きを追っていると
いきなり上の行に戻ったりおかしな挙動をすることがあります。
どっかでメモリ壊してるんじゃないかとは思うんですけど、同じような現象起きることありませんか?

ちなみにCodeGuardでは何も検出されませんでした。

749:デフォルトの名無しさん
08/05/25 20:06:38
マルチスレッド使ってるだろ。

750:デフォルトの名無しさん
08/05/25 20:59:07
意図的なマルチスレッドは使っていませんでした。


751:デフォルトの名無しさん
08/05/25 21:06:31
マルチスレッドか最適化ぐらいかな。ありえそうなのは。それ以外は経験した事無いな。

752:デフォルトの名無しさん
08/05/25 22:17:38
>>748
最適化だろ

753:デフォルトの名無しさん
08/05/25 23:10:53
効率よくデバッグするときは最適化をOFFにするのがセオリー。
そうしないと、変数のレジスタ割当てやループの最適化や重複コードの最適化
などの影響であっちこっちに飛ばされるよ。

754:デフォルトの名無しさん
08/05/26 00:30:40
コピーしたフォルダがあるとか

755:デフォルトの名無しさん
08/05/26 06:46:27
ってか、デバッグするときは、
プロジェクト-オプション-コンパイラの
デバッグ(F)を押した設定にする。
これ常識あるね。


756:デフォルトの名無しさん
08/05/26 11:31:17
bmpを読み込んでTJPEGImageに変換してTJPEGImageのCompressionQualityを設定して
Timageに表示したいのですがいまいちうまくいきません。
CompressionQualityはファイル書き出し時に有効みたいなことが書いてたので
jpg->Assign( bmp );
jpg->CompressionQuality = 10;
TMemoryStream *ms = new TMemoryStream( );
jpg->SaveToStream( ms );
jpg->LoadFromStream( ms );
Image->Picture->Bitmap->Assign( jpg );
としてみたのですが、↑で実行時にエラーになります。
SaveToFileでファイルに書いてそれをLoadする分には正常に処理されるのですが
ファイルを作らずにやるにはどうしたらいいですか?

757:デフォルトの名無しさん
08/05/26 12:11:48
StreamはPositionを意識しないといけない。SaveToStream後のPositionを見てみるといい。
LoadFromStreamはその位置からデータを読もうとする。

758:デフォルトの名無しさん
08/05/26 13:38:07
>>757
あなたは神ですか?
まさにその通りでした!!
それでちゃんと読めるようになりましたありがとうございます!
し、しかし・・・
CompressionQualityってSaveToFileにのみ反映されるんですね・・・
SaveToStreamでは効果がなかった・・・

759:デフォルトの名無しさん
08/05/26 13:41:14
あ、違った(;´Д`)
SaveToStreamがうまくいってなかったからコードをアレしてたんだった
SaveToStreamでもちゃんとCompressionQuality処理されてましたー

760:デフォルトの名無しさん
08/05/26 13:54:09
つーかVCLのLoadFromFile/SaveToFileってメソッド内でTFileStream作成して〜Stream呼ぶだけだかんねぇ

761:デフォルトの名無しさん
08/05/26 20:42:01
しかしVCとは違って各種ビルドオプションが切り替えられないのが面倒。
6使ってた頃にはリリースビルド専用のmakefile作ってた。

762:デフォルトの名無しさん
08/05/27 05:00:24
>>761
意味不明
切り替えられるじゃん

763:デフォルトの名無しさん
08/05/27 06:24:46
>>761 はDelphi6と勘違いしているのじゃねえの


764:デフォルトの名無しさん
08/05/27 08:03:49
ひょっとして[デバッグ][リリース]ボタンでオプション設定する機能を
構成切り替え機能だと思ってるの?

765:デフォルトの名無しさん
08/05/27 18:35:11
で、みんなどのバージョンを頭に置いて書き込んでるの?

766:デフォルトの名無しさん
08/05/27 18:46:36
6Pro

767:デフォルトの名無しさん
08/05/27 19:20:35
>>766
あれ? >>761はわざわざ「6使ってた頃には〜makefile作ってた。」って書いてあるんだから、
対象は6以外ってことで、2006以降の話なんじゃないのか?



768:デフォルトの名無しさん
08/05/27 19:36:34
はぁぁ?

769:デフォルトの名無しさん
08/05/27 19:55:19
>>761
今はどうしてるんだ?
今は6使ってないんだろ?


770:デフォルトの名無しさん
08/05/27 20:06:44
今は5使ってます

771:748
08/05/27 21:22:14
う〜ん、最適化でそういう動きするのか。
でもデバッグを押して再構築してもまだそういう動きをしました。

テンプレートを多用してあまりにサイズが大きくなったので
#pragma option push
#pragma option -vi-

#pragma option pop
でインラインを止めてみたんだけど、これが問題なのかなぁ。

772:デフォルトの名無しさん
08/05/28 00:09:41
ていうかテンプレートそのものが原因だろw

773:デフォルトの名無しさん
08/05/29 10:28:29
ODBCを経由せずにアクセスデータベース(mdbファイル)とやり取りする方法を教えてください

774:デフォルトの名無しさん
08/05/29 10:33:32
つ Win32API

775:デフォルトの名無しさん
08/05/29 10:41:29
関数名は?

776:デフォルトの名無しさん
08/05/29 14:02:25
それくらい自分で探したら。
大ヒントもらったんだから。

777:デフォルトの名無しさん
08/05/29 14:10:49
知らないならレスしないで下さい。ウザイだけです。

778:デフォルトの名無しさん
08/05/29 14:32:06
知らない場合はレスしないよ。
知ってるけど自助努力の余地を残してあげてるだけ。

ここで努力して見せれば次は回答あげたりするわけだけど、
いきなりキレたりしたら、馬鹿にして見捨てるわけ。
今回は見事にキレたから、馬鹿にして見捨てた次第です。ばーかw

779:デフォルトの名無しさん
08/05/29 14:53:16
見事に知らない奴がするレスの手本だ

780:デフォルトの名無しさん
08/05/29 15:49:44
と言いつつ、本当に「知らない奴」かどうかは一度も確認したこと無いよね。
初めて見た時からずっと「これは知らない奴がするレスの手本なんだ!」ということにしてきただけw

781:デフォルトの名無しさん
08/05/29 19:34:09
コピペにマジレス(ry


782:デフォルトの名無しさん
08/06/02 19:25:16
URLリンク(delfusa.blog65.fc2.com)
のやり方でTMemoを継承して、SetWindowLongで追加できないES_CENTERを持つメモコンポーネントを作成したいのですが、
CreateParamsで設定したスタイルが反映されません。どこに問題があるのでしょうか?

class TMemoEx : public TMemo {
 protected: void __fastcall CreateParams(TCreateParams& param);
 public: __fastcall TMemoEx(TMemo* original);
};
--------↑ヘッダ--------↓ソースファイル---------------
__fastcall TForm1::TForm1(...) : TForm(...) {
 Memo1 = new TMemoEx(Memo1);
}

void __fastcall TMemoEx::CreateParams(TCreateParams& param) {
 param.Style = param.Style | ES_CENTER | ES_NUMBER;
 TMemo::CreateParams(param);
}

__fastcall TMemoEx::TMemoEx(TMemo* original) : TMemo(original->Owner) {
 Parent = original->Parent;
 TMemoryStream* ms = new TMemoryStream();
 try {
  ms->WriteComponent(original);
  delete original;
  ms->Position = 0;
  ms->ReadComponent(this);
 } __finally {
  delete ms;
 }
 SendMessage(Handle, ES_SETRECT, ....);
}


783:デフォルトの名無しさん
08/06/02 19:42:36
param.Style = param.Style | ES_CENTER | ES_NUMBER;
TMemo::CreateParams(param);

↑逆


784:デフォルトの名無しさん
08/06/02 20:22:05
>>783
行けました。感謝です。

785:デフォルトの名無しさん
08/06/04 14:35:52
いま、簡単に書けば

void __fastcall TForm1::FormCreate(TObject *Sender)
{
loadInifile(Sender);
}

void __fastcall TForm1::loadInifile(TObject *Sender)
{
Panel1->Show();
Panel2->Show();
}

のように、FormCreateでIniファイルを読み、
その結果でフォームのスクロールバーを表示したり、ステータスバーを消したりしています。
ここの処理をできる限り速くしたいと思います。

C++ Builderの場合、タイミング的にはloadIniFileが完了してからフォームが表示されるのでしょうか?

786:デフォルトの名無しさん
08/06/04 15:02:24
CreateよっかコンストラクタかShowでやったほうがいいんじゃね?

787:デフォルトの名無しさん
08/06/04 15:13:55
てかBCBではOnCreate使わずにコンストラクタでやれってヘルプに書いてあるね

788:785
08/06/04 15:35:34
>>786>>787 すみません、そのヘルプの場所を教えていただけないでしょうか?

789:デフォルトの名無しさん
08/06/04 15:40:50
>>788
TCustomForm::OnCreate
> 注意 フォームのコンストラクタとのやり取りが不良になる可能性があるので,
> C++Builder で OnCreate イベントを使うことはお勧めできません
> (OldCreateOrder を参照)。かわりに,フォームコンストラクタをオーバーライドすることをお勧めします。

790:785
08/06/04 15:49:03
>>789 ひぃ〜!ありがとうございます!

早速先のloadIniFileをコンストラクタに移動してみました。
が、動作をみると、まだフォーム表示後にフォームのサイズが変更されたりしてるようです。。

理想でいえば、ウィンドウのサイズや位置や、各コントロールのプロパティに値が設定された後、
フォームを表示したいのですが、どうすればいいのでしょうか。。?


791:デフォルトの名無しさん
08/06/04 15:53:41
TForm1::Visibleの初期値をfalseにして、コンストラクタの最後でtrueにすればいいんじゃね?

792:デフォルトの名無しさん
08/06/04 15:54:28
loadInifileでやってるPanel1->Show();の意味がわからんのだが

793:デフォルトの名無しさん
08/06/04 15:55:57
つーかフォーム操作はコンストラクタでやっとけばフォーム表示時には変わってるとおもうんだがー
他のコントロールならまだ作成されてない可能性はあるとおもうが

794:785
08/06/04 16:13:12
>>791 新規プロジェクトでForm1のVisibleを見るとfalseでした。
フォームのVisibleはフォームの表示には関係ないのではと思ったり。。

795:785
08/06/04 16:15:12
>>792 すみません、適当に書いたのであんまり意味はないです。。
>>793 なんか処理をコンストラクタに移したらうまくいったようなないような。。

フォームにActiveXのコンポーネントが乗ってるので、
そちらのちらつきが目立つようになってしまいました。。

796:デフォルトの名無しさん
08/06/04 17:11:29
C++Builder5 ProでMDBファイルから直接レコードを読んだりしたいのですがどうやったらできますか?

797:デフォルトの名無しさん
08/06/04 22:05:33
>MDBファイルから直接
なにゆえ直接読む必要があるのだろうか・・・


798:デフォルトの名無しさん
08/06/04 23:10:05
ODBC

799:デフォルトの名無しさん
08/06/05 10:54:37
ODBCを経由したくないからに決まってるだろぼけが

800:デフォルトの名無しさん
08/06/05 13:16:32
普通にファイルオープンして読み書きすりゃいいじゃん

801:デフォルトの名無しさん
08/06/05 13:26:53
馬鹿はレスするなよ

802:デフォルトの名無しさん
08/06/05 15:13:53
くだすれ行けよ

803:デフォルトの名無しさん
08/06/05 15:20:14
お前らの馬鹿なレスに期待してんだよクズ

804:デフォルトの名無しさん
08/06/06 10:12:27
>>796
マジレスすると、BCB6なら、プロジェクトに「タイプライブラリの取り込み」ってあるはずだから、
それでADOの対象DLLを取り込んで、COM経由で読めたような気がする。
確か、BCB5でもOKだったような。

それが無ければ、#import文でも取り込めた気がする。
この辺の作法はVC++と同じはず。

805:デフォルトの名無しさん
08/06/06 15:51:24
直接レコードを読むってのは、ADO接続するってことなのか?


806:デフォルトの名無しさん
08/06/06 16:14:00
むしろDAOで

807:デフォルトの名無しさん
08/06/06 20:35:06
つまんないことですけど、 std::sortで比較関数を書く場合、

bool sortNameAsc(const FI& left, const FI& right) { return left.Name < right.Name; }
bool sortNameDesc(const FI& left, const FI& right) { return left.Name > right.Name; }



std::sort( vec.begin(), vec.end(), sortNameAsc ); // 名前昇順
std::sort( vec.begin(), vec.end(), sortNameDesc ); // 名前降順

と、

std::sort( vec.begin(), vec.end(), sortNameAsc ); // 名前昇順
std::sort( vec.begin(), vec.end(), -1 * sortNameAsc ); // 名前降順

は同じことですよね。。?自分に自信がなくて。。

808:デフォルトの名無しさん
08/06/06 21:09:10
ちがわい
boolではtrueは1、falseは0に変換される

809:デフォルトの名無しさん
08/06/06 21:16:25
ってことは、

std::sort( vec.begin(), vec.end(), sortNameAsc ); // 名前昇順
std::sort( vec.begin(), vec.end(), ! sortNameAsc ); // 名前降順

ですか?><

810:デフォルトの名無しさん
08/06/06 23:53:10
>>809
それコンパイル通る?
通ればそれでいいんだけど

811:デフォルトの名無しさん
08/06/06 23:58:18
あれなんかageになってたごめん

812: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

5051日前に更新/190 KB
担当:undef