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

C++Builder相談室 Part4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-4あたり。
0052デフォルトの名無しさんNGNG
CBuilder5でSSL通信するコンポーネントってありますか?

APIベースで作るのがあたりまえなのかな?

すいませんがよろしくおながいします。
0053デフォルトの名無しさんNGNG
>>52
Indy
0054デフォルトの名無しさんNGNG
https でいいのなら WinInet.
0055デフォルトの名無しさんNGNG
口が悪いやつには教えたくないんだな
0056デフォルトの名無しさんNGNG
つーことで、borland の news に投稿。
0057デフォルトの名無しさんNGNG
タスクトレイに常駐し(Windowは不可視)waveファイル等を
演奏するソフトを作成しました。
で、この自作ソフトに他のexeから何か信号を送って
ファイルの演奏や中止を操作したいのですが、
どうすればよいでしょうか?
タスクトレイのアイコンのハンドルをどうにか取得して
SendMessageやPostMessageあたりでどうにかなりそうなのかな?
というところまではたどり着いたのですが、そこから先がお手上げ状態です。
この考えは正しいでしょうか?
現在は、以下のようなソースになっているのでメッセージマップに
WM_PLAYとかWM_STOPとかを作って、それに対応した処理を書けば
良いのかな?と思っています。何かヒントだけでもお願いします。m(_ _)m

//ヘッダーファイルの一部
public:// ユーザー宣言
  void __fastcall TrayEvent(TMessage& Msg);
  BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_USER+1, TMessage, TrayEvent);
  END_MESSAGE_MAP(TForm)

//.cppファイルの一部
void __fastcall TFormMain::TrayEvent(TMessage& Msg)
{
  switch(Msg.LParam){
    case WM_RBUTTONDOWN:
    POINT P;
    GetCursorPos(&P);
    SetForegroundWindow(Handle);
    PopMenuIcon->Popup(P.x, P.y);
    break;
  }
}
0058デフォルトの名無しさんNGNG
正しいです。
005957NGNG
>>58
うぉーー!!!
ありがとう、これでまたやる気になってきたぞと。

たぶん、FindWindow(EX)関数を使うんですよね?
とりあえず、ガンガッテみます!!!
0060 NGNG
今時Builder5なんだけど、イメージコントロール等を使って
二枚の画像を重ね合わせて表示させることって可能ですかいのう?
0061デフォルトの名無しさんNGNG
可能です。
0062 NGNG
>61
ありがとう。やってみるにょ。
0063デフォルトの名無しさんNGNG
>>61の回答でいいんだったら、質問する前に試せよ・・・。
0064 NGNG
ど素人だったのか・・・・?
0065デフォルトの名無しさんNGNG
TTreeView で、 item が選択されるとの文字の背景が青くなり選択状態に
なりますが、フォーム内の他のコントロール(例えば TListView)に
フォーカスを合わすとその青い背景が見えなくなり、
どの item が選択されているのか分からなくなってしまいます。
SelectedIndex でイメージを変えるのも手ですが、
Explorer のように背景を灰色とかにできるのがベストなのですが、
どういった方法がありますか?
0066ヒントだけやるNGNG
ヘルプでTreeViewをひけば10番め以内にある
0067ほんとだNGNG
すみません。見逃してました…
0068デフォルトの名無しさんNGNG
ヒントというよりほとんど答えだな
0069デフォルトの名無しさんNGNG
しかし、StringGridなどはどうしてこんな変なスクロールバーなのだろうか・・・。
あえて特殊にする必要ないような気が。
0070デフォルトの名無しさんNGNG
BCB6で起動時に開くプロジェクトの設定はできないのでしょうか?
0071デフォルトの名無しさんNGNG
ショートカットを編集すれば?
0072デフォルトの名無しさんNGNG
昔はコマンドラインからプロジェクトファイルをビルドできたんだけど、
今のやつって無理なの?xml→makefile変換が面倒なんだけど。
0073デフォルトの名無しさんNGNG
>>71
最後に開いたプロジェクトをまた開いて欲しいな、と思ってるのでそれでは。
普通の統合環境ならこれくらいできるのだけどなぁ・・・。
0074デフォルトの名無しさんNGNG
[ツール]-[環境オプション]-[設定]-[自動保存の設定]-[プロジェクト デスクトップ]
0075デフォルトの名無しさんNGNG
>>73
最後に開いたプロジェクトが開いて欲しくない人もいる。ってことだけでしょ。
0076デフォルトの名無しさんNGNG
>>74
うまくいきました。ありがとうございます。

