C++Builder相談室 Part13
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/02/15 20:58:38過去スレ・関連サイトは>>2-6あたり。
0474デフォルトの名無しさん
2005/04/15(金) 14:01:00どう突っ込みたいのか書かないとわからん。
数字として入れたいならAnsiString::sprintf()とか
0475デフォルトの名無しさん
2005/04/15(金) 14:58:000476デフォルトの名無しさん
2005/04/15(金) 17:41:54文字列を扱うのに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:59ObjectPascalの文字列型互換だからしょうがない
0478デフォルトの名無しさん
2005/04/16(土) 00:01:160479デフォルトの名無しさん
2005/04/16(土) 03:37:070480デフォルトの名無しさん
2005/04/16(土) 11:06:19いまBCBが手元にないので確かめられないのだが、
AnsiString hoge[5];
hoge[1]="Nakajima";
とした場合は、hoge[1][1]にNが入るってこと?
0481デフォルトの名無しさん
2005/04/16(土) 12:38:18その場合は
hoge[0][1]にNがはいるんじゃ
0482デフォルトの名無しさん
2005/04/16(土) 13:12:09何故?なにゆえ?
0483デフォルトの名無しさん
2005/04/16(土) 14:25:42ただし正確には
hoge[1][1]は
hoge[1].operator[](1)と等価で戻値はchar&
0484デフォルトの名無しさん
2005/04/16(土) 17:36:37{
AnsiString hoge[5];
hoge[1]="ABC";
Caption = hoge[1][1];//A
Application->Title = hoge[1][3];//C
}
0485デフォルトの名無しさん
2005/04/16(土) 18:15:23http://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:390487デフォルトの名無しさん
2005/04/16(土) 22:32:48Alpha が透過度になります(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は、ハンドルをもってないからなんでしょうか?
0489デフォルトの名無しさん
2005/04/17(日) 12:52:200490デフォルトの名無しさん
2005/04/18(月) 02:42:360491デフォルトの名無しさん
2005/04/18(月) 02:44:03Windows NTのサービスを実装するアプリケーションを開発するために、
サー ビスアプリケーションを作成するウィザードが提供されます。
サービスアプリケ ーションのために、
TServiceApplicationクラスとTServiceクラスが用意され ており、
サービスの名前や種類、動作はオブジェクトインスペクタによって
定 義できます。
0492デフォルトの名無しさん
2005/04/18(月) 12:05:37これって左クリでポップアップする方法教えれ。オブジェクトインスペクタの設定でな
パネルのクリイベで自分で呼び出すってのはイラン
0493デフォルトの名無しさん
2005/04/18(月) 12:40:16そんな方法はない
0494デフォルトの名無しさん
2005/04/18(月) 13:23:31お前がBCB使うの止めればいいよw
0495デフォルトの名無しさん
2005/04/18(月) 18:52:480496デフォルトの名無しさん
2005/04/18(月) 19:07:250497デフォルトの名無しさん
2005/04/18(月) 19:54:19何か対処方法はありますでしょうか。
0498デフォルトの名無しさん
2005/04/18(月) 22:10:560499デフォルトの名無しさん
2005/04/18(月) 23:30:590500デフォルトの名無しさん
2005/04/19(火) 03:35:330501デフォルトの名無しさん
2005/04/19(火) 09:15:25知ってるがお前の態度が(ry
0502デフォルトの名無しさん
2005/04/19(火) 13:52:59マウスボタンを押した状態でカーソルを移動させ
て範囲内の項目を全て選択状態にするにはどう
やったらできますか?BCB6Proです。
0503デフォルトの名無しさん
2005/04/19(火) 14:47:230504デフォルトの名無しさん
2005/04/19(火) 14:59:49CtrlやSiftを押しながらではなくてマウスボタンを押しながら
カーソルを移動させるだけで破線の四角い枠が表示されて
範囲内の項目全てが選択状態になりますよね?
あれを実現したいのです。
0505デフォルトの名無しさん
2005/04/19(火) 15:25:140506デフォルトの名無しさん
2005/04/19(火) 19:41:57カーソル位置のファイルを開くで開いてみると、ちゃんとBCBがインストールされているディレクトリにあるみたいで、
インクルードのパスもMCFのディレクトリに通ってるみたいです。
何故エラーが出るのでしょうか。
FAQみたいな質問で申し訳ないです。
0507デフォルトの名無しさん
2005/04/19(火) 19:44:42宜しくお願いします。
0508本田
2005/04/19(火) 23:51:14そんなことよくあるんだけど、
私、BCB5PROを使ってるんだけど、
プロジェクトファイルをメイクファイルに変換して、
試行錯誤してメイクファイルを修正している。
0509デフォルトの名無しさん
2005/04/20(水) 01:45:500510& ◆FC4h7F/wV6
2005/04/20(水) 02:34:19#include "afxres.h"
を
#include <afxres.h>
にするとか。
0511本田
2005/04/20(水) 02:35:52>>509
BCB6では無理。
0512デフォルトの名無しさん
2005/04/20(水) 03:11:52Delphi2006またはDelphi2007をお待ちください。
0514デフォルトの名無しさん
2005/04/20(水) 16:33:44TTreeViewのスクロールバーって消えないのでしょうか?
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そうなのですか・・・
>>510
それも試してみたのですが、やっぱり駄目でした。
アドバイスありがとうございました。
色々試してみます。
0516デフォルトの名無しさん
2005/04/20(水) 21:56:51public 宣言と private 宣言
グローバル
g
gstrUserName
モジュールレベル
m
mblnCalcInProgress
プロシージャ内
なし
dblVelocity
0517デフォルトの名無しさん
2005/04/21(木) 12:37:23Borland C++Builderのチュートリアルをやっていてつまってしまいました…
2:フォーム上の ActionManager1 を選択し,オブジェクトインスペクタで
Images プロパティに ImageList1 を設定します。
とあるのですが、ImageList1と言うものがプルダウンに表示されません
入力しても駄目です…
これは、環境の設定とかが悪いのでしょうか?
Borland C++Builder Professional Version6.0[Build10.166] を使用しています。
どなたか教えて下さい
宜しくお願いします。
0518デフォルトの名無しさん
2005/04/21(木) 12:49:33フォーム上にTImageListコンポーネント置いてあるか?
0519517
2005/04/21(木) 13:00:36やってしまいました・・・置いてませんでした_| ̄|○
申し訳ありませんうまく行きました有り難うございます。
これからも精進致します…
0520デフォルトの名無しさん
2005/04/21(木) 13:42:05LoadFromFileしたいのですが160000行もあり、読
み込みに20秒ぐらい掛かってしまいます。
ListViewのようにMemoもOwnerDataのような事が
可能でしょうか?また、できるならどのようにすれ
ば実現できますか?
0521デフォルトの名無しさん
2005/04/21(木) 13:48:510522デフォルトの名無しさん
2005/04/21(木) 15:53:43パソコンを買い換える。
0523デフォルトの名無しさん
2005/04/21(木) 18:26:21__fastcall TForm3::TForm3(const int iFlg, TComponent* Owner) : TForm(Owner)
↓これで↑を呼ぶ場合にどうすればいいんでしょうか?
Application->CreateForm(__classid(TForm3), &Form3);
これで、
0524デフォルトの名無しさん
2005/04/21(木) 22:04:52グローバルな変数になります。
プライベート変数ではなく、他のフォームからも使ってもらいたい変数は、同じくヘッダファイルの 中の「public:」のもとで宣言し
パブリック変数になります。
フォームに対応したユニット内のすべてのモジュール(関数)から使用できる 変数を、
『プライベート変数』と呼びます。
モジュール(関数)の中で宣言された変数は
『ローカル変数』 と呼ばれます。
0525デフォルトの名無しさん
2005/04/21(木) 22:28:19無理。普通にnewを使えばいい。
0526デフォルトの名無しさん
2005/04/22(金) 01:25:54スタイルにTVS_NOSCROLLを加える。
既にスクロールバーを持ってるやつを、SetWindowLongで変更する場合は、
変更後にShowScrollBarを呼ばないと消えない模様。
0527デフォルトの名無しさん
2005/04/22(金) 10:39:130528デフォルトの名無しさん
2005/04/22(金) 17:26:15C++Buirder5で開発中なのですが、
VBでいうMid関数と同じ役割とする関数ってC++Buirderにもありますか?
もしあるのであれば、教えてくださいm(_ _)m
0529デフォルトの名無しさん
2005/04/22(金) 17:57:310530デフォルトの名無しさん
2005/04/22(金) 19:00:15ヘルプ位見たんだろうな?
0531デフォルトの名無しさん
2005/04/22(金) 19:23:190532デフォルトの名無しさん
2005/04/22(金) 20:45:59二回繰り返してるってことは素で間違えてるのか?
×Buirder
○Builder
0533デフォルトの名無しさん
2005/04/23(土) 04:51:22{
/*
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:14enum 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{
/*
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:57MidStr
MidStr
MidStr
MidStr
MibStr
MidStr
MidStr
MidStr
MidStr
MidStr
MidStr
0537デフォルトの名無しさん
2005/04/23(土) 07:38:510538デフォルトの名無しさん
2005/04/23(土) 09:59:18void __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{
/*
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:32void __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:200542デフォルトの名無しさん
2005/04/24(日) 02:47:27文字数を調べる関数を作りました。
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:200544デフォルトの名無しさん
2005/04/24(日) 03:32:58{
AnsiString ansiB = "富士山麓";
Caption = ansiB.SubString(5,4); //山麓
}
0545デフォルトの名無しさん
2005/04/24(日) 08:50:530546デフォルトの名無しさん
2005/04/24(日) 13:40:390547デフォルトの名無しさん
2005/04/24(日) 14:00:410548デフォルトの名無しさん
2005/04/24(日) 14:58:230549デフォルトの名無しさん
2005/04/24(日) 15:16:420550デフォルトの名無しさん
2005/04/24(日) 15:57:48このクラスのインスタンスをグローバル宣言しました。
で、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もう少し綺麗にコピーできる方法はないでしょうか?
0552デフォルトの名無しさん
2005/04/24(日) 18:11:20OnIdleってそのアプリが処理するメッセージがないときに呼ばれるものだから、CPUの忙しさとは関係ないのでは。
CPUがどんだけ忙しくたって、キューにメッセージがなければそのアプリはアイドル状態って判断されるわけだし。
0553デフォルトの名無しさん
2005/04/24(日) 19:04:23コピー中は、プログラムが固まって操作できなくなるんだけど
これを回避する方法ってありますか?
0554デフォルトの名無しさん
2005/04/24(日) 19:16:320555デフォルトの名無しさん
2005/04/24(日) 21:44:51バッファ使うなりして自前でコピーしたら?
現在何%コピーできてるかとかの表示もできそう
だし。
ただ、正確にコピーできてるかファイル比較
したりする必要あるなら多少面倒っぽいかも。
ところでCopyFileの速度ってどうなの?
高速ファイルコピー専用のアプリも多いみたい
なんだけどファイルコピーが低速なのはエクスプロ
ーラ上だけ?
と、自分では何も確認してない俺がレスしときますね。
0556デフォルトの名無しさん
2005/04/24(日) 23:57:34どうもありがとうです。
なんとか、スレッドを使ってうまくいったです。
でも、コピー失敗するから、ウェイトとかファイル比較とか
結構ややこい。
高速確実にファイルコピーできる方法があったら、
俺も知りたいです(´・ω・`)
0557デフォルトの名無しさん
2005/04/25(月) 00:34:430558デフォルトの名無しさん
2005/04/25(月) 03:14:220559デフォルトの名無しさん
2005/04/25(月) 03:48:450560デフォルトの名無しさん
2005/04/25(月) 05:46:280561デフォルトの名無しさん
2005/04/25(月) 07:22:430562デフォルトの名無しさん
2005/04/25(月) 07:52:21Indyを入れると出るみたいです。
だれかIndyうまくインストールできた人居る?
0563デフォルトの名無しさん
2005/04/25(月) 17:46:05C++Builder6 vol.2の本に載ってるよ
0564デフォルトの名無しさん
2005/04/25(月) 17:49:050565本田
2005/04/25(月) 20:34:16>Spi Load
http://www.vector.co.jp/soft/win95/art/se064950.html
0566デフォルトの名無しさん
2005/04/25(月) 21:58:36ヘルプの「ユニット」ってやつのヘッダ。
VCLのヘッダは拡張子hppだから気をつけて。
0567デフォルトの名無しさん
2005/04/26(火) 13:40:07できました!
thx!
0568デフォルトの名無しさん
2005/04/26(火) 15:48:32ScrollBoxについてなのですが、
これは直接文字を書き込むことはできないのでしょうか?
もしできるのであれば教えてください。
0569デフォルトの名無しさん
2005/04/26(火) 17:30:01>これは直接文字を書き込むことはできないのでしょうか?
「直接文字を書き込む」とは、
ScrollBox のどこにどう書き込みたいのか?
次第による。
0570デフォルトの名無しさん
2005/04/26(火) 19:20:450571デフォルトの名無しさん
2005/04/26(火) 19:28:42::GetSystemTime(LPSYSTEMTIME);
じゃだめなのか?
0572デフォルトの名無しさん
2005/04/27(水) 17:07:44レスがかなり遅くなりましたがありがとうございます。
それで、やってみます。
0573デフォルトの名無しさん
2005/04/27(水) 19:09:15■ このスレッドは過去ログ倉庫に格納されています