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

C++Builder相談室 Part13

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん05/02/15 20:58:38
C++Builderに関する質問・回答や議論等を行う相談室スレッド。

過去スレ・関連サイトは>>2-6あたり。
0474デフォルトの名無しさん2005/04/15(金) 14:01:00
>>473
どう突っ込みたいのか書かないとわからん。
数字として入れたいならAnsiString::sprintf()とか
0475デフォルトの名無しさん2005/04/15(金) 14:58:00
うるせー
0476デフォルトの名無しさん2005/04/15(金) 17:41:54
AnsiStringに注意



文字列を扱うのにAnsiStringはとても便利ですが、気が付いた点を2つ。

(1)hoge[0]の扱い
C言語では

char hoge[] = "Nakajima";

と宣言したとき、hoge[1] には 'a' が入っています。
つまり0から始まっています。
しかし、

AnsiString hoge = "Nakajima";

と宣言したとき、hoge[1] には 'N' が入っています。
これはPascalと同じように1から始まっているのです。 Pascalで書かれたVCLを使っているからだ と思いますが、
C++Builderなんだからねぇ・・・
Cを使っていた人は注意して下さい。
0477デフォルトの名無しさん2005/04/15(金) 20:09:59
>>476
ObjectPascalの文字列型互換だからしょうがない
0478デフォルトの名無しさん2005/04/16(土) 00:01:16
ひょっとしてM$にもGKっているのか? w
0479デフォルトの名無しさん2005/04/16(土) 03:37:07
ゴールキーパー?
0480デフォルトの名無しさん2005/04/16(土) 11:06:19
AnsiStringはhoge[1]ってアクセスできるのか?
いまBCBが手元にないので確かめられないのだが、
AnsiString hoge[5];
hoge[1]="Nakajima";
とした場合は、hoge[1][1]にNが入るってこと?
0481デフォルトの名無しさん2005/04/16(土) 12:38:18
>>480
その場合は
hoge[0][1]にNがはいるんじゃ
0482デフォルトの名無しさん2005/04/16(土) 13:12:09
>>481
何故?なにゆえ?
0483デフォルトの名無しさん2005/04/16(土) 14:25:42
480が正しい。
ただし正確には
 hoge[1][1]は
 hoge[1].operator[](1)と等価で戻値はchar&
0484デフォルトの名無しさん2005/04/16(土) 17:36:37
void __fastcall TForm1::FormCreate(TObject *Sender)
{

AnsiString hoge[5];
hoge[1]="ABC";

Caption = hoge[1][1];//A
Application->Title = hoge[1][3];//C

}
0485デフォルトの名無しさん2005/04/16(土) 18:15:23
How can I disable Ctrl + Alt + Del or Alt + Tab?
http://thunder.prohosting.com/~cbdn/k008.htm
http://thunder.prohosting.com/~cbdn/html.htm
Applies To: C++Builder 1 or higher
Category: Knowledge Base

1.
Start a new project using File | New Application.

2.
Edit the OnShow event:

void __fastcall TForm1::FormShow(TObject *Sender)
{
int result;
SystemParametersInfo(SPI_SCREENSAVERRUNNING, true, &result,
0);
}

3.
Edit the OnClose event:

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction
&Action)
{
int result;
SystemParametersInfo(SPI_SCREENSAVERRUNNING, false, &result,
0);
}

As you already know, when a screen saver is running, the special Windows keys are disabled in order to prevent security problems. You can trick Windows into thinking that a screen saver is running.
0486デフォルトの名無しさん2005/04/16(土) 21:12:39
 
0487デフォルトの名無しさん2005/04/16(土) 22:32:48
http://pc8.2ch.net/test/read.cgi/tech/1108468718/404-

Alpha が透過度になります(1.0 で100%コピー、0.5 で50%コピー)。
http://members3.jcom.home.ne.jp/jellyjam/pages/Del/graph.html