>>75
意味不明だよ。それくらい選択できるのが普通だってこと。
0077デフォルトの名無しさんNGNG
まぁ、Borlandの開発環境のUIがいまいちなのは伝統だからな。。。
0078デフォルトの名無しさんNGNG
>>77
VCよりはマシだと思われ。
0079デフォルトの名無しさんNGNG
罵りあいは止めよう。
罵倒レスは無視。
0080デフォルトの名無しさんNGNG
失礼します。
クリックした位置にグラフィックを表示したいんですが、
なんのコントロールを使ったらいいのでしょう?

要はクライアント領域を作成すればいいのでしょうが
TMemoやTRichEditでは蔵違いだと思うので・・・

当方Builder6です。
どうかよろしくお願いいたします。
0081デフォルトの名無しさんNGNG
質問の意味を理解しかねます
0082デフォルトの名無しさんNGNG
>>80
なにかこう、既存のアプリで似たようなことをしている物を紹介してくれると
質問の意図に気づきやすいんだけど。
008380NGNG
>>81-82
レスありがとうございます。

例えば、オセロのように
クリックしたところに石を置くような動作を実現したいのです。
どのオブジェクトを使ってもうまくいかなくて・・・(´Д⊂

どうかよろしくお願いいたします
0084デフォルトの名無しさんNGNG
グリッドでいいのなら TGrid と OwnerDraw.
0085デフォルトの名無しさんNGNG
DrawGridがいいかもな。
008680NGNG
>>84
>>85
ありがとうございます(´ー`)ノ

さっそく使ってみましたが、これでなんとかなりそうです。
まだ分かりませんが・・・

困ったことにヘルプを見てTGridなどの使い方を調べてみましたが
載っていません・(ノД`)ノ・゚・
また、DrawGridは「Additional」の欄に見つかりましたが
TGrid, OwnerDrawは探してもありませんでした。

何から何まですみません・・・
調べようにもヘルプにないのでどうしようもありませんでした・・・
0087デフォルトの名無しさんNGNG
画像を読み込んで表示させたいときウィンドウまたは、Imageの大きさを変えたいのだが、
プロパティのWidth,Heightをいじってもうまくいかんことがある。どうしたらいいのですか?
0088債務不履行の名無しさんNGNG
>>87
stretchとか何とかいうメソッドがあったと思う。
0089デフォルトの名無しさんNGNG
>>86
漏れも探してみたがヘルプにないな・・・
分からないときは鬱になるな。どこで調べればいいんだろう??
0090Delフサギコ ◆A6VzDeLphI NGNG
          _________
   ∧,,∧   / パレットアイコソをクリックした状態でF1お
  ミ,,゚Д゚彡<  押したり、TDrawGridで
   ミ つ�I)  \ 検索したりを、どぞです。
 〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ 

そもそも、グラフィックを全部自分で描画してはどうなのでしょうか?
まさか、参考になるとは思わないですが、

Delphiでライフゲーム
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022733594&rm=100

Pascalを読むのはアレだと思いますが
TPaingBoxの使い方だけはわかるかと。

