トップページ⇒tech
990コメント312KB

C++Builder相談室 Part19

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2008/08/01(金) 16:30:32
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
※2008/07よりCodeGear(Borland IDE/DB部門)はBorlandからEmbarcaderoに移動しました

【前スレ】
C++Builder相談室 Part18
http://pc11.2ch.net/test/read.cgi/tech/1188607282/

過去スレ・関連サイトは>>2-7あたり。

※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part5
http://pc11.2ch.net/test/read.cgi/tech/1135127048/
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.13
http://pc11.2ch.net/test/read.cgi/tech/1175861395/
※CodeGear(Borland/Embarcadero)関連はこちら
【CodeGear】Embarcaderoオッチャ その10
http://pc11.2ch.net/test/read.cgi/tech/1216250111/

<関連スレ>
くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/
[Tips]Borland C++Builder ちょいテク No.01
http://pc11.2ch.net/test/read.cgi/tech/1154580209/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
0910デフォルトの名無しさん2009/09/17(木) 17:39:29
>>909
プロジェクトの設定の、どこを修正すればいいでしょうか?
プロジェクトオプションの、ディレクトリ条件で、
EXEフォルダを指し示すようにしてみたのですが、うまくいきませんでした。
0911デフォルトの名無しさん2009/09/17(木) 17:46:51
>>910
試していないけど、"APP名.exe.local" というダミーファイルを、EXEのフォルダに置いてみたらどうだろう?
0912デフォルトの名無しさん2009/09/17(木) 17:47:33
>>909
早く教えて
知ったかぶり?w
0913デフォルトの名無しさん2009/09/17(木) 20:04:32
ふつうに考えれば、Pathを追ってるだけじゃね?
0914デフォルトの名無しさん2009/09/17(木) 21:46:36
DLL検索順のレジストリは確認したのか?
0915デフォルトの名無しさん2009/09/18(金) 09:43:55
きえろぶっとばされんうちにな
0916デフォルトの名無しさん2009/09/18(金) 16:54:57
TChartのTChartShapeで質問ですが
これの位置大きさはX0,X1,Y0Y1に軸値を入れて設定しますが
これをリボンのポイントみたいにピクセルで3x3みたいに指定する方法を教えて下さい。
0917デフォルトの名無しさん2009/09/18(金) 17:30:49
なんでBCBとかDelphiの初心者ユーザはバカが多いんだ。。。
質問のレベルがVBユーザー並みだな
0918デフォルトの名無しさん2009/09/18(金) 18:16:34
>916
Use pixels or Axis co-ordinates to set the X, Y bounds of the Shape.

The position ( Left, Top ) of a Shape can be specified as axis values, while the size of the Shape (Width and Height) could be specified in screen pixels:

Series1.XYStyle := xysAxisOrigin;
Series1.X0 := EncodeDate( 1998, 1,1 ); <-- in BottomAxis scales
Series1.Y0 := 1234.56; <--- in LeftAxis scales
Series1.X1:=100 ; <-- 100 pixels Width
Series1.Y1:=30 ; <--- 30 pixels Height
0919デフォルトの名無しさん2009/09/18(金) 19:24:46
>>917
知らないならレスしない方がいいよ
0920デフォルトの名無しさん2009/09/18(金) 23:19:38
ていうかレスしない方がいいよ、経過報告も無いしね
0921デフォルトの名無しさん2009/09/22(火) 09:10:24
>889
少し直してSeries1の値も表示させてみた
void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
StatusBar1->Panels->Items[0]->Text=Chart1->Axes->Bottom->CalcPosPoint(X);
StatusBar1->Panels->Items[1]->Text=Chart1->Axes->Left->CalcPosPoint(Y);
if(Series1->XValues->Count!=0){
int iCount=0;
while(iCount!=Series1->XValues->Count){
if(Chart1->Axes->Bottom->CalcPosPoint(X)<=Series1->XValues->Items[iCount]) break;
iCount++;
}
StatusBar1->Panels->Items[2]->Text=Series1->XValues->Items[iCount];
StatusBar1->Panels->Items[3]->Text=Series1->YValues->Items[iCount];
}
}
0922デフォルトの名無しさん2009/09/24(木) 07:54:46
AnsiStringでファイル名を入れてファイルサイズを取得する関数はありますか?
有りそうなんだけど無いのかなあ?
APIでやらなきゃだめかなあ?
0923デフォルトの名無しさん2009/09/24(木) 11:12:46
>>918
できましたありがとうございます