void AlphaDraw(int X,int Y, //{描画先座標}
Graphics::TBitmap *Bmp1,
Graphics::TBitmap *Bmp2, //{ビットマップ}
float Alpha, //{透過度}
TColor TransParentColor) //{背景色(完全透過します)}
{

int i, j, k, v, z;
TRect Rect1, Rect2, Rect3;
//Pnt1, Pnt2 : PRGBArray;
Byte *Pnt1, *Pnt2; // scanlines
float Alp;

Bmp1->PixelFormat = pf24bit;
Bmp2->PixelFormat = pf24bit;

//半透明コピー開始

//コピー領域をキャッチ
Rect1 = Rect(0, 0, Bmp2->Width, Bmp2->Height);
OffsetRect(Rect1, X, Y);
0488デフォルトの名無しさん2005/04/17(日) 12:45:21
TServiceを使ったサービスアプリケーションからShellExecute()などで他のプロセスを
たちあげたいのですが、うまくいきません。TServiceは、ハンドルをもってないからなんでしょうか?
0489デフォルトの名無しさん2005/04/17(日) 12:52:20
意味不明
0490デフォルトの名無しさん2005/04/18(月) 02:42:36
TServiceApplication
0491デフォルトの名無しさん2005/04/18(月) 02:44:03
サービスアプリケーションウィザード
Windows NTのサービスを実装するアプリケーションを開発するために、
サー ビスアプリケーションを作成するウィザードが提供されます。
サービスアプリケ ーションのために、
TServiceApplicationクラスとTServiceクラスが用意され ており、
サービスの名前や種類、動作はオブジェクトインスペクタによって
定 義できます。
0492デフォルトの名無しさん2005/04/18(月) 12:05:37
TPanelのPopupMenuプロパティーにPopupMenu1を割り当ててんだけど
これって左クリでポップアップする方法教えれ。オブジェクトインスペクタの設定でな
パネルのクリイベで自分で呼び出すってのはイラン
0493デフォルトの名無しさん2005/04/18(月) 12:40:16
>>492
そんな方法はない
0494デフォルトの名無しさん2005/04/18(月) 13:23:31
>>492
お前がBCB使うの止めればいいよw
0495デフォルトの名無しさん2005/04/18(月) 18:52:48
なんだおまえらしらねーのかよ、つかえねーやつらだなおまえらって
0496デフォルトの名無しさん2005/04/18(月) 19:07:25
マウスの設定でボタンの左右を入れ替えたら完璧にできるお。
0497デフォルトの名無しさん2005/04/18(月) 19:54:19
BCB5ですが、リンクが5回に一回は失敗しフリーズしてしまいます。
何か対処方法はありますでしょうか。
0498デフォルトの名無しさん2005/04/18(月) 22:10:56
 
0499デフォルトの名無しさん2005/04/18(月) 23:30:59
 
0500デフォルトの名無しさん2005/04/19(火) 03:35:33
 
0501デフォルトの名無しさん2005/04/19(火) 09:15:25
>>495
知ってるがお前の態度が(ry
0502デフォルトの名無しさん2005/04/19(火) 13:52:59
ShareやnyのファイルリストみたいにListViewで
マウスボタンを押した状態でカーソルを移動させ
て範囲内の項目を全て選択状態にするにはどう
やったらできますか?BCB6Proです。
0503デフォルトの名無しさん2005/04/19(火) 14:47:23
MultiSelect じゃなくて?
0504デフォルトの名無しさん2005/04/19(火) 14:59:49
>>503
CtrlやSiftを押しながらではなくてマウスボタンを押しながら
カーソルを移動させるだけで破線の四角い枠が表示されて
範囲内の項目全てが選択状態になりますよね?
あれを実現したいのです。
0505デフォルトの名無しさん2005/04/19(火) 15:25:14
RowSelect
0506デフォルトの名無しさん2005/04/19(火) 19:41:57
VC6で作ったMFCのアプリケーションをBCB6でコンパイルするとafxres.hを開くことが出来ないと怒られます。
カーソル位置のファイルを開くで開いてみると、ちゃんとBCBがインストールされているディレクトリにあるみたいで、
インクルードのパスもMCFのディレクトリに通ってるみたいです。
何故エラーが出るのでしょうか。
FAQみたいな質問で申し訳ないです。
0507デフォルトの名無しさん2005/04/19(火) 19:44:42
上記で書き忘れたのですが、VC++プロジェクト変換ユーティリティで変換してMFC互換モードでコンパイルtしました。
宜しくお願いします。
0508本田2005/04/19(火) 23:51:14
>>507
そんなことよくあるんだけど、
私、BCB5PROを使ってるんだけど、
プロジェクトファイルをメイクファイルに変換して、
試行錯誤してメイクファイルを修正している。
0509デフォルトの名無しさん2005/04/20(水) 01:45:50
64ビットWindows対応のプログラムは作れるのでしょうか?
0510& ◆FC4h7F/wV6 2005/04/20(水) 02:34:19
>>506
#include "afxres.h"
を
#include <afxres.h>
にするとか。
0511本田2005/04/20(水) 02:35:52
510は私です。
>>509
BCB6では無理。
0512デフォルトの名無しさん2005/04/20(水) 03:11:52
>>509
Delphi2006またはDelphi2007をお待ちください。
05135042005/04/20(水) 04:25:51
>>505
亀レスですがお騒がせしました
0514デフォルトの名無しさん2005/04/20(水) 16:33:44
C++Builder 6.0で開発してます。
TTreeViewのスクロールバーって消えないのでしょうか?

ShowScrollBarでやってみても一時的には消えるがやっぱり駄目
サイズ変更の微妙なサイズ変更(横スクロールバーが出る瞬間)
とかするとまた出てきてしまいます。

SetWindowLongでむりやりスタイル変更
ULONG lStyle = ::GetWindowLong( TreeView1->Handle, GWL_STYLE);
lStyle ^= WS_VSCROLL;
::SetWindowLong( TreeView1->Handle , GWL_STYLE, lStyle);
とかしても、駄目っぽいです。
どなたか御存じないでしょうか?


0515デフォルトの名無しさん2005/04/20(水) 19:15:55
>>508
そうなのですか・・・

>>510
それも試してみたのですが、やっぱり駄目でした。

アドバイスありがとうございました。
色々試してみます。
0516デフォルトの名無しさん2005/04/20(水) 21:56:51
コーディング規約

public 宣言と private 宣言

グローバル
g
gstrUserName

モジュールレベル
m
mblnCalcInProgress

プロシージャ内
なし
dblVelocity
0517デフォルトの名無しさん2005/04/21(木) 12:37:23
すみません、質問です。
Borland C++Builderのチュートリアルをやっていてつまってしまいました…

2:フォーム上の ActionManager1 を選択し,オブジェクトインスペクタで
Images プロパティに ImageList1 を設定します。

とあるのですが、ImageList1と言うものがプルダウンに表示されません
入力しても駄目です…

これは、環境の設定とかが悪いのでしょうか?

Borland C++Builder Professional Version6.0[Build10.166] を使用しています。

どなたか教えて下さい
宜しくお願いします。
0518デフォルトの名無しさん2005/04/21(木) 12:49:33
>>517
フォーム上にTImageListコンポーネント置いてあるか?
05195172005/04/21(木) 13:00:36
>>518
やってしまいました・・・置いてませんでした_| ̄|○

申し訳ありませんうまく行きました有り難うございます。
これからも精進致します…
0520デフォルトの名無しさん2005/04/21(木) 13:42:05
TMemoコンポーネントに13Mのテキストファイルを
LoadFromFileしたいのですが160000行もあり、読
み込みに20秒ぐらい掛かってしまいます。
ListViewのようにMemoもOwnerDataのような事が
可能でしょうか?また、できるならどのようにすれ
ば実現できますか?
0521デフォルトの名無しさん2005/04/21(木) 13:48:51
ん〜
0522デフォルトの名無しさん2005/04/21(木) 15:53:43
>>497
パソコンを買い換える。
0523デフォルトの名無しさん2005/04/21(木) 18:26:21
TForm3のコンストラクタに引数を追加して
__fastcall TForm3::TForm3(const int iFlg, TComponent* Owner) : TForm(Owner)
↓これで↑を呼ぶ場合にどうすればいいんでしょうか?
Application->CreateForm(__classid(TForm3), &Form3);
これで、
0524デフォルトの名無しさん2005/04/21(木) 22:04:52
ヘッダファイルの外側の「class 何々{〜};」の外側でexternを付けて(付けなくてもいい場合も ある)変数を宣言すると、プロジェクト内のどこからでも使うことができる
グローバルな変数になります。

プライベート変数ではなく、他のフォームからも使ってもらいたい変数は、同じくヘッダファイルの 中の「public:」のもとで宣言し
パブリック変数になります。

フォームに対応したユニット内のすべてのモジュール(関数)から使用できる 変数を、
『プライベート変数』と呼びます。

モジュール(関数)の中で宣言された変数は
『ローカル変数』 と呼ばれます。
0525デフォルトの名無しさん2005/04/21(木) 22:28:19
>>523
無理。普通にnewを使えばいい。
0526デフォルトの名無しさん2005/04/22(金) 01:25:54
>>514
スタイルにTVS_NOSCROLLを加える。
既にスクロールバーを持ってるやつを、SetWindowLongで変更する場合は、
変更後にShowScrollBarを呼ばないと消えない模様。
0527デフォルトの名無しさん2005/04/22(金) 10:39:13
 
0528デフォルトの名無しさん2005/04/22(金) 17:26:15
質問させていただきます。
C++Buirder5で開発中なのですが、
VBでいうMid関数と同じ役割とする関数ってC++Buirderにもありますか?
もしあるのであれば、教えてくださいm(_ _)m
0529デフォルトの名無しさん2005/04/22(金) 17:57:31
AnsiStringならSubStringメソッドかな?
0530デフォルトの名無しさん2005/04/22(金) 19:00:15
>>528
ヘルプ位見たんだろうな?
0531デフォルトの名無しさん2005/04/22(金) 19:23:19
いちいちヘルプ見れとかウザイ
0532デフォルトの名無しさん2005/04/22(金) 20:45:59
>>528

二回繰り返してるってことは素で間違えてるのか?

×Buirder
○Builder
0533デフォルトの名無しさん2005/04/23(土) 04:51:22
void __fastcall TForm1::FormCreate(TObject *Sender)
{

/*

Unit1.h
#include <StrUtils.hpp>

*/

//Unit1.cpp
AnsiString A = "XYZ";
AnsiString B = "わおん";

Caption = MidStr(A,3,1); //Z
Application->Title = MidStr(B,5,2); //ん

}

0534デフォルトの名無しさん2005/04/23(土) 04:53:14
ByteType メソッドは,AnsiString 内の指定された位置にあるバイトの種類を 示します。

enum TStringMbcsByteType { mbSingleByte, mbLeadByte, mbTrailByte };
TStringMbcsByteType __fastcall ByteType(int index) const;

説明

ByteType メソッドは,AnsiString 内の index(0 が最初)で示されたバイトの 位置にあるバイトの種類を示します。戻り値は以下のとおりです。

定数 意味

mbSingleByte 1 バイト文字
mbLeadByte マルチバイト文字の最初のバイト
mbTrailByte マルチバイト文字の最後のバイト

西洋諸国など一部のロケールではマルチバイト文字を使用しません。その場 合,ByteType は常に mbSingleByte を返します。
0535デフォルトの名無しさん2005/04/23(土) 05:34:56
void __fastcall TForm1::FormCreate(TObject *Sender)
{

/*

Unit1.h
#include <StrUtils.hpp>

*/

//Unit1.cpp
AnsiString A = "XYZ";
AnsiString B = "わおん";

Caption = MidStr(A,3,1); //Z

int intStart,intCount;
intStart = 3;
intCount = 1;

Application->Title = MidStr(B, (intStart * 2) - 1, intCount *2); //ん

//Application->Title = MidStr(B,5,2); //ん


}
//-------------------------------
0536デフォルトの名無しさん2005/04/23(土) 05:44:57
MidStr
MidStr
MidStr
MidStr
MidStr
MibStr
MidStr
MidStr
MidStr
MidStr
MidStr
MidStr
0537デフォルトの名無しさん2005/04/23(土) 07:38:51
LeftStr,RightStr,MidStrのいずれも、マルチバイト文字を
0538デフォルトの名無しさん2005/04/23(土) 09:59:18

void __fastcall TForm1::FormCreate(TObject *Sender)
{
/*

Unit1.h
#include <StrUtils.hpp>

*/

//Unit1.cpp
AnsiString A = "WXYZ";
AnsiString B = "富士山";

Caption = MidStr(A,3,1); //Y

int intStart,intCount;
intStart = 3;
intCount = 1;

//Application->Title = MidStr(B, (intStart * 2) - 1, intCount *2); //山

//Application->Title = MidStr(B,5,2); //山

StrLCopy(A.c_str(), B.c_str(), 4);
Application->Title = AnsiString(A); //富士

}
0539デフォルトの名無しさん2005/04/23(土) 10:03:08
void __fastcall TForm1::FormCreate(TObject *Sender)
{
/*

Unit1.h
#include <StrUtils.hpp>

*/

//Unit1.cpp
AnsiString A = "WXYZ";
AnsiString B = "富士山";

Caption = MidStr(A,3,1); //Y

int intStart,intCount;
intStart = 3;
intCount = 1;

//Application->Title = MidStr(B, (intStart * 2) - 1, intCount *2); //山

//Application->Title = MidStr(B,5,2); //山

Application->Title = StrLCopy(A.c_str(), B.c_str(), 6); //富士

}
0540デフォルトの名無しさん2005/04/23(土) 10:04:32

void __fastcall TForm1::FormCreate(TObject *Sender)
{
/*

Unit1.h
#include <StrUtils.hpp>

*/

//Unit1.cpp
AnsiString A = "WXYZ";
AnsiString B = "富士山";

Caption = MidStr(A,3,1); //Y

int intStart,intCount;
intStart = 3;
intCount = 1;

//Application->Title = MidStr(B, (intStart * 2) - 1, intCount *2); //山

//Application->Title = MidStr(B,5,2); //山

Application->Title = StrLCopy(A.c_str(), B.c_str(), 4); //富士

}
0541デフォルトの名無しさん2005/04/24(日) 02:12:20
0542デフォルトの名無しさん2005/04/24(日) 02:47:27
1. API 関数の CharNext 関数と CharPrev 関数

文字数を調べる関数を作りました。

2. 文字列の文字数を調べる

1 バイト文字と 2 バイト文字が混在する文字列の文字数を返す関数です。

// 文字列の文字数を返す
// src : 文字列
int GetCharLength(const char* src)
{
if (src[0] == '\0')
return 0;

char* s;
int count = 1;

s = CharNext(src);

while (*s)
{
++count;
s = CharNext(s);
}

return count;
}
0543デフォルトの名無しさん2005/04/24(日) 03:15:20
API 関数の CharNext 関数と CharPrev 関数
0544デフォルトの名無しさん2005/04/24(日) 03:32:58
void __fastcall TForm1::FormCreate(TObject *Sender)
{


AnsiString ansiB = "富士山麓";


Caption = ansiB.SubString(5,4); //山麓


}
0545デフォルトの名無しさん2005/04/24(日) 08:50:53
 
0546デフォルトの名無しさん2005/04/24(日) 13:40:39
なんで荒れてるの?
0547デフォルトの名無しさん2005/04/24(日) 14:00:41
いつもの基地外さ
0548デフォルトの名無しさん2005/04/24(日) 14:58:23
ApplicationEventsのOnIdleイベントは例えばデュアルコアのCPUで片方が空いてるときに、発動しますか?
0549デフォルトの名無しさん2005/04/24(日) 15:16:42
春真っ盛り
0550デフォルトの名無しさん2005/04/24(日) 15:57:48
新規(他からの継承でない)クラス「DisplayClass」を定義しました。
このクラスのインスタンスをグローバル宣言しました。

で、DisplayClassのパブリックメンバに、Graphics::TBitmap *LoadPicBitmap;
と宣言。

フォームは一個だけIDEで作成し、On_CreateハンドラからDisplayClassのメンバ関数を呼び出し、
LoadPicBitmapにnewする。

で、Form1のOn_CloseハンドラでLoadPicBitmapをdeleteすると、ウィンドウを閉じた時に
不正終了してしまいます。

LoadBitmapを参照しているほかのイベントハンドラがまだ呼ばれるのかと思いました。

なんで、On_CloseハンドラではApplication->Terminate()することにして、
On_Destroyハンドラでdeleteすることにしたのですが、頻度は減りましたがやはり
たまに不正終了します。

どうやったら不正終了しないでLoadPicBitmapを解放できるでしょうか?
0551デフォルトの名無しさん2005/04/24(日) 17:13:02
Canvas->CopyRect()関数で、イメージサイズを変えるとあまり綺麗にコピーできないのですが、
もう少し綺麗にコピーできる方法はないでしょうか?
0552デフォルトの名無しさん2005/04/24(日) 18:11:20
>>548
OnIdleってそのアプリが処理するメッセージがないときに呼ばれるものだから、CPUの忙しさとは関係ないのでは。
CPUがどんだけ忙しくたって、キューにメッセージがなければそのアプリはアイドル状態って判断されるわけだし。
0553デフォルトの名無しさん2005/04/24(日) 19:04:23
CopyFileでサイズの大きいファイルをコピーすると、
コピー中は、プログラムが固まって操作できなくなるんだけど
これを回避する方法ってありますか?
0554デフォルトの名無しさん2005/04/24(日) 19:16:32
スレッド
0555デフォルトの名無しさん2005/04/24(日) 21:44:51
>>553
バッファ使うなりして自前でコピーしたら?
現在何%コピーできてるかとかの表示もできそう
だし。

ただ、正確にコピーできてるかファイル比較
したりする必要あるなら多少面倒っぽいかも。


ところでCopyFileの速度ってどうなの?
高速ファイルコピー専用のアプリも多いみたい
なんだけどファイルコピーが低速なのはエクスプロ
ーラ上だけ?


と、自分では何も確認してない俺がレスしときますね。
0556デフォルトの名無しさん2005/04/24(日) 23:57:34
>>554-555
どうもありがとうです。
なんとか、スレッドを使ってうまくいったです。
でも、コピー失敗するから、ウェイトとかファイル比較とか
結構ややこい。
高速確実にファイルコピーできる方法があったら、
俺も知りたいです(´・ω・`)
0557デフォルトの名無しさん2005/04/25(月) 00:34:43
Application->ProcessMessages();// 溜まっているイベントの処理
0558デフォルトの名無しさん2005/04/25(月) 03:14:22
TThreadでメインFormからThreadのExecuteメソッドが実行中であるかどうかを判別する方法を教えてください
0559デフォルトの名無しさん2005/04/25(月) 03:48:45
Executeの最初と最後で(ry
0560デフォルトの名無しさん2005/04/25(月) 05:46:28
C++Builderからsusieのpluginを利用するサンプルプログラムはありませんか?
0561デフォルトの名無しさん2005/04/25(月) 07:22:43
susieは元々C言語用では?
0562デフォルトの名無しさん2005/04/25(月) 07:52:21
>>433
Indyを入れると出るみたいです。
だれかIndyうまくインストールできた人居る?
0563デフォルトの名無しさん2005/04/25(月) 17:46:05
>> 560
C++Builder6 vol.2の本に載ってるよ
0564デフォルトの名無しさん2005/04/25(月) 17:49:05
IncYear関数を使う時、なんか特別にインクルードしないとダメですか?
0565本田2005/04/25(月) 20:34:16
>>560
>Spi Load
http://www.vector.co.jp/soft/win95/art/se064950.html
0566デフォルトの名無しさん2005/04/25(月) 21:58:36
>>564
ヘルプの「ユニット」ってやつのヘッダ。
VCLのヘッダは拡張子hppだから気をつけて。
0567デフォルトの名無しさん2005/04/26(火) 13:40:07
>>566
できました!
thx!
0568デフォルトの名無しさん2005/04/26(火) 15:48:32
C++Builder5で開発中の初心者です。

ScrollBoxについてなのですが、
これは直接文字を書き込むことはできないのでしょうか?
もしできるのであれば教えてください。
0569デフォルトの名無しさん2005/04/26(火) 17:30:01
>>568
>これは直接文字を書き込むことはできないのでしょうか?

「直接文字を書き込む」とは、
ScrollBox のどこにどう書き込みたいのか?
次第による。
0570デフォルトの名無しさん2005/04/26(火) 19:20:45
UTCを取得する関数ってありますか?
0571デフォルトの名無しさん2005/04/26(火) 19:28:42
>>570
::GetSystemTime(LPSYSTEMTIME);
じゃだめなのか?
0572デフォルトの名無しさん2005/04/27(水) 17:07:44
>>526
レスがかなり遅くなりましたがありがとうございます。
それで、やってみます。
0573デフォルトの名無しさん2005/04/27(水) 19:09:15
C++Builder1でTListViewにチェックボックスを付ける方法を教えてください
■ このスレッドは過去ログ倉庫に格納されています