>>87
Inseder.NET DelphiプログラミングTips?? ウィンドウに画像を表示する
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1001489683&res=10&fi=no
中身簡単だから、FormResizeのStratchDrawだけ見るよろし。
C#コードもあるので、何か参考に。
0091デフォルトの名無しさんNGNG
TImageを動的に作成して、マウス位置に貼り付けるってのでも
良いのではないでしょうか?
なんとなくそっちの方が手軽な気がするんだけど、そうでもないのかな?
0092デフォルトの名無しさんNGNG
interbaseを使用しています。interbaseコンポーネントを使用してデータベースと
繋いでみたのですが、どうも日本語を認識してくれないようでエラーが出ます。
TIBDatabaseでは文字セットをSJIS_0208に設定してます。
そいつを継承したTIBTableを開こうとするとそのテーブルの中身に日本語が入って
いるため、例外が出ます。
TIBTableのどこかに文字コードを設定してやらないといかんのか?と思っていろいろ
調べましたが全然わかりません。
どなたか教えて下さい。よろしくお願いします。
009392NGNG
凡ミスだった。
interbaseの項目、よく見たらcharsetしてなかった。
スンマソン・・・。回線切って逝ってくる・・・。
0094デフォルトの名無しさんNGNG
ファイルに通し番号をつけて保存したいのですが、
 SaveToFile((SaveDialog->FileName) + i);
とすると、拡張子の後に番号がつけられてしまいます。
 [ファイル名][番号].[拡張子]
とするにはどうしたらいいでしょうか?
あと出来れば、
 000,001,002,・・・,100
といった感じに桁数に応じた0を頭に付けられるとうれしいです。
0095デルファイの名無しさんNGNG
ChangeFileExt(FileName, "")で拡張子無しのファイル名が、
ExtractFileExt(FileName)で拡張子が得られるので、
iを挟んでくっつければいいです。

上記手段は、二つの関数に別れているため、'.'の検索が二度手間で、
効率を気にするなら、自前で'.'を検索して、挿入した方がいいのでしょうが、
ファイルのセーブというより重い処理のついでなので、気にすることはないでしょ。
009694NGNG
>>95
即レス感謝です。おかげでできました。
ありがとうございます。
0097デフォルトの名無しさんNGNG
BCB5Proを使ってるんですが、
BDEをインストールさせずにADOを叩くことはできないんでしょうか?
0098Delフサギコ ◆A6VzDeLphI NGNG
 ミ,,゚Д゚彡 ここみると、ADOExpressはBCB5はEnt版だけです
http://www.borland.co.jp/cppbuilder/cb5/cb5feaben/cb5fb15.html
http://www.borland.co.jp/cppbuilder/cb5/cb5feature/cb5feature_comp.html

BCB6ならProでも出来るようでつよ。
http://www.borland.co.jp/cppbuilder/cb6/features.html
0099デフォルトの名無しさんNGNG
>>97

con = CreateOleObject("ADODB.Connection");
rset = CreateOleObject("ADODB.Recordset");

とかで逝ける・・・という妄想をしてみましたが
実際どうなんでしょうか?>識者の方々
0100デフォルトの名無しさんNGNG
VCとBCBを区別するプリプロセッサ定義はないですか?
0101デフォルトの名無しさんNGNG
定義済みマクロ
0102デフォルトの名無しさんNGNG
>>100
VCは持ってないので知らんが、BCBなら __BORLANDC__ が定義される。
0103デフォルトの名無しさんNGNG
CB5で同一ファイルの末尾を削除するにはどうしたら良いのでしょうか。
下記の方法ではサイズが元のままで減りませんでした。
APIとかを使った方が良いのでしょうか?

方法1.
fmOpenReadWriteでFileOpen→FileRead→データサイズ減→FileSeek(hdl,0,0)→FileWrite→FileClose

方法2.
fmOpenReadでFileOpen→FileRead→FileClose
→データサイズ減
fmOpenWriteでFileOpen→FileWrite→FileClose
0104デフォルトの名無しさんNGNG
>>103
chsize()
0105デフォルトの名無しさんNGNG
>>97
やった事無いけど、タイプライブラリの取り込みで
どうにかなるんじゃないの?
0106デフォルトの名無しさんNGNG
>>104
ありがとうございます。