ちなみに、30,30の位置に10,10で○を書かせると○の左上が30,30になるのですが
これを○の中心にするにはどうしたらいいのでしょうか?
0924デフォルトの名無しさん2009/09/24(木) 11:17:27
25,25にすればいいんじゃね
その程度の計算ができないわけじゃあるまい
0925デフォルトの名無しさん2009/09/24(木) 11:38:59
>>924
まずX軸値と座標値は違う点を考慮して頂きたい
計算だけなら下ので軸値は求まります。
int xx = tChartShape->CalcXPosValue( dXVal );
int yy = tChartShape->CalcYPosValue( dYVal );
tChartShape->X0 = tChartShape->XScreenToValue( xx - tChartShape->X1 / 2 );
tChartShape->Y0 = tChartShape->YScreenToValue( yy - tChartShape->Y1 / 2 );

座標をずらして表示位置を修正することは可能ですが
それをやるとスケール変更した場合(アップとか)場合におもいっきりずれた位置になります
スケール変更時に毎回計算し直して位置修正をせずにできるような方法が無いと不便なので
指定位置がシェイプの中心になるようなプロパティーありませんか?
必死にヘルプを見ているのですがみつからなくて・・・
0926デフォルトの名無しさん2009/09/25(金) 00:08:03
Each shape has two co-ordinates associated with it, top left and bottom right of the invisible rectangle that encloses the shape.
X0, Y0 , X1, Y1は必須なので924が正解じゃないかな
http://www.steema.com/のForumにでも 質問してみてはいかがでしょうか
0927デフォルトの名無しさん2009/09/25(金) 00:22:39
>922
TSearchRecでFindFirst 関数
0928デフォルトの名無しさん2009/09/25(金) 00:35:47
FindCloseを忘れずに。
0929デフォルトの名無しさん2009/09/25(金) 16:00:00
ひとつ巨大なソースがあり、こいつをincludeすると
F1008メモリ不足というコンパイルエラーになります
回避方法をお教え下さい
0930デフォルトの名無しさん2009/09/25(金) 20:58:41
そりゃ分割することでしょ。QCの40875、71343、71665がInternal Erroe F1008だね。
0931本田2009/09/26(土) 17:51:27
Object Windows Library
Inprise/Borland
http://cc.codegear.com/partners/bcb5/exclusive/object_windows_library/index.html
This release of the Object Windows Library is based on the OWL 5.4
release and is denoted as OWL 5.5.
It has been ported to Borland C++Builder 5 by Yura Bidus, author of OWLNExt.
It includes source code and debug and release libraries of, OWL, BIDS and OCF.
0932本田2009/09/27(日) 12:37:46
>>931
~ OWLNext project home ~
http://owlnext.sourceforge.net/
~ Setting up C++ Builder 2010 to work with OWLNext ~
http://owlnext.sourceforge.net/setupbds2010.html
0933デフォルトの名無しさん2009/09/27(日) 15:59:31
質問です。
C++Builder3で作成されたアプリケーションが
「・・・のアドレス何々でアドレス・・・に対する読み込み違反がおきました」
と表示されます。
このアプリは別のアプリケーションからのソケット通信で受信したときに発生しているようです。
客先に納入したアプリでこのようなエラーが突然発生したとの連絡があったようなのですが、
自分も含めて先輩も、このメッセージ表示だけでは分からないと匙を投げてます。
なんとかこの異常が発生しないようにしたいのですが、通信の受信後もいろんな
関数を呼び出しており、どこで発生しているか特定できません。
アドレス・・・というので、デバッグできるものでしょうか?
詳しい方、デバッグの方法を教えていただけたら嬉しいです。
よろしくお願いします。
0934デフォルトの名無しさん2009/09/27(日) 16:57:10
>933
つ ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/browse.cgi?index=68566
0935デフォルトの名無しさん2009/09/29(火) 01:08:34
質問です
TCheckListBoxを仮想モードにすると
チェックBOXをクリックしてもチェックがONになりません
このままでは使い物にならないんですが、何か回避方法ありますか?
0936デフォルトの名無しさん2009/09/29(火) 01:38:42
OnClickCheckイベントかなんかで自分でCheckedを反転する必要があるような希ガス。
0937デフォルトの名無しさん2009/09/29(火) 01:51:15
へえ
0938デフォルトの名無しさん2009/09/29(火) 11:18:42
MDI子フォームのタイトルバーを消す方法を教えて
0939デフォルトの名無しさん2009/09/29(火) 12:41:40
>>933
俺はC++Builderを使ってないが、それはWindowsの汎用エラーだろ
セグメンテーション違反でぐぐれ
そのメッセージだけじゃどうしようもないし、そういうときのためのtry〜catch〜finallyだろ
メモリアドレスからのデバッグもできるだろうけど、まずソースを洗ったり、エラーを再現した方が早いだろ

