トップページ⇒tech
988コメント332KB

C Builder相談室 Part3

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-5あたり。
0830デフォルトの名無しさんNGNG
>>829
そそ。俺も5.6だったよ。もしかして>>825は某か?
0831デフォルトの名無しさんNGNG
@ECHO OFF

SET PATH=D:\Developer\bcc55\bin\; %PATH%
ECHO 環境変数をBCC5.5.1用に変更しますた(´-`)y~
0832デフォルトの名無しさんNGNG
>>739 よんだ?
0833デフォルトの名無しさんNGNG
>>831
え?それはなぜ?
5.6の方が良いのでは・・・?
そもそも、5.5からどう変わったのか分らない・・・
0834デフォルトの名無しさんNGNG
フレームワーク使わないで
分割ウインドウするにはどうすれば?
自分で分割すんの?
0835デフォルトの名無しさんNGNG
              ☆ チン     マチクタビレタ〜
                         マチクタビレタ〜
        ☆ チン  〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) < SP1まだ〜?
             \_/⊂ ⊂_ )   \______
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
        |  愛媛みかん  |/
0836デフォルトの名無しさんNGNG
age
0837デフォルトの名無しさんNGNG
BCB6でQt使おうとしたんですが、Qt.hppで多くのインライン関数が

inline QEventType __cdecl QEvent_type(QEventH* handle)
{
return QEvent_type(handle);
}

てな実装で無限ループに陥るんですけど、どう対処すれば良いのでしょう??
0838デフォルトの名無しさんNGNG
タスクバーのボタンを右クリックしたときのメニュを
変更する方法が分かりませぬ。
元のサイズ、最小化を無くしちゃいたいのだけど、どうすればいいのでしょう?
0839デフォルトの名無しさんNGNG
BCB6の最初から入っているindyを消して
indyサイトから落としたやつを入れることはできるの?
0840デフォルトの名無しさんNGNG
>>839
できる。コンポーネントの追加/削除は自由にできる。
少々面倒臭いが。
0841デフォルトの名無しさんNGNG
スレ違いだけど、鱈セレ1.3G/768MからPen4 2.53/DDR1Gにしたらようやく
BCBのコンパイルが軽快になった。

パソコンショップの店の人に「鱈セレで重いってどんなソフトですか?」と
質問されて、BCBだと答えたら知らないようだった。
0842デフォルトの名無しさんNGNG
>>841
そんな店員マハパンチだ!
0843デフォルトの名無しさんNGNG
>>841
不要になった鱈セレきぼんぬ。
0844デフォルトの名無しさんNGNG
BCB5で StringGrid を ダブルクリックした時に
DrawCellイベントを呼びたいのですが、DrawCellイベントの下記の引数のうち
(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)

TRect &Rect, TGridDrawState State の渡し方が分かりません。

どなたか分かられる方、教えて下さい。
0845デルファイの名無しさんNGNG
DrawCell"イベント"は、描画が必要になった時に勝手に呼ばれるもので、
意図的に呼ぶようなものじゃ無いと思えるのですが、
(ダブルクリックした時だけ書き直しても、他のウィンドウが被さったら消えてしまう)
具体的に何がやりたいのか、書いていただけます?
0846デフォルトの名無しさんNGNG
Controlsプロパティについてわからないことがあります。

Controls[i]->Nameでコントロールの名前が取得できますが、Controls[i]->ClassName()
ではオブジェクトインスタンスの型を表す文字列が取得できるはずなのに、実行すると
AccessViolationとなってしまいます。

なぜだかご存じの方いらっしゃらないでしょうか?
0847デフォルトの名無しさんNGNG
846です。自己解決しました。

ClassName()はShortStringという、BCBではあまり使われない型で返して
くるのが原因でした。

AnsiStringのコンストラクタで変換してやるとうまく動きました。
0848844NGNG
>>845
レスありがとうございます。
ダブルクリックしたセルの背景色を変更したいのです。
0849844NGNG
現在の状態は、
ダブルクリックしたセルにフラグをたてています。
そのフラグをみて背景色を決めるという処理を DrawCellの中に
書いているのですが、
ダブルクリック直後は、当然、 DrawCellイベントは発生せず、
セルを移動したら、ダブルクリックしたセルの背景色が変わるという
状態です。
0850デフォルトの名無しさんNGNG
Repaint?
0851844NGNG
>>850
Repaintされないのです。
0852デフォルトの名無しさんNGNG
Repaintって自分で呼ぶものなんだけど
0853デフォルトの名無しさんNGNG
あ、Invalidateの方がいいのかな?
それかAPIのInvalidateRectかも
0854844NGNG
>>853
Repaint → ×
Invalidate → ×
でしたが、
InvalidateRect で変更されました!
ありがとうございました。
0855デフォルトの名無しさんNGNG
あれ、Repaint駄目かな?
ハンドラの中で単にRepaint()とするとForm->Repaint()になっちゃうから、
Grid->Repaint()とすれば再描画してくれる(DrawCellが呼ばれる)はずだけど。

もちろん、この場合は一部を書きかえるだけだし、
Repaint()すると場合によってはGrid全体がちらつく(と思う)ので
範囲を指定してInvalidateRectでいいとは思う。
0856844NGNG
>>855
Grid->Repaint()でOKでした。Grid-> って書いてなかったです・・・
ごめんなさい、ごめんなさい、ごめんなさい。ひどいポカですね。
丁寧なレスありがとうございました。
0857デフォルトの名無しさんNGNG
AnsiStringとi(f)streamの関係でわからなくなっています。

istream、ifstreamからAnsiStringに文字列を読みとる時は、string型と
違い、CTRL+Zが押されるまで、改行コードも含めて読みとってしまい
ます。

これを、改行までを一区切りとして読みとる方法はありますでしょうか?
0858デフォルトの名無しさんNGNG
BCB4です。
マウスカーソルをオリジナルのもの(16色程度の動かないやつ)に変更したいのですが、
用意されてるエディタだとモノクロしかありません。
どうしたら良いでしょうか? なにから手をつけていいやら、分かりません。
0859デフォルトの名無しさんNGNG
>>858
カーソルエディタを探す。
0860デフォルトの名無しさんNGNG
Turbo Debuggerでクラスのメンバ変数をWatchするにはどうしたらいいですか?
0861デフォルトの名無しさんNGNG
カーソルエディタを探してLoadCursorファイルなんちゃらを使ったらできました。
thx
0862860NGNG
無理なんでしょうか・・・
0863デフォルトの名無しさんNGNG
>>860
Turbo Debugger関連の話ならここ行った方がいいと思う。
http://pc3.2ch.net/test/read.cgi/tech/1030493157/
0864860NGNG
>863
誘導thxです
0865デフォルトの名無しさんNGNG
>>864
もう移動したかもしれんが、例えば class Aのメンバ変数 i を見たければ
インスタンスを A a; で生成したとすれば
add watch で a.i[enter] と入力すればよい。
privateとか関係ないから。
0866デフォルトの名無しさんNGNG
濃淡画像(グレイスケール)のBMPファイルの画素(8ビット)を
取り出すにはどうすればいいでしょうか?
0867デフォルトの名無しさんNGNG
BITMAPのフォーマット調べれば?
ネットにもMSDNにもどこにでも転がってる。
0868866NGNG
>>867
すみません。。。見つけれなかったです。。。
0869デフォルトの名無しさんNGNG
>>866
TBitmap->Canvas->Pixels[int X][int Y]
0870デフォルトの名無しさんNGNG
TListView
で
ReadOnlyをfalseにして
クリックするとアイテムの文字列編集できるようになりますが
もっとレスポンス素早く(StringGridみたいに)やりたいのですが、
文字列編集モードに素早くするメソッドとかありますか?(EnterやF2ですぐにできるようにしたい)
あと、
サブアイテムも編集したいのですが無理ですかね?

0871デフォルトの名無しさんNGNG
ListBoxに表示されているデータを右クリックで選択して、
ポップアップメニューだしたいんですが、
どのようにしたらいいのでしょうか。
0872デフォルトの名無しさんNGNG
ヘルプでTListBoxのプロパティを見ると、
0873デフォルトの名無しさんNGNG
すんませんが、教えてください。
C++Builder5 Pro/Win2000です。
HELPを見るときに、プロパティやメソッドが別ウインドで表示されますが、そのウインドのサイズと表示位置を変更
しても、記憶してくれずにデフォルトに戻ってしまいます。なのでとても使いにくいです。
表示位置とサイズを記憶させる方法はありませんか。
直接プログラミングの質問ではなくてすいませんが、よろしくおながいします。
0874デフォルトの名無しさんNGNG
C++ Builder6って「.NET」とやらに対応してますか?
だったら買おうと思うんですが・・・

Builderってなんか評判悪いんで怖いんですよね・・・
0875デフォルトの名無しさんNGNG
対応してないよ

> 評判悪いんで

Σ(゚Д゚ )y-~~ マジか
0876デフォルトの名無しさんNGNG
>>875
>対応してないよ

Σ(゚Д゚ )y-~~ マジか
0877866NGNG
>>869
最初から出せよな。
サンキュ
0878デフォルトの名無しさんNGNG
>>875
じゃあもうBuilderは買う価値がないということでしょうか?
Delphiは対応してましたよね、確か。
0879デフォルトの名無しさんNGNG
そりゃ.NETやりたい人には、
今のBCBは価値ないのでは。
0880デフォルトの名無しさんNGNG
Delphiも7でやっと.NETに対応します。
Delphi7が出たらBCB7も出るのでは。
0881デフォルトの名無しさんNGNG
.NETよりも素で最新のDirectXがコンパイルできるようにして欲しい。
0882関係者NGNG
BCB7は.netに対応しません。
0883デフォルトの名無しさんNGNG
>>882
関係者信用ならん。盆明けにSP2出るとか言っといて出なかったし。
0884デフォルトの名無しさんNGNG
     /|  
   ヽ('A`)ノ (VS持ってるから、俺も>>881に同意しとこう・・・ 
     ( )    〜bor.dll配るのなんかイヤだし。)
    / ̄くく ̄ ./|
  /   ´´ / .|
  | ̄ ̄~~ ̄|´ |
  |    .  | ./
  | .     |/
   ̄ ̄ ̄ ̄