open()のO_TRUNCとか効果ないみたいですが、なんとか出来そうですね。
落ち着いて考えると、DeleteFileなんかと組み合わせればよかったのかな
0107デフォルトの名無しさんNGNG
>>97
ADOExpressを買うという手もあります。
0108デフォルトの名無しさんNGNG
>>106
例えば次のような例になります。FILEからfileno()でhandleを取得した場合、
fflush()を併用してもfclose()で切りつめたファイルが戻ってしまい、うまく
いかなかったです。

int main()
{
FILE *fo;
int handle;

if ((fo = fopen("test.txt", "w")) == NULL) exit(1);
fputs("1234567890", fo);
fclose(fo);

if ((handle = open("test.txt", O_RDWR | O_TEXT)) == -1) exit(1);
printf("ret code = %d\n", chsize(handle, 5));
close(handle);

return 0;
}
0109デフォルトの名無しさんNGNG
カットシステム刊のC++Builder6 コンポーネント活用ガイド&実践プログラミング
をVol1、Vol2と2巻続きで買ってきた。(\4,600 + \3,000ナリ。)

いやー予想以上に誤植がひどいですね。ある程度C++Builderの事をわかって
読まないと騙されます。

今までDelphiの入門書を読破してきたが、C++Builder用の書籍とだけあって、
BCBに特化した内容がないかと期待したが、そうでもなかった。まあいいか・・・・
Delphi用の書籍を読んで頭が痛くなる人にはいいかもしれない。
0110デフォルトの名無しさんNGNG
>>109
その感想では誰も買わないと思われ
0111デフォルトの名無しさんNGNG
>>110
だって俺は出版社の回し者じゃないから、正直な感想を書きたいのでちゅ。

Delphiをマスターしている人は今更C++Builderの入門書なんか買わんだろうし、
俺自身ちょっと買って後悔しているので。

Vol.1の方ははっきし言って俺には”いらん”かったが、Vol.2の方はなかなか
面白い内容かもしれない。
0112デフォルトの名無しさんNGNG
今まで買ったVCL関連の書籍の中で一番役に立っているものは、
ASCII刊のBorland Delphi6 オフィシャルコースウェア基礎編+応用編
です。

Object PascalをC++に移植する腕もこれで鍛えられた。
0113デフォルトの名無しさんNGNG
>>111
本人が後悔してるなら仕方ないね。
0114デフォルトの名無しさんNGNG
BCB関係で良い本ってないらしいからねぇ。
2,3冊買ったけど、どれも良くもなく悪くもなく。ユーザー数少ないからかなぁ。
0115デフォルトの名無しさんNGNG
たしかに良い本は全くない。
だから、ANSI/ISO標準に対応した本を買うしかない。
評判の良い本だと言うのを買ってもダメダメなものばかり・・・。

ボーランドのユーザーが減っていくのは
初心者が使えるように解説した本がないというのが原因だと思う。
友人が買ってしまって教えるのに苦労しています。


解説サイトでもあればいいんだけど、ちょうどいいのがない。
一人で作るのも大変と言うことで
それぞれが解説をアップするサイトでも作るのはどうでしょう。
0116デフォルトの名無しさんNGNG
暇なときにでも解説を書いて
1つのサイトにアップしていけば結構いいと思う。
分散させるとどこにあるかわからなくなるし。

0117債務不履行の名無しさんNGNG
どうしてもVC++やらVS.NETの本が多いからなぁ。

VS.NETとC++Builder,両方持ってる人います?
いたらどのように使い分けてますか?
(俺もなぜか,両方持ってるんだけど)
0118デフォルトの名無しさんNGNG
VS.NET・・・・・仕事用
C++Builer・・・・・趣味用
0119デフォルトの名無しさんNGNG
しまったC++Builderね。
0120デフォルトの名無しさんNGNG
RAD・・・・・初心者用
C++・・・・・中級クラス以上用

のような棲み分けがあるので、初心者がC++Builderに手を出すとC++で
つまずく。中級者以上がC++Builderを使うとVC.NETでいいかと思ってしまう。