先輩もどうしたらいいかわからんとは、レベルの低い会社なんだな
俺が勤めてた超零細企業じゃとてもやっていけないぞ
0940デフォルトの名無しさん2009/09/29(火) 14:19:30
>>939
C++Builderを使ってないならレスしないで下さい。ウザいだけです。
0941デフォルトの名無しさん2009/09/29(火) 14:28:56

き え ろ ぶ っ と ば さ れ ん う ち に な
0942デフォルトの名無しさん2009/09/29(火) 18:46:23
TStringGridでInvalidateRowを使おうとしたらアクセスできないってほざかれるんだけど
これ使うにはどうしたらいいですか
0943デフォルトの名無しさん2009/09/29(火) 18:51:13
ようするにTStringGridで指定セルや行にInvalidateをしたいんですよ
普通にInvalidateすると全セルやっちゃうのでグリッドがチラつくから
指定した一部だけやりたいですが、他にいい方法あったらおしえてくらだい
09449392009/09/29(火) 18:54:08
>>940-941
フィッシングでしたか
食いついてすいませんでした
しかし、あなたのフィッシングの腕前は太公望に遠く及ばないようですね
0945デフォルトの名無しさん2009/09/30(水) 10:34:19
MDIフォームで子フォームがMDIフォームからはみでても
MDIフォームのスクロールバーを出さないようにするにはどうしたらいいですか?
HorzScrollBarとかのVisibleをfalseにしても出てしまいます
0946デフォルトの名無しさん2009/09/30(水) 12:02:41
MDI親フォームのClientHandleがMDIクライアント領域のウィンドウハンドルなので、こいつのスタイルから
GetWindowLong/SetWindowLongでスクロールバーを外せばいいのではなかろうか。
0947デフォルトの名無しさん2009/10/01(木) 10:49:07
>>942
TCustomGrid(StringGrid1).InvalidateRow
0948デフォルトの名無しさん2009/10/01(木) 11:06:09
>>947
それでもまだ抽象クラスなんちゃらってエラーでちゃいますぅ
0949デフォルトの名無しさん2009/10/01(木) 11:07:37
TCustomGrid *cg = dynamic_cast<TCustomGrid *>(StringGrid);
cg->InvalidateRow( 0 );
とかやってみたけどやっぱりアクセスできないってエラーがでます
0950デフォルトの名無しさん2009/10/01(木) 11:23:32
TStringGrid1.Invalidate()
0951デフォルトの名無しさん2009/10/01(木) 11:32:09
わかる人いませんか?
0952デフォルトの名無しさん2009/10/01(木) 11:50:06
だからそんなメソッドねえって
0953デフォルトの名無しさん2009/10/01(木) 12:19:23
>>949
InvalidateRowはpublic関数じゃないのでクラス外からのアクセスは不可。