0885デフォルトの名無しさんNGNG
BCB6SP2出ないから英語版SP2入れたら
メニューの一部が英語になった
0886873NGNG
>>873だす
やっぱ誰も分からないってーことですか。
みなさん使いにくくありませんかぁ
0887デフォルトの名無しさんNGNG
>>886
BCB6にする。
0888デフォルトの名無しさんNGNG
確かに不便かもなあ、と思いつつ今見てみたら
いつのまにか位置と大きさ記憶されるようになってた。プロパティ一覧とかの別ウィンドウも。

BCBだけじゃなくてあの形式のヘルプ全部のようなので、Windows自体にそういう機能がついたのだろか。
最近入れたのはWin2KSP3とIE6とVS.NETだけど、そのどれかのおかげかも。
0889デフォルトの名無しさんNGNG
>>886
ぜんぜん使いにくくない。
つか、慣れた。
0890873NGNG
ちょっと調べてみますた。
winhlp32.exeのバージョンは、5.00.2195.3649  タイムスタンプは2002/07/13 04:13 です。
XP Proでもやってみたのですが、現象はWin2000環境と全く同じで、ウインド状態を保存してくれませんでした。
また自分の環境は、win2000SP3でOSは最新状態です。IE6.0 VS.NETも入っています。
なので、winhlp32.exeのバージョンアップで改良された訳では無いみたいです。
とりあえず、ウインドーの位置とサイズを定期的にチェックして変更するプログラムをつくりました。
なんか違うなぁとは思うのですが、とりあえず便利です。
どこかのレジストリに書き込めばいいのかなという気はしますが・・・
0891デフォルトの名無しさんNGNG
俺のほうがちょっと新しいな