ニーズが少ないんだろうね。仕事はあまりないし(Delphiの方が多い)、趣味
でちょこちょこっといじるには重すぎる。濃い内容を持っていながら、使う人
の層が限られているみたい。
0121デフォルトの名無しさんNGNG
C++Builder - ツール。クラスのプロトタイピング、テスト。
VC++ - 本体。

複数人でやる仕事は、C++Builder を使える人が少ないので、
どうしても VC++ になる。
ツールとか、組み込む前のライブラリとか、一人でやって問題ないものは
C++Builder でやる。そっちのが効率がいい。
0122デフォルトの名無しさんNGNG
カンマ編集CSVをそのままBDEで扱うにはどうしたらいいんでしょう?
普通にTQueryでSQL切ってオープンしたら、1行がカンマごと1つのフィールドになっちゃうんですが…
0123デフォルトの名無しさんNGNG
C++Builder便利なのになぁ。Borlandやる気なさそうだし仕方ないか。
0124デフォルトの名無しさんNGNG
>やる気なさそうだし
そう?

ところで CBuilder6 IDE のバグ、知っているのあったら教えて。
Update2 で直っていないやつがいいなぁ。
0125デフォルトの名無しさんNGNG
VCで作ったスタティックライブラリをリンクする事はできますか?
0126デフォルトの名無しさんNGNG
>>125
無理
0127債務不履行の名無しさんNGNG
>>124
アップデータ出てたっけ?
0128デフォルトの名無しさんNGNG
日本語版のアップデータが全然でないしね。
やっぱ、BCBは対応悪いよ。
0129デフォルトの名無しさんNGNG
ん?Update2 あてればいいじゃん。
なんでわざわざ「日本版」をまつの?
0130デフォルトの名無しさんNGNG
会社で使ってるものに余計なことは出来ないから。
オフィシャルに英語版のアップデートを当てろという話があれば別だが。
0131デフォルトの名無しさんNGNG
オフィシャルに Kylix3 Open/日本語版がでないように
オフィシャルに Delphi7 Trial/日本語版がでないように

オフィシャルに BCB6 アップデートの日本語版は出なくなったのさ。

だけど全部本国のサーバーに存在する。
いつまで笹塚に期待する気でいるんだ?あいつらは俺たちのことはもう忘れてる。
0132WPONGNG
ftp://ftp.borland.com/pub/bcppbuilder/devsupport/patches/bcpp6/BCB6_STD_Upd_3.exe

ftp://ftp.borland.com/pub/bcppbuilder/devsupport/patches/bcpp6/BCB6_PRO_Upd_3.exe

ftp://ftp.borland.com/pub/bcppbuilder/devsupport/patches/bcpp6/BCB6_ENT_Upd_3.exe

日本語版の対応が悪いはどうしようもないな。
趣味で使う分には便利だから使ってやってたけど
今度からはVSに変えることを心に決めました。

なんでなんだよ?
やる気がなくなったのか?
0133デフォルトの名無しさんNGNG
おおっ、UPDATA3だ。
>>132 サンクス

まあ、確かにあいつら最悪だな。
俺も乗り換えようかな。
0134デフォルトの名無しさんNGNG
>>なんでなんだよ?
>>やる気がなくなったのか?

ユーザーがバカばっかりだから日本に市場は無いと思ったんだろ。
0135デフォルトの名無しさんNGNG
んで、今度は何が直った?
0136デフォルトの名無しさんNGNG
とりあえず、
>>4 >>5 の方法で日本語 UI のまま動くことを確認しました。
既に .JPN ファイルを作っている人はそのまま Update3 を適用可能。

>>17 は必用なし。

コンパイラの文字列リソースが変更されている模様。
>>32 の BCC32.jpn は削除してください。改訂版は... 1日もらえる?

p.s. 今回は日本語ドキュメントが入っていませんね。方針が代わったのでしょうか。
0137デフォルトの名無しさんNGNG
おまえら日本語ごときにぐちぐちうるせーな。
そんなに嫌ならBorland商品なんか使うなよ。
0138デフォルトの名無しさんNGNG
>>137
それを英語で書けたらみんな黙って従うよ。
0139デフォルトの名無しさんNGNG
omaera Japanese gotokidegutigutiuruse-YO
sonnnani iyanara Borland syo-hin nankatukaunaYO
0140デフォルトの名無しさんNGNG
クラス名(例:Onigiriクラス)が
COnigiriの場合は、普通のクラス
IOnigiriの場合は、インターフェースクラス

