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

くだすれC++Builder(超初心者用)その2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/04/06(木) 16:33:24
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
C++Builder使いが優しくコメントを返しますが、
お礼はC++Builderの布教と初心者の救済をお願いします。

Borland Home Page
http://www.borland.co.jp/


<前スレ>
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50


<兄弟スレ>
くだすれDelphi(超初心者用)その31
http://pc8.2ch.net/test/read.cgi/tech/1142594051/l50
0751デフォルトの名無しさん2006/10/22(日) 21:12:52
>>750

>>655>>657>>660
0752デフォルトの名無しさん2006/10/22(日) 23:55:33
>>751
あああ、ほんとだ。
すみませんでした。

でも、予想が当たって良かったです。
0753デフォルトの名無しさん2006/10/24(火) 23:41:47
文字列を0詰めする方法を教えてください。

"abc" → "000abc"
0754デフォルトの名無しさん2006/10/25(水) 00:40:01
const int MaxLength = 8;
AnsiString str = Edit1->Text;
Edit2->Text = str.StringOfChar('0', MaxLength - str.Length())+str;
0755デフォルトの名無しさん2006/10/25(水) 20:45:15
builder 6 pro には fastnet は付属してないんですか?
exampleの httpdemoがコンパイルできないんです。
0756デフォルトの名無しさん2006/10/25(水) 21:25:13
>753
printfの書式?それとも文字列に出力?
http://ja.wikipedia.org/wiki/Printf
文字列バッファへの出力ならsprintf
0757デフォルトの名無しさん2006/10/26(木) 15:19:38
TMemo上でマウスがクリックされたとき、カーソルが何行目にあるかを
取得したいのですが、どうすればいいでしょう?
0758デフォルトの名無しさん2006/10/26(木) 16:12:24
>>757
CaretPos
0759デフォルトの名無しさん2006/10/26(木) 18:07:11
初歩的な質問ですが、よろしくお願いします。
module.cppに、モジュールの関数を定義しました。
void __fastcall TDataModule::say_num(){
    //数字を表示するだけです
    printf("%d\n",n);
}

この関数を使う方のファイルjikko.cpp(ジッコウ)
でグローバル変数int nを定義しました。
グローバル変数なのでそのまま使えると思ったのですが、
コンパイルすると、[C++ エラー] module.cpp: E2451 未定義のシンボル n
と出てしまいます。確かにmodule.cppでは、定義してないんです。
どのようにすると、jikko.cppのnをモジュールmodule.cppのnに渡せるのでしょうか。

jikko.cppのコードですが、int nを定義して下記のように呼び出しているだけです。
DataModule->say_num();

よろしくお願いします。
0760デフォルトの名無しさん2006/10/26(木) 18:16:05
>>759 です。
補足です。
say_num()関数にintの引数を取れるように
する以外で考えております。
よろしくお願いします。
0761デフォルトの名無しさん2006/10/26(木) 19:00:15
>>759です

jikko.cppで、
extern int n=1;と定義

module.cppで、modu_ex.cppのnを参照するため
#include "modu_ex.cpp"

とすると、n=1が参照できるようになりました。
この処理で大丈夫でしょうか。
0762デフォルトの名無しさん2006/10/26(木) 19:31:16
根本からダメっぽいので、残念ながら、大丈夫とはいえないな。

基礎を書籍等で習得するべき。
掲示板の数行のやりとりで教えられる領域じゃないように見える。
0763デフォルトの名無しさん2006/10/26(木) 20:27:02
超初心者的な話じゃないかもしれませんが宜しくお願いします。
聞きたいのはメッセージフックに関してです。

通常のアプリケーションではWndProcのオーバーライトで
独自のメッセージのやり取りおよび、イベントの受け取り等は出来きたのですが、
それをコンポーネント化しようとすると、呼び出し元のWndProcを操作せねばならず
他で見かけたDelphiソースみたいに、親のWinProcアドレスを挿げ替える方法も
出来ないものかと色々ためしましたが上手く行きませんでした。