TStringGridを継承する新しいクラスを作成する。
//---------------------------------------------------------------------------
class THogeGrid : public TStringGrid
{
public:
   __fastcall THogeGrid(TComponent* Owner):TStringGrid(Owner){};
   void __fastcall InvalidateRow(int ARow){TStringGrid::InvalidateRow(ARow);};
};
//---------------------------------------------------------------------------
ただコンポーネントとして追加しない場合、コンポーネントの作成はユーザが行う必要があるのと
オブジェクトインスペクタが使えないので、プロパティ設定は初期化コードの中で行う。

これで、THogeGrid::InvalidateRowを外部から操作できる。
0954デフォルトの名無しさん2009/10/01(木) 12:33:58
単純な派生なら、コンポ登録しないでも派生元置いて、そのオブジェクトインスペクタ設定を反映させる方法もある。
0955デフォルトの名無しさん2009/10/01(木) 13:42:27
ああ、Delphiのスレじゃなかったのね。C++じゃ947は無理なのか。
0956デフォルトの名無しさん2009/10/01(木) 13:43:36
DelphiでもC++Builderでも基本同じ
それよりバージョン示せ
Delphi2010ではInvalidateRowが無いぞ
0957デフォルトの名無しさん2009/10/01(木) 13:56:34
>>953-956
C++Builder5 pro