みたいなプリフィックスありますが、
オリジナル(?)で

TOnigiri ・・・ テンプレートクラス。内部の型を設定して使う。
BOnigiri ・・・ 継承して使う用(Base)。ウインドウ(コールバック部分)やスレッドクラスみたいなやつ

みたいな感じで
勝手にやっていいのでしょうか?
もし、開発チーム内でこんなことされたら勘弁と思う人とか居ます?

あと、
構造体名の場合は、SOnigiriでいいのでしょうか?
何かプリフィックすあったら教えてください。
0141140NGNG
うええ
間違って、投稿しちゃいました。
C++相談室に行ってきます。

ここだと、
TOnigiri使うと怒られそう。
0142136NGNG
ねぇ。132 さんはどうやってこのファイルの存在を知ったの?
まだどこにも記事が出てないんだけど...

それに「フィールドテスター」に対するライセンス文書も入っているし。
確かに Update3 なんだけど、ちょっと怪しい...
0143Delフサギコ ◆A6VzDeLphI NGNG
不思議な情報がいっぱい
   ∧,,∧   2タンはそいう場所なんでは?
  ,ミ ゚Д゚彡 
  ミ  ∪  
0144WPONGNG
>>142
たまたま。(~・~)

ボーランドはFTPサイトがいろいろあるんだよ。

0145136NGNG
そうだね。まぁいいや。
Kylix3/Open のコンパイラのメッセージカタログが流用できそうなので、コンパイラメッセージの
日本語化は今晩か、明日にはどうにかなりそう。

コンパイラのバージョンが、5.6.2 にあがっていますね。
0146デフォルトの名無しさんNGNG
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< きりくすきりくす!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< きりくすきりくすきりくす!
 ;きりくす〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
0147デフォルトの名無しさんNGNG
俺もDelphiに乗り換えるかなぁ。vs.netは重いし。
0148デフォルトの名無しさんNGNG
Updateが出ていないことについて、ボーランドに質問したよ
おまいらもここにメール送れ

[email protected]
0149デフォルトの名無しさんNGNG
VBのLikeに相当する処理をBCBで行いたいのですが、代替となるものはあるのでしょうか?
正規表現を一から勉強して作るのは時間がかかりすぎるし……
0150デフォルトの名無しさんNGNG
>>148
もし、まんがいち、返事がきたら転載よろしゅう。
0151デフォルトの名無しさんNGNG
>>149
こんなのか(前半)
#define S1H(x) ((0x81 <= ((x) & 0xff)) && (((x) & 0xff) <= 0x9f))
#define S2H(x) ((0xe0 <= ((x) & 0xff)) && (((x) & 0xff) <= 0xef))
#define SH(x) (S1H(x) || S2H(x))
#define SL(x) ((0x40 <= ((x) & 0xff) <= 0xfc) && (((x) & 0xff) != 0x7f))
#define SP(p) (SH((p)[0]) && SL((p)[1]))
#define INC(p) ((*(p)) ? (SP(p) ? 2 : 1) : 0)

0152デフォルトの名無しさんNGNG
後半:
bool like(const char *p, const char *s) {
 for (;;) {
  switch (*p) {
  case '\0':
   if (*s == '\0') return true;
   else return false;
  case '%':
   p++;
   for (;;) {
    if (like(p, s)) return true;
    if (*s == '\0') return false;
    else s += INC(s);
   }
  default:
   if (SP(p)) {
    if (p[0] != s[0]) return false;
    if (p[1] != s[1]) return false;
   } else {
    if (*p != *s) return false;
   }
   p += INC(p);
   s += INC(s);
  }
 }
}
■ このスレッドは過去ログ倉庫に格納されています