で、ローカルフック関係で色々調べて試して見たのですが、
MFC関連は結構引っかかって色々試しては見たのですが、
これもコンポーネントとして持たせようとすると上手く行かないのです。
理想は、プロパティに独自のメッセージを入れると、そのメッセージが親アプリに
送られてきた時にイベントを発生させてくれるものを作りたいのです。

お勧めのサンプルソースやHP等ありましたら宜しくお願いします。
07647632006/10/26(木) 20:32:01
すいません、ちとへんな文章になってますね。
もう3日ほど試行錯誤でてんぱってるみたいです(^^;

短く書くと、ローカルフックコンポーネントを作りたいので
何処か参考になるソースやHPがありましたら宜しくお願いします。

……二行で済む話を長々書いてしまったorz
0765デフォルトの名無しさん2006/10/26(木) 20:48:32
>>762
お返事ありがとうございます。
>module.cppで、modu_ex.cppのnを参照するため
>#include "modu_ex.cpp"
すみません。ファイル名間違えてました。
>module.cppで、jikko.cppのnを参照するため
>#include "jikko.cpp"
でした。

ネットで「externで宣言したら、使いたいユニットで
その宣言したファイルをインクルードする。」
と書いてあったのでそのままインクルードしました。

手元の本見たら、ヘッダーファイルにextern宣言してました。
jikko.hを作ってそこで宣言したほうが良いってことでしょうか?
0766デフォルトの名無しさん2006/10/27(金) 01:07:57
>>765

//jikko.h
extern int n;

//jikko.cpp
int n;

//module.cpp
#include "jikko.h"

これでヲケ
ただし、ひじょ〜〜〜〜〜〜〜に不味い設計
BCBのフォーム周りは似た事してるけどさ

正解は
>say_num()関数にintの引数を取れるようにする
またはポインタないし参照をとるようにする
0767デフォルトの名無しさん2006/10/27(金) 04:11:35
>>766

詳しく解説ありがとうございます。
あんまり良く無い設計でしたか。
特別なときだけ使うようにしたいと思います。
0768デフォルトの名無しさん2006/10/27(金) 17:15:33
Form上にTEditを2つ貼り付けます。仮にEdit1, Edit2とします。
エクスプローラからファイルをドラッグアンドドロップして
ファイル名を取得してTEditに表示させたいのですが、
ドロップしたマウスカーソル位置がEdit1上ならファイル名はEdit1に、
同様にマウスカーソル位置がEdit2上ならファイル名はEdit2に表示させたいのです。
表示させるTEditのターゲットを切り替えたいのです。

DragAcceptFiles(Edit1->Handle, true);
DragAcceptFiles(Edit2->Handle, true);
とすべきなのでしょうか。またその場合のMESSAGE_MAPはどのように記述すべきでしょうか。

とりあえず
DragAcceptFiles(Handle, true);
とした上で、DragQueryPointで取得した座標値でターゲットの判断をしていますが、
こんなことしなくても出来るんじゃないかと思いまして。
0769デフォルトの名無しさん2006/10/27(金) 19:52:32
>>768
TEditから派生させてWindProcメソッドをオーバーライド
0770デフォルトの名無しさん2006/10/27(金) 22:34:57
すみません、2つだけ質問させて下さい。

1つ目は、乱数の値を取得する際なんですが、どのサイトを見ても乱数の種でTime関数を
使うのを推奨してるのですが、分母が大きい場合(65536)に実行すると
時間の経過と共に徐々に取得してくる数値が大きくなってしまいます。
クリック時に乱数取得するように組んでみると…

クリック→100代 クリック→200代 クリック→300代 

という風に徐々に徐々に増えていってしまいます。
逆にSRAND関数を使わない場合はちゃんとバラけた乱数を拾ってきます。
プログラムを起動しなおしても、同じ数値は拾ってきません。
これはC++BuilderのRand関数はC++などとは違い、種をリセットしない方が
良いという事なのでしょうか?

もう一つは、先ほどの分母に関してなのですが
Rand関数で返ってくる値は32768が最大なのでしょうか?
65536個の乱数を取得したいと考えているのですが、それは無理なのでしょうか?

ぜひ教えて頂ければと思います。
よろしくお願いします。
0771デフォルトの名無しさん2006/10/27(金) 22:46:17
>>770
通常、乱数ジェネレータの初期化(srand)は1回だけやればいい。
あと、0x7FFF以上の値が欲しければ_lrandを使えば0x7FFFFFFFまで取れる。
0772デフォルトの名無しさん2006/10/27(金) 23:01:33
>>771
ありがとうございました!!
_lrandで無事解決しました。

2番目の質問の方は、どうやらsrand関数にばかり目が行ってて
randomize関数を毎回呼び出していたために変な取得の仕方を
してたような感じでした。
多分これで大丈夫だと思います。助かりました!
ありがとうざいます。
0773デフォルトの名無しさん2006/10/27(金) 23:24:56
何度もすみません。もう一つ質問をお願いします。

int a,b;
float c;
で宣言しておき

c = a / b;

とする場合に小数点1桁までをLabelで表示したい場合が分かりません。
ceil関数なども調べてみたのですが、小数点1桁までの切り上げが出来ませんでした。
質問ばかりで申し訳ありませんが、よろしくお願いします。
0774デフォルトの名無しさん2006/10/28(土) 00:08:06
>>773
書式付の編集で四捨五入をしてくれる

char str[100];
sprintf(str, "%5.1f", (double)a/b);
0775デフォルトの名無しさん2006/10/28(土) 01:18:42
BDS2006ですが、コードのアウトラインがうまく表示されていません。
    //---
 曰 void ...
 │ {
 │  ...;
 └ }
    //---

こんな感じが普通だと思うんですが、

 曰 //---        //---          //---
 │ void ...        void ...     曰 void...
 │ {          曰 {          │ {
 └  ...;    .    │  ...;    .    └  ...;
    }          │ }            }
    //---    .   └ //---    .     //---

このような風になってしまいます。
文法的には間違ってないですし、もちろんコンパイルもできます。
書き方が悪いのでしょうか。
0776デフォルトの名無しさん2006/10/28(土) 13:16:00
773の者ですが、回答ありがとうございます。

例えばdouble型の数値a,b,cがあって a/bの結果をcに代入してLabelで小数点1桁まで表示したい場合

double a,b,c;
c = a / b;

Label1->Caption = c;
とすると小数点以下が延々と表示されます。これを小数点1桁までの表示としたいのですが
>>774でお答え頂いたような編集式で記述するのでしょうか?
それともLabelのプロパティなどで設定出来るのでしょうか?
0777デフォルトの名無しさん2006/10/28(土) 13:35:01
sprintf実行後に
Label1->Caption = str;
すればいいんでねーの?
0778デフォルトの名無しさん2006/10/28(土) 14:53:19
VCL使うなら
Label1->Caption = FormatFloat("0.0", c);

しっかし、Label1->Caption = c;が、なんでエラーにならんのだ。
AnsiStringは、数値を代入してもOKだったなんて。
今まで、Float(Int)ToStr(***)と無駄な事をしていた・・・
0779デフォルトの名無しさん2006/10/28(土) 17:05:54
>>778

っ[ AnsiStringのコンストラクタ ]
0780デフォルトの名無しさん2006/10/29(日) 07:49:07
POP3サーバからUIDLを取得する方法を教えてください。
0781デフォルトの名無しさん2006/10/30(月) 13:44:57
外部のコンソールアプリを起動して、その標準出力をとりこみたいのですが、
どういう方法があるでしょうか?
0782デフォルトの名無しさん2006/10/30(月) 14:01:16
>>780
RFC嫁
07837682006/11/02(木) 13:54:36
>>769
すみません。サンプルのソースとか頂けないでしょうか…
0784デフォルトの名無しさん2006/11/02(木) 14:33:46
>>783

typedef void __fastcall (__closure *TDropFileEvent)(System::TObject *Sender, std::vector<AnsiString> Files);
class TMyEdit : public TEdit
{
public:
 __fastcall TMyEdit(HWND ParentWindow) : TEdit(ParentWindow) { DragAcceptFiles(Handle, TRUE); }
__published:
 __property OnDropFile = { read=FDropFileEvent, write=FDropFileEvent };
private:
 TDropFileEvent FDropFileEvent;
protected:
 virtual void __fastcall WndProc(Messages::TMessage &Message) {
  if (Message.Msg == WM_DROPFILES)
  {
   std::vector<AnsiString> files;
   // filesにファイル名格納
   FDropFileEvent(this, files);
  }
  TEdit::WndProc(Message);
 }
};
0785デフォルトの名無しさん2006/11/02(木) 15:06:08
>>784
これをどうやって使えばいいでyそうか?
0786デフォルトの名無しさん2006/11/02(木) 21:26:10
    _, ._
  ( ゚ Д゚)
  ( つ旦O
  と_)_)

    _, ._
  ( ゚ Д゚)   ガシャ
  ( つ O. __
  と_)_) (__()、;.o:。
          ゚*・:.。
0787デフォルトの名無しさん2006/11/03(金) 00:51:04
>>783

まんま>>769
これの意味が分からんと言われたら
C++の入門書を読みましょうとしか答えようがないな
0788デフォルトの名無しさん2006/11/03(金) 00:52:17
↑レス番違った
↓こっちが正解
>>784

まんま>>769
これの意味が分からんと言われたら
C++の入門書を読みましょうとしか答えようがないな
0789デフォルトの名無しさん2006/11/03(金) 07:58:19
>>768
というかただ単にTApplicationEvents::OnMessageでメッセージ拾って
Edit1、Edit2とHanlde比較すればすむんじゃね?
0790デフォルトの名無しさん2006/11/06(月) 18:12:33
BCB5で作成したプロジェクトをBCB6で開く時に、「'-'は整数ではありません」で開けません。
'-'を検索し、'-'を全て無くしても同じ結果でした。
BCB5で新規プロジェクトを作成し何も変更せずに保存したものは、BCB6でも開けます。
何かわかりますか?

0791デフォルトの名無しさん2006/11/06(月) 19:04:23
数値があるべきところに - があるんじゃね?
makeファイルの-オプションのところとか。
0792デフォルトの名無しさん2006/11/06(月) 19:31:06
790です
>>791
「makeファイルの-オプションのところ」とはどこで確認するのでしょう??
なにぶん初心者なもので・・・。

メイクファイルの作成で出来た「***.mak」はテキストで開いてみたのですが、
BCB6でも開ける新規プロジェクトの「***.mak」と比較しても特にめぼしいとこはありませんでした。
また、ツール→環境オプション、プロジェクト→オプションも見たのですが特にめぼしいとこは
ありませんでした。

0793デフォルトの名無しさん2006/11/06(月) 21:48:02
790です

解決しました。
BCB5で、プロジェクト→オプション→Pascal→構造体を境界配置 にチェックをつけたら
BCB6で開けました。理由は不明。
0794デフォルトの名無しさん2006/11/07(火) 02:36:26
class Color{
int color;
};

//1番
Color* c = new Color;
//2番
Color* c2 = new Color();

1番と2番の書き方って何か意味の違いはあるのでしょうか
0795デフォルトの名無しさん2006/11/07(火) 11:44:16
790で質問した者です。
BCB5→BCB6 移行の続きなのですが、今度はリンクの所で下記エラーになります。
 
 [リンカ致命的エラー]Fatal:ファイル VCLE50.LIBが開けません。

検索するとBCB5のフォルダ((BCB)\Lib\Debug/Release)には有り、BCB6のフォルダには無し。
コピーしたら、リンクは出来たのですがVCLE50.LIBはBCB5のファイルですよね?
VCLE.LIBがBCB6のフォルダにはあるのですが・・・。
プロジェクトファイルの下記部分を確認するような事が書いてあったので、確認してみましたが
VCLE50.LIB は書いてませんでした。
<SPARELIBS value="rtl.lib vcl.lib"/>
<PACKAGES value="vcl.bpi rtl.bpi"/>

なぜ、VCLE50.LIB を見ようとしてしまうのでしょう??


0796デフォルトの名無しさん2006/11/07(火) 15:57:21
使用OS サーバー Windows 2003 Server
  クライアント WindowsXP
DB   SQL Server2005
開発環境 Borland C++Builder6.0 Pro

上記環境でアプリを作成するのですが、SQL Serverへのアクセスは何が一番最適でしょうか?

SQL Server2005の文献を読む限り、「.NET Framework Data Provider for SQL Server」の利用が
推奨と書いてあり調査したがどうもBorland C++ は.NETに対応していない?ようで、SQL Native Clientを使用する?ようなのですが、
どのコンポーネントを使えば良いか分かりません。(TADO***,TSQL***,TDatabase・・・)

アドバイスお願いします。
(接続→更新→終了までの簡単なサンプルコードを教えて頂けると助かります。
参考サイトでも構いません。)
0797デフォルトの名無しさん2006/11/07(火) 22:38:41
TRichEditで左にマージンを入れる方法がわかりません。教えてください。
RichEdit1->Paragraph->LeftIndent=xx; として
RichEdit1->Lines->Add("xxxxx");
としても変化がありませぬでした。
0798デフォルトの名無しさん2006/11/09(木) 00:42:20
イメージコンポーネントにトラックバーに対応して長さがかわり、
さらにトラックバーに対応して回転する線を描画するプログラムを
作成するってゆう宿題をやってるんですがまったくわかりません…
長さを調整することはできるのですが角度がどうすればよいのかわかりません。
プログラム自体に線の長さや位置の初期値を組み込んだのがおかしいのかな。
誰か教えてください。
0799デフォルトの名無しさん2006/11/09(木) 15:40:17
>>797
×LeftIndent
○TopIndent
0800デフォルトの名無しさん2006/11/09(木) 23:03:53
>>799
エラーになります。
あと、ヘルプのどこを探しても、TopIndent が見つかりません。
0801デフォルトの名無しさん2006/11/10(金) 03:42:15
つ[FirstIndent]
0802デフォルトの名無しさん2006/11/10(金) 04:05:45
>>798
ここのアプレットで、原点(0,0)を始点として渦巻きを外に向かってグルグルと描いていくかんじ?
トラックバーのPositionが増えるに従って渦巻きを大きくしていくかんじというか。
0803デフォルトの名無しさん2006/11/10(金) 04:06:17
アドレス忘れた
http://www.sm.rim.or.jp/~shishido/sheeta.html
0804デフォルトの名無しさん2006/11/10(金) 06:52:47
>>802>>803
なんとかなりそう!サンクス!
0805デフォルトの名無しさん2006/11/11(土) 01:12:52
DelphiからBCBにスイッチしました。
Delphiのように、クラスを作る際は、TObjectから派生させるべきですか?
0806デフォルトの名無しさん2006/11/11(土) 13:12:08
>>805
ObjectPascal型クラス特有の機能(基底クラスのポインタから派生クラスの型取ってきたいとか)使うんでなければC++型クラス使うのが一般的。
0807デフォルトの名無しさん2006/11/11(土) 16:27:02
TObjectから派生すると、静的利用ができないのが面倒だな
0808デフォルトの名無しさん2006/11/11(土) 17:03:09
Ctrl + Shift + C による補完はできないんですか?
0809デフォルトの名無しさん2006/11/11(土) 21:40:48
>>801
で・・・できました。
ありがとうございます。
でも、LeftIndentって何のためにあるんでしょうか?
0810デフォルトの名無しさん2006/11/12(日) 22:17:30
>>809
同一パラグラフの2行目以降のインデント幅 FirstIndentに加算される
なのでパラグラフが1行しかないと反映されない
0811デフォルトの名無しさん2006/11/18(土) 00:51:08
>>805
いや、全部TPanelから派生させるべきだよ。
0812デフォルトの名無しさん2006/11/20(月) 03:17:24
WinAPIの質問(?)になってしまうかも知れないんですけど、
よろしくお願いします。

sndPlaySound関数を利用して二つのWAVファイルを時間差で再生するプログラム
を作りたかったのですが、sndPlaySoundでは複数のWAVファイルを重複して再生
することは出来ないようでした。

時間差と音量の組み合わせが1000種類程あるので、事前にミックスして一つの
WAVファイルにまとめるのは現実的ではありません。

というわけで、複数のWAVファイルを時間差で再生できる関数などありましたら
よろしくお願いします。
0813デフォルトの名無しさん2006/11/20(月) 03:25:24
MCIとか。

mciSendString("open A.wav type waveaudio alias A", NULL, 0, NULL);
mciSendString("open B.wav type waveaudio alias B", NULL, 0, NULL);
mciSendString("play A", NULL, 0, NULL); // ここからA.wavが鳴る
一定の時間後
mciSendString("play B", NULL, 0, NULL); // ここからB.wavが鳴る
・・・
鳴り終わったら後始末を忘れずに
mciSendString("close A", NULL, 0, NULL);
mciSendString("close B", NULL, 0, NULL);

多分こんなかんじだったと思う多分
0814デフォルトの名無しさん2006/11/20(月) 03:31:40
同時に複数のwavを鳴らしたいならDirectSoundでできる。
ファイルの読み込みがちょっと面倒だけどね。
08158122006/11/20(月) 03:42:09
ありがとうございます。調べてみます。
すばやい反応本当に感謝です。
08168122006/11/20(月) 05:10:19
度々、すいません。
MCIとDirectSoundってどっちが手軽にできますか?
色々調べてみたのですがまだ数回、builderをかじった程度の自分では
どちらも敷居が高すぎてなかなか手がつけられそうにありません。

こちらの都合で申し訳ないですが、期限が迫っており、ゆっくり勉強している時間がありません。
>>812に書いた二つのWAVファイルの時間差再生ができる最低限の機能さえ
実現できればいいのですが、どちらの方法が短時間でできるでしょうか?

あと、ベクターで
「C++Builder用 DirectSoundを(比較的)簡単に扱えるDLL(サンプル付)」
というのを発見したのですが、バージョンが違うせいか、うまく動作しませんでした。
他にこのようなライブラリをご存知でしたら、お願いします。
環境はWinXP Professional , PS2 C++Builder 5 , DirectX9.0cです。
何でも良いので、よろしくお願いします
0817デフォルトの名無しさん2006/11/20(月) 06:02:42
私の知る限り、MCIでは同時再生はできなかったはず。
0818デフォルトの名無しさん2006/11/20(月) 09:44:42
TTreeViewに於いて、TListBox::MultiSelectみたいなことって出来ないのでしょうか?
0819デフォルトの名無しさん2006/11/21(火) 04:28:27
よくパスワードを保存する□チェックがあって、チェックをすると
次から"*****"が表示されて、再入力しなくてもいいようなのあります。
あればどうすればよいのでしょうか。
テキストファイルか何かにパスワード保存しておいて、ただ読み込むだけ
ということではないですよね。
よろしくお願いします。
0820デフォルトの名無しさん2006/11/21(火) 04:40:36
SHAutoComplete()
0821デフォルトの名無しさん2006/11/21(火) 07:30:12
>>816
Delphi用のDirectSoundコンポーネントは、いくつかあると思うが・・・
DelphianWorldとか、Toryyとか探してみた?
あとは、Quadruple Dでもできたはず
0822デフォルトの名無しさん2006/11/21(火) 07:58:19
>>820
ありがとうございます。
ttp://www.runan.net/program/tips/API/shlwapi_SHAutoComplete.shtml
ttp://mist.clueup.org/blogs/1/archive/2006/09/29/_EA81D552DC888C5B92307F4F633066307F308B30_.aspx
こういうページ見つけて、使い方はわかったんですが、
****を表示させるのがわからないです。
SHAutoComplete関数のフラグとか****が表示されるようなのがあるんでしょうか。
自分でなにかプログラミングしないといけないんでしょうか。
難しいです。
0823デフォルトの名無しさん2006/11/21(火) 08:14:33
>>822
横から失礼します。
パスワードは基本的に別のエディットボックスですので、ユーザーID用の
ボックスにEnterが入力された時点でどこかに暗号化しておいたパスを
拾いに行くようにするしかないような気がします。

IEの場合は多分NTUSER.DAT当たりに記録されているのではないかと
思うのですが・・・外れていたらすみません。
0824デフォルトの名無しさん2006/11/21(火) 12:46:46
>>823
レスありがとうございます。
オートコンプリートってちょっと違うのでしょうか。
わかりませんでした。

えっと、保存する場合は、暗号化前の生のパスワードでいいんですよね?
暗号化したパスワードを保存すると、*の数変わってしまいますし。
md5でと思ってたんですが、復号化できる暗号ロジック使えば、
暗号化したパスワードを保存しても大丈夫なんでしょうか。
それで、EditのPasswordCharを*に。

初心者なので壁が多いです。><
0825デフォルトの名無しさん2006/11/21(火) 23:47:34
稀に今まで動いていたものを、忘れた頃に動かすと
クラスTBevelが見つかりませんとか言われてしまうんですが、
なんでしょうか。ブレークを無視するとエラーダイアログ連発になります。
んで、Bevelを一回剥がして貼りなおすと直ります。
面倒なんで、誰が原因を知っている人がいましたら教えてください。

BDS2006のBCBです。
0826デフォルトの名無しさん2006/11/24(金) 21:37:36
デバッグしながらコードを修正していくとブレークポイントがずれていくのですがこれをずれないようにする方法はありますか。
たとえばコードにブレークポイントを埋め込めるとか。
0827デフォルトの名無しさん2006/11/25(土) 07:04:33
日本語環境で作成したプログラムを英語版Windowsに持って行くと、エラーが発生したときのダイアログが
日本語(文字化けして読めない)になってしまいます。
エラーを英語にすることはできないでしょうか?
0828デフォルトの名無しさん2006/11/25(土) 09:44:21
できる
0829デフォルトの名無しさん2006/11/25(土) 10:43:34
やり方を教えてください
0830デフォルトの名無しさん2006/11/25(土) 10:49:40
>>827
俺以前bcb6の環境で同じ現象が出て、プロジェクトの言語設定を英語にしようが
言語リソースを使おうが直らなかった(MessageBoxを呼んだ後のVCL内の処理で
多言語対応がされてないっぽい)。
結局『CreateMessageDialog使って一度TFormオブジェクトを生成した後、その
キャプションを無理矢理英語に書き換えて表示する』という力業で切り抜けた
記憶がある。
個人的にはBCB(とういかVCL)のバグだったと思ってるんだけど、違うのかね?
6より後のバージョンは知らないけど。

>>828
俺も参考までに是非知りたい。教えてPlz。
0831デフォルトの名無しさん2006/11/25(土) 11:01:35
5あたりは各国語用のリソースDLLあったような‥‥
0832デフォルトの名無しさん2006/11/25(土) 13:50:19
C++Builderは使ってないんでよくわからんけど、多言語対応は入っているはず。
たとえば日本語のプロジェクトで生成したものを英語(ENU-ENglish/Us)ロケールで実行するときは
実行ファイル名の拡張子を.ENUにした言語リソースを探して見つかればそちらのリソースを使う。
言語リソースは新規作成のリソースDLLウィザードで作る(Pro以上)。ただしこのときに
SysConst.pasにあるresourcestringまでいちいち書き換えるのは不毛なのでCD-Rにある
英語版のライブラリに切り替えてからリソースDLLウィザードを使うのが吉(そのままだと
デフォルトで生成されるresourcestringの中身が日本語になってしまう)。
08338322006/11/25(土) 13:51:21
× CD-R
○ CD-ROM
0834デフォルトの名無しさん2006/11/25(土) 23:17:48
>>832
うーん・・・リソースDLLはもちろん使ったんだけど、
SysConst.pasって関係あるのかな?
例えばMessageBoxでMB_YESNOを指定した時のボタンのキャプションも
日本語で表示されてたけど(本来英語環境ではYes/No表示のところを
はい/いいえで表示しようとして化ける)、こんなところまでSysConstで
管理してないような。
英語版ライブラリの使い方も探したけど、見つからなかったんだよね。
少なくともインストールディスクには入ってなかった気がする。
全部BCB6の話ですが。
0835デフォルトの名無しさん2006/12/01(金) 17:38:23
ボタンをクリックしたら、スクロールバー(Visibleがfalse)に選択が移る
ようなことってできますか?

開始ボタンを押したら後は矢印押すだけで内部の変数が変わるようなプログラムを
作りたいのですが。プログラムを使っている人にはその変数の値がどの程度か知られたくないのです。
あと、できれば操作中はマウスを使わなくてすむようにしたいです。
0836デフォルトの名無しさん2006/12/03(日) 16:21:58
RitchEditでフォーカスが別のボタンなどが選ばれている時に
内容を自動スクロールしたいのですが
ScrollByメソッドを使っても上手くいかないみたいです
それ以外の方法はありますでしょうか?
0837デフォルトの名無しさん2006/12/04(月) 03:08:07
本当に基本的なことで申し訳ないのですが、
TEditから入力してもらった文字列をchar型の変数に代入するにはどうしたらよいのでしょうか?

char型の変数 = Edit1->Text;

では左辺値がありませんとエラーになってしまいます。

int型の変数 = StrToInt(Edit1->Text);

は通ったので大丈夫だとおもったのですが・・・

よろしくお願いします。
0838デフォルトの名無しさん2006/12/04(月) 07:02:12
>>837
『文字列をchar型の変数に代入する』という発想が既におかしい。
C言語の基礎から勉強しなおし。
0839デフォルトの名無しさん2006/12/04(月) 07:16:59
Edit1->TextはcharじゃなくてAnsiStringだろ。
AnsiStringで宣言すればイコールで代入できるよ。
0840デフォルトの名無しさん2006/12/04(月) 08:53:29
>>837
char* AnsiString::c_str() const;
0841デフォルトの名無しさん2006/12/04(月) 10:54:29
>835
不可視のコントロールにフォーカスを設定はできなかったはず
開始ボタンとか必要なコントロールでOnKeyDown/Upイベントを定義すればいいんじゃないかな
0842デフォルトの名無しさん2006/12/04(月) 14:02:19
>>840
char c[256];
strcpy(c, Edit1->Text.c_str());

この方が無難じゃない?
0843デフォルトの名無しさん2006/12/04(月) 20:15:27
>>837

char c = Edit1->Text[1];
0844デフォルトの名無しさん2006/12/06(水) 09:49:50
Variant型のExec内で使えるプロパティ、メソッド等のリストを見られる
HP等は無いでしょうか?
0845デフォルトの名無しさん2006/12/17(日) 21:52:38
本日、初めてVCLのTControl::WindowProcに自分関数を設定してみました。
このような具合にです。

TForm1::TForm1(略) {
WindowProc = MyWndProc;
}

TForm1::MyWndProc(Messages::TMessage &Message){
(処理)
}

それでWM_TIMERのwParamを拾おうとしてMessage.WParamを見ると
本来はタイムアウトになったタイマのIDが入っているはずなのですが、
常にゼロが入っています。(´;ω;`)

私の使い方が悪いのでしょうか?
08468452006/12/17(日) 22:09:11
ageちゃえ。
0847デフォルトの名無しさん2006/12/18(月) 09:43:29
>>845
自クラス内でウィンドウプロシージャ弄る場合はWndProcメソッドをオーバーライドしる

void __fastcall TForm1::WndProc(TMessage& message)
{
 if (message.Msg == WM_TIMER)
 {
  OutputDebugString(AnsiString().sprintf("Message: %08X WPARAM: %08X LPARAM: %08X", message.Msg, message.WParam, message.LParam).c_str());
  KillTimer(Handle, message.WParam);
 }
 TForm::WndProc( message);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 SetTimer(Handle, 0x2, 100, NULL);
}

普通に動いているが‥‥
0848デフォルトの名無しさん2006/12/18(月) 18:45:46
ブラウザのIEのツールバーに、戻る、中止、更新、ホーム
とかボタンありますが、マウスのカーソル上に置くと、
なんのボタンか表す文字が出てきます。

こういうのやりたいですがわかりません。
よろしくお願いします。
0849デフォルトの名無しさん2006/12/19(火) 14:35:57
TEditやTButtonコントロールがフォーム上にあるとして、
それのText(Caption)と縦座標のみ異なる複製を動的に作成したいのですが、
スマートなコーディング方法がないでしょうか

一応、newでコントロールを作成してプロパティやイベントを一個一個コピー
していくやりかたではできたのですが、数が多くてステップ数が馬鹿デカくなって困ってます。
0850デフォルトの名無しさん2006/12/19(火) 14:53:18
>>849
まさか、関数化せずに一個一個newしているわけじゃないだろうな。
■ このスレッドは過去ログ倉庫に格納されています