2002/07/22 12:05
バージョン5.0.2195.4751
0892デフォルトの名無しさんNGNG
で、位置と大きさが.GIDファイルに書き込んであった。

(´-`).oO(最近、>>888の他になにか入れたっけな・・・)
0893デフォルトの名無しさんNGNG
ソケット通信なんですが、
Java側で

 ObjectOutputStream oout = new ObjectOutputStream(socket.getOutputStream());
 PrintWriter out = new PrintWriter(new OutputStreamWriter(oout, "SJIS"));
 out.println("hogehoge");
 out.flush();

と送って来て、それを受信しているんですが、
文字化けしてしまいます。

unicode変換とかが必要なんでしょうか?
0894デフォルトの名無しさんNGNG
TADOQuery->SQL->Textに3000ByteほどのSQL句を代入したら、
AccessViolationでたんですが、
文字数の制限とかありましたっけ???

ちなみにC++Builder5です
0895virtualNGNG
>>893
なぜObjectOutputStreamをつかってるののだ?
ObjectOutputStreamはヘッダをつける(Javaのオブジェクトをシリアライズするためのもなんで)からばけてるのでは?

OutputStream out = socket.getOutputStream();
PrintWriter writer = new PrinterWriter( new OutputStreamWriter( out, "SJIS" ) );
writer.println( "hogehoge" );
writer.flush();
ではだめ?
Unicode -> SJISへの変換は OutputStreamWriter( out, "SJIS" ) でなされていると思われ.
0896デフォルトの名無しさんNGNG
C++Builder5 ProのTQoeryで質問
指定した日時のデータを取得するためにをSQLに
select * from FastData where Dt=#09/30/2002#
って書くとキーワードの使用が無効ってエラーがでます、
select * from FastData where Dt = cast( '"2002/07/07"' as DATE)
ってやったらCASTはつかえませんってエラーがでます

どうやったら日時でデータをゲットできるのでしょうか?
0897デフォルトの名無しさんNGNG
>>896
TQueryね、失礼
0898デフォルトの名無しさんNGNG
>>896
DBの名前とバージョンを書いたら親切な人が
教えてくれるかもしれないよ。
0899デフォルトの名無しさんNGNG
『インターネットプログラミングプログラミング入門 C++Builder』
って本のソースをVisual C++ 6.0でコンパイルしたいんですが、
C++BuilderのプログラムをVisual C++に移行するって可能でしょうか?
0900デフォルトの名無しさんNGNG
>>899
その本の中身は知らないけど、あなたのスキル次第。
コンパイルは、ソースそのままでは絶対通らないでしょう。
コピペで楽しようと思ってるならあきらめた方がいい。

よく見ると「プログラミング」が二重になってるね。
0901899NGNG
色々やって見たのですが前半の方はリソースとか自作してソース書き換えて
何とかコンパイル通るんですが、中盤移行はかなりきついです。。
vcl.h とかVC++にあるとありがたいんですが・・。
もう少しやってみて駄目っぽかったらあきらめようと思います。

>よく見ると「プログラミング」が二重になってるね。
書き換えた時重複したようです・・(お恥ずかしい。。
0902デフォルトの名無しさんNGNG
著しく場違いなこと(もしくは既出)かも知れないが、
内蔵のタコみたいなコードエディタは外部エディタに変更出来ないのですか?
BCB5、BCB6
0903デフォルトの名無しさんNGNG
無料掲示板http://gooo.jp
0904デフォルトの名無しさんNGNG
>>902
ツールでテキストエディタを登録してなんとかやりくりして下ちぃ。
0905デフォルトの名無しさんNGNG
>>902
具体的にどうすれば良いのでしょう…?
0906デフォルトの名無しさんNGNG
TBitmapでグレイスケールのビットマップを扱うにはどのようにすればいいでしょか?
パレットのいじり方がよくわからなくて困ってます。
0907デフォルトの名無しさんNGNG
http://www.google.co.jp/search?sourceid=navclient&hl=ja&q=PixelFormat+%83O%83%8C%81%5B%83X%83P%81%5B%83%8B
0908デフォルトの名無しさんNGNG
>905
Borlandのページにはこう書いてあるけど、これはこれで使いにくい。
http://www.borland.co.jp/tips/cbuilder/cb009/onept_1.html#idx_3
0909デフォルトの名無しさんNGNG
名前にショートカットを付ければ((&A)とかする)少しはマシになる。
まぁ、使いにくいことには変わらないんだけど。
BCBのエディタは使いにくいは、定説ですなー。
0910デフォルトの名無しさんNGNG
ぜんぜん気にならん。慣れろ。
不器用な連中が多いな。
0911Delフサギコ ◆A6VzDeLphI NGNG
              _____________
  ,,,,,,,,,,,,,,,,∧,,∧   /$EDNAMEの前に$SAVEを付けたら
〜′,,,,,,,,,,ミ,,゚Д゚彡 < もっと便利
  UU"""" U U    \_____________
0912デフォルトの名無しさんNGNG
BCBでTCanvasの拡張をしたいのですが、できません。
例えば、
void Line(int x1,int,y1,int x2,int y2)
というメソッド{座標(x1,y1)へ座標(x2,y2)へ線を引く}を作るときは
どうすればいいのでしょうか?
0913デフォルトの名無しさんNGNG
>>912
MoveTo(x1,y1);
LineTo(x2,y2);

っていうことを聞いてるんじゃないんだろうなぁ・・・。
0914912NGNG
>>913
レスありがとうございます。それは、一例です。MoveTo LineToを一つにした
、新しいメンバ関数(Line)を作って、TCanvasを拡張したいっていう場合どうす
ればいいんでしょうか?っていう質問です。

普通なら
PaintBox1->Canvas->Move(X1,Y1)
PaintBox1->Canvas->LineTo(X2,Y2)

のところを
PaintBox1->Canvas->Line(X1,Y1,X2,Y2)
ってなかんじですね。やりたいことは別にあるんですけど、ここさえ解かれば問題
ないです。
0915デフォルトの名無しさんNGNG
>>914
それをやりたいなら PaintBox1をTPaintBox1から継承しなおして書き直すか
VCLソースを変更するしかないでしょう。

Line(PaintBox1->Canvas , X1,Y1,X2,Y2)  で我慢したら?
0916デルファイの名無しさんNGNG
どうしてもメソッド形式で呼び出したいのであれば、
C++のマジックとして、TCanvasから派生させたTMyCanvasを作り、
そこでnon-virtual関数だけ定義して、無理矢理キャストして使う荒技も…

激しく非推奨です。本当にやっちゃダメ(w
0917912NGNG
>>915
そ・・そうなんですよねぇ
Line(PaintBox1->Canvas , X1,Y1,X2,Y2)
ならできるんですけど、かっこ悪いから、嫌だったんですが・・・・。
てっきり簡単にできるもんだと思ってました。皆さんこれで、我慢してる
ようですね。親切なレスありがとうございます!

>>916
しょ・・・正直いって、ずぶの素人の俺にはなにをいってるかわかりません。も・・・もうしわけない。
0918デフォルトの名無しさんNGNG
BCBにはAssertみたいな関数はないのでしょうか?
0919デフォルトの名無しさんNGNG
Assertはないけどassertはあると思うよ。ヘルプで検索してみたら?
0920999NGNG
>>916
>>917
単に新しい関数をつくって呼べばいいだけなのでは?

void NewLine(int x1,int y1,int x2,int y2){
PaintBox1->Canvas->Move(x1,y1)
PaintBox1->Canvas->LineTo(x2,y2)
}

PaintBox1->Canvas->Line(x1,y1,x2,y2)
って呼びたいところを
NewLine(x1,y1,x2,y2);

これじゃあダメ?
0921912NGNG
>>920
今回は、私のクラスのお勉強なので・・・・
PaintBox2やPaintBox3になったら、引数として、あたえなくちゃいけなくなるので、
それは、ちとかっこ悪いかなぁ・・・と思いまして。できれば、別のアプローチで。
0922デフォルトの名無しさんNGNG
TCanvasを継承して 何も追加せずVMTが付かないようvirtualでないメソッドだけを追加して、無理やりキャストすれば

(TMyCanvas *)(PaintBox1->Canvas)->Line(x1,y1,x2,y2)
とは書けるけど、これはもっと格好悪いだろ?

JavaScriptなら後からメソッドも追加出来るけどねえ
0923912NGNG
つ・・つまり、Cはメソッドの追加はできないんですか?
TCanvasクラスが定義されている、ソースファイルを見つけて、Lineを追加するしかない
ということでしょうか?
この機能って絶対にあったほうがいいと思うのに・・・どうしてできないんだろう??
0924Delフサギコ ◆A6VzDeLphI NGNG
     ∧,,∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ミ,, ゚Д゚彡     <  PaintBoxがTCanvas使っているからでは
     〃つ_つ/  ̄ ̄ ̄/\_____________
   〜ミ,,, ,,|\ ./ レ ッ シ /
       '\/.======./
           ̄ ̄ ̄
クラスライブラリがそういう目的を考慮して作られてれば
いいんだけど、VCLはそうはなってないってことです。

それに、なんでも、継承で機能追加という
思想だと、階層が深くなりすぎてわけわかになるから
TCanvasの処理くらいは関数レベルで対応するほうがいいですよ。
0925デフォルトの名無しさんNGNG
こういうのはだめなの?
class MyTCanvas : public TCanvas {
 void MyLine(x1,y1,x2,y2){
  MoveTo(x1,y1);
  LineTo(x2,y2);
 }
}
0926912NGNG
>>925
それは、実際に使うときは
PaintBox1->Canvas->MyTCanvas->MyLine(10,10,20,20)
でやるんですか?それなら私的には全然OKですけど、うまくいきません・・・・。
0927デフォルトの名無しさんNGNG
>>925 >>922
0928デフォルトの名無しさんNGNG
実際に使う時は
MyTCanvas *)(PaintBox1->Canvas)->MyLine(10,10,20,20)

ただし、こんなクセ付けたらいけないよ
0929デルファイの名無しさんNGNG
ども、916です。
後で思いついたのですが、奇麗に書きたければ、
*.hppだけ書き換えてインライン関数を追加する程度なら問題ないような。

…他人とソースコードの互換性は無くなりますが。
(そういう意味ではまだTMyCanvasの方がマシ。どちらも実際にはやらない方がいいけど)
レス数が900を超えています。1000を超えると表示できなくなるよ。