とりあえずやりたい事は指定セル(行)のみの再描画なんですよこれが
普通にInvalidateだとセル全部にいっちゃうもんでチラつくんですよ
APIとかでもいいのないですかね?
0958デフォルトの名無しさん2009/10/01(木) 18:06:02
>>957
OwnerDrawにして、DrawCell関数でコントロールしたら
うまくいかないかなあ?
DefaultDrawingまでやめると大変だけど。
0959デフォルトの名無しさん2009/10/01(木) 18:20:30
>>958
DrawCellsイベントでセルに色つけたりしてるんですが
指定セルのDrawCellsイベントを呼びたいんですよね
0960デフォルトの名無しさん2009/10/01(木) 18:22:34
TChartのChartShapeで設計時はTextに値を入れてFontの色で
正常に表示されているのですが
ChartShapeを動的に作成してTextとFont->Colorを指定しても
フォントの色が黒になってしまいます。(Textの値は正常です)
これ実行時にはどうやってTextの色を指定したらいいですか?
0961デフォルトの名無しさん2009/10/01(木) 18:48:13
DrawCellsイベントって何だ?
DrawCellならそもそもセル指定だしな
0962デフォルトの名無しさん2009/10/01(木) 20:49:13
>959
最終的にはWin32APIのInvalidateRectを呼び出すことになるんだが、
そのために必要な座標計算はTCustomGridのInvalidateRowの内部で
やっていることをコンポーネントの外側で処理しなきゃいけないので面倒。
TCustomGrid.InvalidateRow -> TCustomGrid.InvalidateRect ->
TCustomGrid.GridRectToScreenRectという流れ。でもこの中で一番
スコープが外側なのはTCustomGrid.InvalidateRow(protected)なので、
TStringGridの派生クラスを作る、という>953が正解かも。Delphiなら
別解ありなんだが。
0963デフォルトの名無しさん2009/10/01(木) 20:58:12
つかInvalidateでチラつくんなら自分で原因作ってんだろ
09649582009/10/01(木) 21:06:22
ちょっと待て、Invalidateなんかするから全部再描画するんじゃない?
元々、更新したCellだけ再描画されるばずだよ。
0965デフォルトの名無しさん2009/10/02(金) 09:02:51
>960 問題なく赤から�高ノ変わったけど
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(MyShapeSeries) delete MyShapeSeries;
MyShapeSeries=new TChartShape(Chart1);
MyShapeSeries->ParentChart=Chart1;
MyShapeSeries->HorizAxis=aBottomAxis;
MyShapeSeries->VertAxis=aBothVertAxis;
MyShapeSeries->Font->Color=clRed;
MyShapeSeries->Text->Add("Color");
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(MyShapeSeries) MyShapeSeries->Font->Color=clGreen;
}
0966デフォルトの名無しさん2009/10/02(金) 09:59:00
>>965
同じ事やっても変わらないからおかしいとおもって
色をclRedにしてみたら変わりました。
今まではclWhiteを指定したら白にならずに黒になってたもので・・・
何でこれ白はダメなんだろう・・・
ブラシとかぶったらダメなのかなあ
Transparent=trueにしてるからバックは関係ないかなっておもってるんだけど
とにかくありがとう
0967デフォルトの名無しさん2009/10/02(金) 10:06:20
うーん、Brushの色やスタイルを設計時と同じのにしてもやっぱ白だけはダメだあ
っておもってたらやっぱ設計時も白は表示されてませんでした・・・
これclWhiteはダメだけどclWindowとかなら白になってるなあ
なにこれバグですか?
0968デフォルトの名無しさん2009/10/02(金) 11:30:02
>966,965
MyShapeSeries->SeriesColor=clAqua; //clWhite以外を指定
これで白も表示されるはず。
0969デフォルトの名無しさん2009/10/02(金) 11:43:46
>>968
SeriesColorにclWhite以外を指定してFont->Color=clWhiteにしても黒になっちゃいました
まだ設計時でしかためしてませんが。
色々ありがとうございます
0970デフォルトの名無しさん2009/10/02(金) 11:49:17
すんません、更に質問ですが
TChartShapeに変数を追加したくて下記のようなクラスを作って
TChartShapeExを動的に作成してみたんですが・・・
class TChartShapeEx : TChartShape
{
public:
 int Index; // コントロールインデックス(0〜n)
 int Mode; // 操作モード*/
};

TChartShapeのプロパティーやメソッドにアクセスしようとしたら
アクセスできないってコンパイルエラーが出ます・・
かなりお馬鹿な質問ですが、こういう場合はどうやって記述したらいいですか?
0971デフォルトの名無しさん2009/10/02(金) 21:12:04
>>970
class TChartShapeEx : TChartShape
   ↓
class TChartShapeEx : public TChartShape

にしてみたら?
0972デフォルトの名無しさん2009/10/05(月) 10:11:55
>>971
あ、そっか・・・・
public 抜けてたんだ・・・
ありがとう・・・・
0973デフォルトの名無しさん2009/10/05(月) 12:02:31
TChartShapeを円にして指定位置に表示させたのですが
TChartShapeの左上が原点になってしまいます。
これをTChartShapeの円の中心を原点にするにはどうしたらいいですか?
0974デフォルトの名無しさん2009/10/05(月) 16:52:23
TChartのCursorプロパティーで質問ですが
設計時にCursorを変更しておくと実行しても指定したカーソルになっているのですが
プログラム中でたとえば何かボタンを押した時に
Chart1->Cursor = crCross;
とすると変わってくれません。
どうしたら変わってくれるんでしょうか?
0975デフォルトの名無しさん2009/10/05(月) 18:44:52
>>974は解決しましたがその他に質問ですが

