C++Builder相談室 Part13
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/02/15 20:58:38過去スレ・関連サイトは>>2-6あたり。
0583デフォルトの名無しさん
2005/04/28(木) 02:33:59いままで立ち上げてUnit1.cppに打ってました。
何もせず実行すると577で書いたエラーがでます。
0584デフォルトの名無しさん
2005/04/28(木) 04:48:43画像が書き込まれるのに、画面上でTImageの中に画像が表示されません。TImageのVisibleはtrueになっています。
表示されない原因として何が考えられるでしょうか?
0585デフォルトの名無しさん
2005/04/28(木) 05:48:28HeightとWidthの値が物凄く小さくなってるとか?
0586デフォルトの名無しさん
2005/04/28(木) 08:01:450587デフォルトの名無しさん
2005/04/28(木) 09:34:27OSはXPです。
0588デフォルトの名無しさん
2005/04/28(木) 11:54:320589デフォルトの名無しさん
2005/04/28(木) 12:12:51>>574
0590デフォルトの名無しさん
2005/04/28(木) 12:43:370591デフォルトの名無しさん
2005/04/28(木) 17:10:49【VCLリファレンスより】
EOutOfResources は,Windows ハンドルを割り当てることができなかったときに送出される例外クラスです。
メモリが十分ある事が関係するとは思えないが?
0592デフォルトの名無しさん
2005/04/28(木) 19:39:51>>574
0593デフォルトの名無しさん
2005/04/29(金) 05:29:490594デフォルトの名無しさん
2005/04/29(金) 12:42:32どこで new DisplayClass() してるの?
Form と生成消滅のタイミングが同じなら
DisplayClass は Form の protected/private メンバにしたほうがよくない?
で、「OnCreate(Form::FormCreate) で new DisplayClass()」してね。
Form のコンストラクタで new したり、
Form に埋め込むのはやめたほうがいいよ。
VCL は普通の C++ じゃないからね。
0596デフォルトの名無しさん
2005/04/29(金) 15:40:54なんでグローバルという気もするけど、そっちは置いといてよさそう?
自分で TBitmap を割り当てているようなコントロールの
Bitmap に LoadPicBitmap を割り当てたとか?
...->Bitmap->Assign(Display.LoadPicBitmap);
↑ほんとはこう書かないといけないのに
...->Bitmap = Display.LoadPicBitmap;
↑こう書いているとか?
どこかのコントロールで二度目のdeleteが発生してる可能性のほうが高いのかな。
0597デフォルトの名無しさん
2005/04/29(金) 16:03:21んん?
Application->Terminate() って、最近書いた記憶ないや
これもなんか変?
>MainForm プロパティを使うと,アプリケーションのメインウィンドウとして動作するフォームを指定できます。メインフォームは,アプリケーションのメインプログラムで最初に作成されるフォームです。メインフォームを閉じるとアプリケーションは終了します。
0598550
2005/04/29(金) 16:56:49復活してしまうのです。
他のハンドラからShowプロパティが呼ばれているのだと思い、destroyedというフラグ変数を
OnCloseハンドラで立て、OnMouseDownなど、コードのある全てのハンドラの先頭に
if(destroyed)return;
と書いてもまだ復活してしまうのです。
なぜなんでしょう?
0599550
2005/04/29(金) 17:03:580600594
2005/04/29(金) 17:47:36コードの書き方がたいへんユニークみたいやなあ
それが原因ぽい
勇気をもってどっかにコード一式上げてみるかぃ
0601550
2005/04/29(金) 18:02:11http://www.borland.co.jp/qanda/delphi/d0000150.html
現在のプログラムはoncreateがそのままメインルーチンに突入する仕組みになっているので。
onClickを契機にメインルーチンに突入するように改造するか…
0602594
2005/04/29(金) 18:38:37OnCreate で失敗すると、Form のロードに失敗したりするからねえ
がんがー
0603デフォルトの名無しさん
2005/04/29(金) 21:14:39コード挙げてみ?
0604550
2005/04/30(土) 00:25:45onClickを契機にメインルーチンを組んだらonCloseでインスタンスを解放できました。
Application->Terminate()も記述しないでプログラムが終了しました。
ただまれに「フォームが復活」することがあったのですが、
onClickからのルーチンを、とにかくonCloseで立てる「destroyed」フラグが
立っていたら作業をすぐやめる、ように書き直したら現象が出なくなりました。
ありがとうございました。
ソース晒しですが、とても恥ずかしい種類のプログラム(要するにエロゲ)なので
ご勘弁下さい…
0605デフォルトの名無しさん
2005/04/30(土) 03:04:480606デフォルトの名無しさん
2005/04/30(土) 08:23:30void __fastcall Sex::Incert(int WomanNo)
{
AnsiString str = "ずぶっ、ぬぷぷぷぷ";
.
.
.
}
0607デフォルトの名無しさん
2005/04/30(土) 08:34:03エロゲで恥ずかしいのはテキストやCGであって
エンジン部分ではないと思うぞ・・・。
まさかソースに直接エロ台詞が書かれてるわけでもあるまいに。
0608デフォルトの名無しさん
2005/04/30(土) 11:16:15見た目が違いますね。(XPスタイル適用時)
VC++ .NETと同じ様にするにはどうすればいい
でしょうか
0609594
2005/04/30(土) 12:04:04それを言うならInsertぢゃ…
>>604
アプリ終了時にオブジェクトがアンロードされる順番が見えていないのでこまっとるのだろう
終了処理に入る前に自分が所有していないオブジェクトへの参照は全部 NULL にしておく
各イベント処理は destroyed を使うのではなくて
if (RefMainForm/* != NULL*/) { 処理; }
みたいにしてくれろ
参照を外す、NULL 放り込むという基本動作が大事だなあ
ぢゃ、そういうことで
0610デフォルトの名無しさん
2005/04/30(土) 18:55:18やってみたら WinMain が未解決になって対処法がわかりません。
#include <windows.h>
#include <tchar.h>
int WINAPI wWinMain(HINSTANCE, HINSTANCE, PTSTR, int)
{
return 0;
}
0611デフォルトの名無しさん
2005/04/30(土) 19:52:47それMFC?
C++BuilderならWideStringやstd::wstringで書きまくるべし
Win9xはごく一部のUnicode関数しか実装していないのよねぇ
0612610
2005/04/30(土) 20:02:59知りたいことだけを言えば、
『エントリポイント関数を、 WinMain から wWinMain にするには
どうすれば良いか?』ということです。
0613デフォルトの名無しさん
2005/04/30(土) 22:25:37プロジェクトオプション→ディレクトリ/条件タブ→条件定義に「_UNICODE」を追加。
又はオプションソースを開いて、コマンドラインオプションに「-WU」を追加。
#include <windows.h>
#include <tchar.h>
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
return 0;
}
0615デフォルトの名無しさん
2005/05/01(日) 00:29:48BCB上で書き換えても反映されないかもしれないから、BCB終了して適当なエディタで。
それでもできなければうpする。
0616610
2005/05/01(日) 00:46:25無理でした。
メイクファイルを作成して、そのc0w32.objを書き直した場合は成功しますが、
手間がかかるので、より簡単な方法があるなら知りたいです。
0617デフォルトの名無しさん
2005/05/01(日) 00:58:200618610
2005/05/01(日) 01:31:58開発環境から UNICODE モードでコンパイルできるようになりました。
thx
0619デフォルトの名無しさん
2005/05/01(日) 09:32:45aを√したい場合と aをcos場合どうすればいいでしょうか?
sqrt(a) cos(a) してもうまくできないです。
0620デフォルトの名無しさん
2005/05/01(日) 09:35:15a=float cos(float a);
でもやってみたのですが、ぜんぜんうまくいきませんでした。
0621デフォルトの名無しさん
2005/05/01(日) 09:54:52現在表示されてるページのURLをEditに表示するには
どうしたらいいのでしょうか。
0622デフォルトの名無しさん
2005/05/01(日) 10:18:54どうすればいいですか?
0623デフォルトの名無しさん
2005/05/01(日) 11:48:54ヘルプを読む。
それでも分からなかったら、
自分の書いたソース晒して何がどう上手くいかなかったのか具体的にかけ。
>>621
TCppWebBrowser::LocationURL
>>622
TMemo::Lines
ってか人に聞く前にヘルプちゃんと読め。
0624デフォルトの名無しさん
2005/05/01(日) 11:57:110625デフォルトの名無しさん
2005/05/01(日) 11:58:06ここで質問することとヘルプを参照することはイコールです。
0626デフォルトの名無しさん
2005/05/01(日) 12:09:22TMonitor::WorkareaRect
0627デフォルトの名無しさん
2005/05/01(日) 12:09:24TRect r;
SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);//rにディスプレイのタスクバーを除く
//デスクトップ領域が代入される
int width = r.Right - r.Left; // Width
int height = r.Bottom - r.Top; // Height
0628624
2005/05/01(日) 12:55:540629デフォルトの名無しさん
2005/05/01(日) 13:21:050630デフォルトの名無しさん
2005/05/01(日) 15:03:05オブジェクトインスペクタでMemo1、Linesプロパティの右の...をクリック。
文字列リストの設定ダイアログで"Memo1"の文字列を削除。
0631デフォルトの名無しさん
2005/05/01(日) 15:53:18っ[BCB9]
0632デフォルトの名無しさん
2005/05/01(日) 17:13:000633デフォルトの名無しさん
2005/05/01(日) 19:30:15どうやるのですか?
0634デフォルトの名無しさん
2005/05/01(日) 21:29:17つけました。
buttonを押すとタブを自動的にひとつ追加することはできたのですが、
新しくできたタブ上にもともとあったコンポーネントと同じものを追加するにはどうすればいいのでしょうか。
(簡単に言うとTabControl上にEditがあり、buttonを押すとタブが1つ増えて、新しくできたそのタブ上にもEditが自動的にできるようにしたい、ということでです。)
0635デフォルトの名無しさん
2005/05/01(日) 21:51:05VCLリファレンスヘルプから引用
>TTabControl は異なるコントロールを格納する
>複数のページを持たない単一のオブジェクトです。
>現在のタブが変わると,タブコントロールは変更を
>反映するために OnChange イベントハンドラで
>直接コントロールの内容を更新しなければなりません。
引用終わり
>新しくできたタブ上にもともとあったコンポーネントと同じものを追加する
不可能。TPageControlのことか?
0636デフォルトの名無しさん
2005/05/01(日) 22:30:43あ、間違えました。ご指摘のとおりTPageです
0637デフォルトの名無しさん
2005/05/01(日) 23:43:04TPageなんてコンポーネントは存在しないぞ。
質問するときゃコンポーネント名くらい正確に書け。
複数のタブシートで同種のコンポーネントを使いたいなら
それこそTTabControlを使えばいい。
TPageControlは動的にページを追加するような使い方はあまりしない。
どうしてもやりたかったら追加したいコンポーネントをnewしてシート上に
配置するしかない。
複数のコンポーネントを扱うならフレームにまとめておけば一発で配置できる。
しかし、TTabControlを使うことを考えたほうが利口だとは思う。
0638デフォルトの名無しさん
2005/05/02(月) 05:26:200639デフォルトの名無しさん
2005/05/02(月) 06:49:08位置はてきとーに調整
0640デフォルトの名無しさん
2005/05/02(月) 06:50:26VisualC++でつくったのよりキビキビしてない気がするんですが
気のせいですか?
0641age
2005/05/02(月) 08:48:490642デフォルトの名無しさん
2005/05/02(月) 09:32:530643デフォルトの名無しさん
2005/05/02(月) 11:34:45パソコンをグレードアップしろ。2GHz未満のCPUなぞ使うな。
0644デフォルトの名無しさん
2005/05/02(月) 12:39:062GHzのCeleronは1.4GHzのCeleronより早いですか?
0645デフォルトの名無しさん
2005/05/02(月) 12:49:19CPU自体の速度はそんなに変わらないだろうが、メモリ周りが明らかに速い。
0646デフォルトの名無しさん
2005/05/02(月) 13:00:08GUIでC++BuilderとVCのスピードの差などない。
本当にC++Builderで作ったのか?
Javaじゃないのか?
0647デフォルトの名無しさん
2005/05/02(月) 13:26:23ワロタ
0648デフォルトの名無しさん
2005/05/02(月) 13:46:25Javaはおそいねぇ。個人的にはこれがクライアントアプリケーションで使われなくなった最大の原因だと思うのだが(言語仕様的には好きなんだけどね)
0649デフォルトの名無しさん
2005/05/02(月) 16:03:110650デフォルトの名無しさん
2005/05/02(月) 16:26:55マンドクセ
0651デフォルトの名無しさん
2005/05/02(月) 16:39:33TListViewを継承して作ったらいいんじゃない?
0652デフォルトの名無しさん
2005/05/02(月) 20:51:460653デフォルトの名無しさん
2005/05/02(月) 20:59:33ProgressBar1->Top = 1;
ProgressBar1->Left = 1;
0654デフォルトの名無しさん
2005/05/02(月) 21:06:09ProgressBar1->Top = 2;
ProgressBar1->Left = 2;
0655デフォルトの名無しさん
2005/05/02(月) 21:35:51はじめはフォームにButton1とMemo1がありますが、実行後に
Button1を押すとMemo2、Memo3・・・を表示することです
0656デフォルトの名無しさん
2005/05/02(月) 21:45:23C++ Builderで、実行時にTEditなどのコントロールを動的に作成するには、以下のようにします。
Parentを必ず設定する必要があります。
TEdit *DynamicEdit = new TEdit(Form1);
DynamicEdit->Parent = Form1;
DynamicEdit->Name = "DynamicCreateTEdit";
DynamicEdit->Left = 100;
DynamicEdit->Top = 100;
0657デフォルトの名無しさん
2005/05/02(月) 21:47:20コンポーネントを動的に作成するにはどうすればいいのでしょうか?
下記のように記述すれば可能です。
注意として必ず,Parentプロパティに親となるコンポーネント(Form,Panel等)を 指定するようにしてください。
これにより,不特定多数のコンポーネントを使用したり,配列でコンポーネントをコ ントロールできるようになります。
//ユニットのヘッダのprivateに以下の一行を記述
TLabel *labels[9];
//以下の記述をボタンのクリック時のイベントに記述
//また,Form1にPanel1というパネルを事前にはっておいてください
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i=0;i<=9;i++)
{
labels[i]=new TLabel(Form1);
labels[i]->Top=i*20;
labels[i]->Caption="Label"+IntToStr(i);
labels[i]->Parent=Panel1;
}
}
0658デフォルトの名無しさん
2005/05/02(月) 21:49:12こういうヤツの作り方ってどうやるんですかね?
0659デフォルトの名無しさん
2005/05/02(月) 21:58:320660デフォルトの名無しさん
2005/05/02(月) 22:46:47動的に増やしたいのですが、TCppWebBrowserってしたらエラーがでたのですが・・
0661デフォルトの名無しさん
2005/05/02(月) 23:06:170662デフォルトの名無しさん
2005/05/02(月) 23:10:04TCppWebBrowser *CppWebBrowser = new TCppWebBrowser(this);
だったのを
TCppWebBrowser *CppWebBrowser = new TCppWebBrowser(Owner);
0663デフォルトの名無しさん
2005/05/03(火) 00:54:51TCppWebBrowserのParentの設定は、CppWebBrowser1->TOleControl::Parent = 〜
ってしないとだめ。
0664デフォルトの名無しさん
2005/05/03(火) 00:56:40エラーが出たら、最低限エラーメッセージを書こうぜ。
0665デフォルトの名無しさん
2005/05/03(火) 01:06:531のコンポーネントが前に出っ放し。
1のコンポーネントが邪魔で2のコンポーネントが
見えない・・・・・。
誰か助けて・・・・
0666デフォルトの名無しさん
2005/05/03(火) 01:28:50シートの切り替えはどうやってる?
0667デフォルトの名無しさん
2005/05/03(火) 08:18:53PageControl上にCppWebBrowserを乗っけて、実行後
新しいウィンドウで開くを選ぶと別のタブが自動的にできるように
してある。ただ、新しいタブ上のCppWebBrowserが隠れて見えない。
それに新しいタブ上のCppWebBrowserで新しいウィンドウで開くを選ぶと
IEが起動してしまいます・・・。
0668デフォルトの名無しさん
2005/05/03(火) 08:29:06CppWebBrowser1を表示用のブラウザ、
CppWebBrowser2を、
表示されないブラウザ用とします。(CppWebBrowser2の
Width, Height を0にしておきます。)
そして、CppWebBrowser1のOnNewWindow2で、
新しいページを一度CppWebBrowser2に表示させ、
そのURLを所得して、
CppWebBrowser1からNavigateすることで、
新しいウィンドウを開かずに、表示することが
できると思います。
コードだと
void __fastcall TForm1::CppWebBrowser1NewWindow2(TObject *Sender,
LPDISPATCH *ppDisp, TOLEBOOL *Cancel)
{
*ppDisp = CppWebBrowser2->Application;
}
//------------------------------------------------------------------------ - --
void __fastcall TForm1::CppWebBrowser2NavigateComplete2(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
{
CppWebBrowser1->Navigate(CppWebBrowser2->LocationURL);
}
という感じになります。
他にも方法はいろいろあるのかも知れません。
0669デフォルトの名無しさん
2005/05/03(火) 11:36:36(´-`).。oO(ただ単にActivePageが切り替わってないだけじゃ…)
0670デフォルトの名無しさん
2005/05/03(火) 12:01:46>>669
ありがとうございます。しかしなぜかできませんでした。
たしかに、ActivePageを切り替えてるのですが・・・
タブブラウザ風にしたいのです。
void __fastcall TForm1::CppWebBrowser1NewWindow2(TObject *Sender,
LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
TTabSheet *TabSheet = new TTabSheet( this );
TabSheet->PageControl = PageControl1;
TabSheet->Parent=PageControl1;
PageControl1->ActivePage = TabSheet;
TCppWebBrowser *CppWebBrowser=new TCppWebBrowser(this);
CppWebBrowser->TOleControl::Parent=TabSheet;
CppWebBrowser->Align=alClient;
*ppDisp = CppWebBrowser->Application;
としたのですが・・。
なぜかCppWebBrowser1が常に一番先頭に出てきてしまいます。
新しいタブ上のCppWebBrowserはCppWebBrowser1でほとんど
隠れてしまいますが、端っこだけ見れます。そこで
新しいウィンドウで開くを選ぶと IEが起動してしまうのですけども・・。
どうもCppWebBrowser1以外は新しいウィンドウで開くを選ぶと IEが起動
してしまいます。
0671デフォルトの名無しさん
2005/05/03(火) 12:28:49うちでは隠れなかったので、隠れるというのは分からないけど、
IEが起動するのは、単に新しく作ったCppWebBrowserのOnNewWindow2イベントを設定してないからでは?
0672デフォルトの名無しさん
2005/05/03(火) 13:17:45動的に作ったCppWebBrowserのOnNewWindow2イベントの設定ってどうやれば
いいのですか?CppWebBrowserは実行前は1つしかありません・・・
0673デフォルトの名無しさん
2005/05/03(火) 13:22:49CppWebBrowser->OnNewWindow2 = CppWebBrowser1NewWindow2;
ってすればいい。
0674デフォルトの名無しさん
2005/05/03(火) 13:33:40やっとできました。ありがとうございます!
0675デフォルトの名無しさん
2005/05/03(火) 14:04:06「フォーム作成中にエラーが発生しました。継承元の'TOKBottomDlg'がみつかりません」とのこと。
必要なダイアローグ、表示するにはどうすればいいのでしょう?
0676デフォルトの名無しさん
2005/05/03(火) 14:04:35「フォーム作成中にエラーが発生しました。継承元の'TOKBottomDlg'がみつかりません」とのこと。
必要なダイアローグ、表示するにはどうすればいいのでしょう?
0677デフォルトの名無しさん
2005/05/03(火) 14:44:16例えばパネルの大きさを100*100にしたいときに、メインフォームの大きさはどのように
して計算すればよいのでしょうか?
0678デフォルトの名無しさん
2005/05/03(火) 15:22:32GetDeviceCaps(Canvas->Handle, HORZRES);
0679デフォルトの名無しさん
2005/05/03(火) 15:24:05{
Memo1->Lines->Clear();
Memo1->Lines->Add(Format("物理画面の幅 = %d mm",
ARRAYOFCONST(((int)GetDeviceCaps(Canvas->Handle, HORZSIZE)))));
Memo1->Lines->Add(Format("物理画面の高さ = %d mm",
ARRAYOFCONST(((int)GetDeviceCaps(Canvas->Handle, VERTSIZE)))));
Memo1->Lines->Add(Format("ディスプレイの幅 = %d pixels",
ARRAYOFCONST(((int)GetDeviceCaps(Canvas->Handle, HORZRES)))));
Memo1->Lines->Add(Format("ディスプレイの高さ = %d pixels",
ARRAYOFCONST(((int)GetDeviceCaps(Canvas->Handle, VERTRES)))));
Memo1->Lines->Add(Format("各ピクセルのビットの数 = %d",
ARRAYOFCONST(((int)GetDeviceCaps(Canvas->Handle, BITSPIXEL)))));
}
0680デフォルトの名無しさん
2005/05/03(火) 16:40:19フォームのClientWidthとClientHeightを100にすれば勝手に必要な大きさになるけど、
そうじゃなくて、ClientWidthとかを設定しないで、計算で求めたいということ?
0681デフォルトの名無しさん
2005/05/03(火) 19:20:30ProgressBar1->Top = 2;
ProgressBar1->Left = 2;
0682デフォルトの名無しさん
2005/05/04(水) 04:09:57■ このスレッドは過去ログ倉庫に格納されています