TChartで折れ線グラフを書いているのですが
その折れ線グラフのX軸値からY軸値を求める方法(メソッド)を教えて下さい・・・
0976デフォルトの名無しさん2009/10/05(月) 19:41:31
宿題スレかよ
0977デフォルトの名無しさん2009/10/06(火) 18:48:56
>>973を教えてください><
0978デフォルトの名無しさん2009/10/06(火) 22:24:51
位置の指定が左上なんだからサイズの半分を引いた位置に表示すればいいんじゃね?
0979デフォルトの名無しさん2009/10/06(火) 23:43:40
>>978
拡大や戻した時はどうするんですか?
Zoomとかのイベントで再計算ですか?
それはあまりにも悲しすぎて泣けてきました
0980デフォルトの名無しさん2009/10/07(水) 00:11:41
位置は値でもpixelでも指定できるんだから問題ないと思うが?でなければそもそもTChartShapeを
使うのが不適切な希ガス。何をしたいの?
0981デフォルトの名無しさん2009/10/07(水) 10:00:39
例えば軸値(ピクセルではない)X値30、Y値30に円を書きたいですが
円の左上を基点としてるから30,30に書かれない
グラフは全て軸値を元に作成しているからシェイプだけピクセルで位置をずらして書くのは不合理
だからプロパティーで基点をシェイプの中心にするものがあるのかとおもって聞いてみたんですが
0982デフォルトの名無しさん2009/10/07(水) 10:33:37
そういう時はそれ用のTPointSeriesを用意するのが普通じゃないかなぁ。
0983デフォルトの名無しさん2009/10/07(水) 10:54:49
あ、なるほど
シェイプじゃなくてポイントを使った方がいいですか
ちょっとそっちで試してみます
0984デフォルトの名無しさん2009/10/07(水) 18:42:58
表示しているTLineSeriesの色を変えるにはどうしたらいいですか?
TFastLineSeriesならSeriesColorで変更できますがTLineSeriesは変わりません
一旦消してサイドAddしあければダメでしょうか?
0985デフォルトの名無しさん2009/10/07(水) 22:30:56
変わるよ?
procedure TForm1.FormShow(Sender: TObject);
var
I,X,Y: Integer;
begin
for I := 0 to 99 do
begin
X := I;
Y := I;
Chart1.SeriesList.Items[0].AddXY(X,y)
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Chart1.SeriesList.Items[0].Color := clBlue;
end;

Chart1にはTLineSeriesを1つ追加した状態で。
0986デフォルトの名無しさん2009/10/07(水) 22:40:51
あ、ごめん。Delphiで書いちゃったけどわかるよね。
0987デフォルトの名無しさん2009/10/07(水) 23:32:22
>>985-986
あ、デルファイでも大丈夫です
すみません、明日試してみます。
ありがとうございます
0988デフォルトの名無しさん2009/10/08(木) 10:17:11
変化していないファイルの再コンパイルを避けるにはどうすれば良いんですか?
*.hを毎回読み込んでコンパイルしているみたいです。
ヘッダには関数の実体を書かずlibに関数の実体入れたら減らせるのはわかりますが。
調べたところ次の2点があると、プリコンパイル出来ないみたいです。
プリコンパイルではなくても、obj生成しておいて、それを使ってくれたら良いんですが。


ヘッダー内の関数にインラインでないものが含まれいる。  ヘッダー内にグローバル変数定義が含まれいる。
0989デフォルトの名無しさん2009/10/08(木) 10:43:12
>>985-986
シリーズリストからのアクセスだと動的に山ほどシリーズを追加しているので
リストの何番目かってのがいまいちわからないので直接作成した
LineSeriesでアクセスしたかったのですが、設計時にSeriesColorを変更すると
色が変わったので色々いじくってみたらどうやら
SeriesColorを変更する直前にColorEachPointをfalseにしてやると変わるみたいでした
予めColorEachPointにfalseを入れててもダメで色を変更する直前に
ColorEachPointを見てみてもfalseになってたので、何故か直前でfalseにしないとダメみたいでしたが・・・
0990デフォルトの名無しさん2009/10/08(木) 11:05:43
5だとpas使ってると毎回再構築になったなぁ
レス数が950を超えています。1000を超えると書き込みができなくなります。