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

C++Builder相談室 Part4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-4あたり。
0653601NGNG
>>652
あああ、やっぱり>>649で解決でいかったですか!
ありがとうございます。
0654デフォルトの名無しさんNGNG
コンポーネントにした方が良いと思ったけどなあ。
0655601NGNG
コンポーネントにすると何かパッケージとかに登録しなければいけないんですよね?
簡単にできるのでしたら、コンポーネントもいいんですが、簡単にできますか?
0656デフォルトの名無しさんNGNG
>>655
あのさあ、簡単に出来ますか? って聞くより 簡単に出来ますって答えられるようになれよ。

とにかく、やってから考えろ!
0657デフォルトの名無しさんNGNG
>>656
わからんから聞いてるんじゃん。
あんたこそ答えられるの?答えられないのに人を批判する事書いてん
じゃないよ(プ
0658601NGNG
>>656
>>657
0659デフォルトの名無しさんNGNG
批判してるつもりはないんだけどね。
まあ、簡単に出来ますかって質問の答えなら
 メッセージフックと同じ程度には簡単。

どう作業すればいいか知りたいなら、>>657が答えてくれるだろう。
0660デフォルトの名無しさんNGNG
>>655
コンポーネントの登録は意外と面倒くさい。でもこれから何度も再利用する
可能性のあるものなら、面倒を厭わずコンポーネント化するといいかも。

例えばTEditを継承したコンポーネントを作るには、コンポーネント-コンポー
ネントの新規作成(TEdit StdCtrls)、クラス名TDragEditと指定する。

Dispatchマクロをオーバーライドする。

だいたいこのような手順でコンポーネント化できると思います。
Delphiサイトのコンポーネントの新規作成のページがそのまま役に立つ
はずです。
0661デフォルトの名無しさんNGNG
スマソ
Dispatchはマクロでなくてメソッドね。
基本コンポーネントクラスの動作を変えたいメソッドをオーバーライドする
という考え方で行けます。
0662デフォルトの名無しさんNGNG
質問です。
C++Builderで不要になった自作コンポーネントをパレットより完全に削除して
しまいたい(非表示にするのではなく)のですが、どうすればいいでしょうか?
0663TECHNGNG
>>662
コンポーネント->パッケージのインストール->
  設計時パッケージ を選んで 編集ボタン

削除ボタン -> 自作コンポを選ぶ
0664デフォルトの名無しさんNGNG
>>663
662です。
ありがとうございます!!無事削除できました。
0665Delフサギコ ◆A6VzDeLphI NGNG
  ∧,,∧  Delphiですまそですが、
 ミ,,゚Д゚彡  CreateCloneコンストラクタを
 ミつ[|lllll]).   実装して、FormCreate時に継承元コンポと
        入れ替えると、コンポインスコいらずに楽ですよ。

constructor TComboBox1.CreateClone(Original: TComboBox);
var
 MemStream: TMemoryStream;
begin
 Create(Original.Owner);
 Self.Parent := Original.Parent;

 MemStream := TMemoryStream.Create;
 try
  MemStream.WriteComponent(Original);
  Original.Free;
  MemStream.Position := 0;
  MemStream.ReadComponent(Self);

 finally
  MemStream.Free;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Free;
ComboBox1 := TComboBox1.CreateClone(ComboBox1);
end;
0666Delフサギコ ◆A6VzDeLphI NGNG
  ∧,,∧  まちがた。ComboBox1.Freeは
 ミ,,゚Д゚彡  必要ないですね。
 ミつ[|lllll]).  
0667債務不履行の名無しさんNGNG
>>665
おっと。こんな方法もあるのか。
Delスレも併読したほうがいいな・・・
0668デフォルトの名無しさんNGNG
なるほど、MemoeyStream(または普通のファイル)に一度親のコンポーネント
の中身を書きだしてから、継承したコンポーネントで読めばいいのか。

その場合、オーバーライドしたメソッドなんかはどうなるんでしょうか?やはり
一度実行しておかないとだめですよね。
0669デフォルトの名無しさんNGNG
TCppWebBrowser* wb1 = new TCppWebBrowser(canvas);
wb1->Width = sizeX;
wb1->Height = sizeY;
wb1->Left = posX;
wb1->Top = posY;
wb1->Visible = true;
wb1->Navigate(Variant(data));
delete wb1;

実行時に、アプリケーション上の任意の位置に
HTMLを表示しようと、上のコードを作成したのですが、
何も表示されません・・・

TCppWebBrowserを設計時に作成すれば大丈夫なのですが
なぜか動的にやると失敗します。
原因が分かる方がいらしたら、どうか教えてください。
よろしくお願いいたします。
0670669NGNG
canvasはmainFormの間違いです。
また、dataにはファイルパスが入っています。

やはり原因が全く分かりません・・・
0671デフォルトの名無しさんNGNG
>>670
Parentプロパティは設定した?
0672デフォルトの名無しさんNGNG
スマソ。
WebBrowserはParentプロパティの意味が違うのね。
今調べています。
0673デフォルトの名無しさんNGNG
>>669
wb1->Width = sizeX;
wb1->Height = sizeY;
を
wb1->ClientWidth = sizeX;
wb1->ClientHeight = sizeY;
にしたら、取り敢えず画面には表示されるようになるね。
後はフォームの上に表示するようにすればいいのか。
0674デフォルトの名無しさんNGNG
>>669
できたよ。
wb1->ParentWindow = Form1->Handle;
wb1->ClientWidth = sizeX;
wb1->ClientHeight = sizeY;

これでやってみて。
0675669NGNG
>>674
おお!凄い!できました!!
本当にありがとうございます!

また何か分からないことが出てきたら、よろしくお願いいたします。
0676デフォルトの名無しさんNGNG
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
また何か分からないことが出てきたら、よろしくお願いいたします。
0677デフォルトの名無しさんNGNG
何か気に障ったようだ。
0678デフォルトの名無しさんNGNG
>>677
いや、多分単に暇なだけ。
0679デフォルトの名無しさんNGNG
まぁこっちは初心者用スレだしな。
馬鹿らしい質問にも答えてあげなくては。
0680デフォルトの名無しさんNGNG
>>676
もう冬休みは終わったんだぞ。
氏ね、厨房
0681超ド素人NGNG
これってありですか?
一応動作するのですが、ウインドサイズを変更して、
元の状態にすると、表示が消えてしまいます。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Canvas->TextOut(360,100,"Test");
}
0682デフォルトの名無しさんNGNG
>>681
ありですよ。
普通は
OnClickでは データを用意して
Form1->Invalidate();
としておいて


フォーム1の OnPaintで 
Form1->Canvas->TextOut(360,100,"Test");
を実行します
0683超ド素人NGNG
>>682
表示消えなくなりました。

ありがとうございました。
がんばって勉強します。
0684山崎渉NGNG
(^^)
0685デフォルトの名無しさんNGNG
スレッドの殺し方がわかりません。

new で作って
スレッドに命令するんですが、
スレッドがずっと実行したままなので止めたいです。
お願いします。
0686デフォルトの名無しさんNGNG
>>685
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
0687デフォルトの名無しさんNGNG
>>685
開発者ガイドの11-6
0688デフォルトの名無しさんNGNG
起動時の引数を取得するためにParamStrを利用しているのですが
この時にパスが「Program Files」などスペースが入っている場合に
ParamStrに格納される文字がわかれてしまうのですが、
これをわかれないようにするにはどうすればいいのでしょうか?
0689デフォルトの名無しさんNGNG
BCB5・learningエディションを持っているのですが、
BCB6・Standerdエディションを買って得することはありますか?
自分はデータベースもLinuxもインターネットアプリも興味ありません。
一応BCB6Proを買う予算はあります。
0690☆NGNG
>>688

Test.exe Program Files

って書いたときに、"Program Files" というファイル/ディレクトリを指定したいのか
"Program" と "Files" という二つのファイル/ディレクトリを指定したいのか、プログラム側からは
判定できないだろ?

空白などの区切り文字を含んだファイル/パス名をパラメータとして渡すときは、
渡す側が "Program Files" と引用符で括ってあげる必要がある。
そうすれば ParamStr に一つの引数として(引用符がはがれた状態で)格納される。
0691デフォルトの名無しさんNGNG
すいません、開発者ガイドってなんですか?
ガチレスです
0692デフォルトの名無しさんNGNG
また割坊かよ
0693デフォルトの名無しさんNGNG
プロファイラとか、そんな機能ってついてるの?
0694デフォルトの名無しさんNGNG
>>691-692
Personal版にはついてないみたいですね。
ヘルプで
「ほかのスレッドによる終了をチェックする」
を検索してください。

簡単に書くと、
「自分で実装しろ」
ちゅーことではないかと。
0695デフォルトの名無しさんNGNG
5のラーニングにはついてたのにね。
0696債務不履行の名無しさんNGNG
開発者ガイドって,参考にしている人いるの?
当方,5,6,7と未だに読んだことがない。
0697デフォルトの名無しさんNGNG
へたな解説本よりよほどいい出来だと思うけど。
0698デフォルトの名無しさんNGNG
アカデミック版のライセンス、もうちょっとどうにかならないかなぁ…
せめてPersonalと同程度に。できればVS.netと同じに。
3月までに変更してくれたら買っちゃうよ。
そうじゃなきゃVSに鞍替え。
0699デフォルトの名無しさんNGNG
TabControlでタブが表示されているところの背景部分を特定色でマスクし、
タブ以外を透過させるフォームを作りたいんですが、タブの背景のCanvas
を塗りつぶすにはどのように書いたらいいでしょうか?
0700699NGNG
すいません。
上の質問の仕方がおかしかったです。
聞きたいことを整理してからもう一回聞きます・・・
0701デフォルトの名無しさんNGNG
SendMessageでなく、Performメソッドを使うメリットっていうのは何なんでしょう?

「SendMessageの呼び出しは同期的です」とか書いてあるのを見ると
SendMessageの方が便利なように思えるのですが。
0702デフォルトの名無しさんNGNG
BCB6にしたけど、DsgnIntf周りの変更が面倒すぎる・・・。
コンポーネントの開発なんてやめたほうがいいのだろうか。
0703デフォルトの名無しさんNGNG
そういや、Delphi6対応でもBuilder6では動かないコンポーネント増えたね
そのせい?
0704デフォルトの名無しさんNGNG
すいません。
1msec毎に命令したいのでTimer使ってるんですが
Timerでは1msec毎にうまく動いていないと思います。
いやいや絶対動いていません。
効率の良い方法キボンヌ
0705デフォルトの名無しさんNGNG
あげまくり
0706デフォルトの名無しさんNGNG
>>704
StrongTimer()を使いなさい。
0707デフォルトの名無しさんNGNG
>>704=705
氏ね
0708デフォルトの名無しさんNGNG
>>704
マジレスです。 Windowsで動かすのは諦めなさい。
シーケンサとか PICマイコンとかを使いなさい。
0709デフォルトの名無しさんNGNG
そうですか…わかりました。
ありがとうございました
0710デフォルトの名無しさんNGNG
>>707
ついでに>>706も。
0711デフォルトの名無しさんNGNG
>>701
オブジェクト指向っぽくなる
0712701NGNG
>>711
ん…、それだけっすか。
ウェブ上にあった例を見てたら、
Synchronizeした関数先でPerformしてたりして、あんまり格好よくないなあなんて思ってました。
スレッド分けてる場合はSendMessage使った方が良いんですかね…?
0713デフォルトの名無しさんNGNG
素朴な質問っす
なんでVC++つかわないのですか?
業界ではVCは糞でBuilderがスタンダードって本当ですか?
VCLはAPIのラッパーですか?
0714デフォルトの名無しさんNGNG
>>713
理由は人それぞれだと思うが、俺の場合はDelphiも使ってるから、
インターフェースが同一なのですぐ移れて使いやすい。

VCが糞というのは言語仕様が糞なだけで、使われてるのはVCの
方が圧倒的に多いだろう。
0715デフォルトの名無しさんNGNG
>>713
VCはM$純正だからってメリットはある。
ただし、MFCよりVCLの方が良い設計であるのは周知の事実。

ところがMFCの方が資料がたくさんあるので
調べものがしやすいというメリットがある。

どっちがいいかは自分で判断しる。
0716715NGNG
カブタか。
俺は両方使っているのでどっちでもいいと思うけど。
0717713NGNG
なるへそ
なんかBuilderがMFCもサポートしてるみたいなんで
IDEが使いやすいほうを選んだほうがよさそな

でも、VCのほうがプログラムを組んでるようなきがしるよ
0718デフォルトの名無しさんNGNG
>>717
私はプログラムを組んでる気がしない方が良いんですけど
BCBで十分その気にさせられてしまいまつ。
0719デフォルトの名無しさんNGNG
11歳の女の子の裸を描画したいんですが、
画像を描画するコントロールは何を使ったらいいですか?

普通にTImageBoxを使って大丈夫ですか?
すじとかもアップで映ってるんで。
0720デフォルトの名無しさんNGNG
>>719
TImage+TScrollBoxで良いよ。
完成したらうpね。
0721デフォルトの名無しさんNGNG
>>719
TImageBox ってのは知らんが、TImage なら、TPaintBox のほうが速い
ことが多い。ただし、OnPaint で再描画するように。
0722デフォルトの名無しさんNGNG
>>720-721
ありがとうございます。
頑張ります!
0723デフォルトの名無しさんNGNG
>>719
TImageに年齢を指定するプロパティのageっていうのがあるんで、
それを11にする。
女の子だからプロパティsexをfemaleにしてShow()すればオケー。

すじをアップにする方法はしらん。教えて(;´Д`)

ビルダーがあるおかげでおかずに困らないよね。
0724デフォルトの名無しさんNGNG
>>723
(・∀・)マヂデスカ!?
0725デフォルトの名無しさんNGNG
既存のフォームの継承ってどうやるんですか?
ファイル→新規作成→その他で現在開いているフォームを選択すると、
もう一つフォームができますが、これとは違うんです。

あるプロジェクトで作ったフォームを利用して、別のプロジェクトを作成
したいのです。
0726デフォルトの名無しさんNGNG
>>725
開発者ガイド
0727デフォルトの名無しさんNGNG
staticな変数 static double x を他ファイルでextern double xとしたら
”外部シンボル'x'が未解決”というエラーメッセージが出てしまうのですが
ナゼなんでしょうか?
0728デフォルトの名無しさんNGNG
長年VC使ってきて、C++Builder使い始めて5日目です。
厨房質問ですいませんが、フォーム、フレーム、ユニット、リポジトリ
という用語の意味がいまいち理解できません。
かいつまんで教えて下さい。
0729デフォルトの名無しさんNGNG
>>728
フォーム
http://www.borland.co.jp/qanda/cbuilder/c0003052.html

フレーム
http://www.borland.co.jp/cppbuilder/cb5/cb5feaben/cb5fb10.html

リポジトリ
http://www.borland.co.jp/qanda/cbuilder/c0002845.html

ユニットは、Delphiが ユニット という概念を持っているので、

ファイル単位に自動的にネームスペースが付き、コンストラクタ・デストラクタも付けられる一種のクラスと思えばいい
0730デフォルトの名無しさんNGNG
インターネットを介さない通信について教えてください。

現在以下のような構成で動かしています。
 [機器]―(RS232C)―[PC:設定ソフト]

今度以下のように遠隔地からでも操作できるようにしたいという要望が出てきました。
 [機器]―(RS232C)―[PC:設定ソフト]―[携帯電話]〜(電話回線)〜[携帯電話]―[PC:設定ソフト]

質問は、BCB5.0で作成した設定ソフトについてです。
インターネットを介するならTServerSocketとTClientSocketでなんとか出来そうなんですが、
今回のはFAXのように、インターネットを介さない通信なのでやり方の検討もつきません。

FAX、通信、電話、等で検索しては見たものの参考になるものが見つけられませんでした。
通信初心者な私に助言等よろしくお願いします。
0731デフォルトの名無しさんNGNG
>>727
staticが激しく正しく機能してるじゃないか。
http://www.google.com/search?q=static+%83%8A%83%93%83P%81%5B%83W
0732組込もしまっせNGNG
>>730
いつの間にか、インターネットを通した方が簡単と思える時代になったんだね。
通信は THandleStream か、 スレッドを作るならCreateFile /ReadFile/WriteFile のAPIで直接
ボーレートの設定とかは CDROMにあるWinAPIの日本語ヘルプで通信の概要を見るといい
問題は携帯電話を通過する個所かな
たぶんUSBモデムを使うのだろうけど、ATコマンドをエミュレートしてくれてるなら
ATDT で電話かけて 電話が繋がったらコマンドは自分で作ればいい
Windows附属のターミナルソフトで試してみればいい
0733デフォルトの名無しさんNGNG
メインのスレッドとは別にもうひとつスレッドを作り、
そのスレッドで
while(1) ShowMessage("TEST");
とかやると、何回目か(回数は不定)で、

プロジェクトhoge.exeがEInvalidOperationクラスの例外を生成しました。
'Canvasに対する描画ができません'

という例外が発生するのですが、何が間違っているのでしょうか?
0734組込もしまっせNGNG
>>733
ShowMessage は関数ですが内部でVCLを呼んでいるので 別スレッドで実行してはいけないようです。

1、Thread,SyncronizeやSendMessage/PostMessage を使ってメインスレッドに処理させる
2、MessageBox を使う

のどちらを使えば良いでしょう
0735デフォルトの名無しさんNGNG
>>733
デッドロック
0736733NGNG
>>734-735
ありがとうございます。
Synchronizeで私のやりたかったことはできそうです。
(MessageBoxがデッドロック発生しないというのもためになりました。)

しかし、マルチスレッドってプログラムがごちゃごちゃしそうですね…
0737733NGNG
あ、もうひとつ聞いてもよろしいでしょうか。

Syncronize,SendMessage,PostMessage
という関数はヘルプで見つかったのですが、Threadというのは無いようでした。
Threadというのも関数なんでしょうか?
0738デフォルトの名無しさんNGNG
>>737
TThread、VCLのクラスです。
0739デフォルトの名無しさんNGNG
俺も>>723を見て12歳の女の子のあそこを表示しようと思ったのだが
ageとかsexなんていうプロパティは見つからないぞ・・・

ググッてもダメだった・・・(鬱
このスレの識者の型、どうやったら小中学生の裸が見れますか?
0740デフォルトの名無しさんNGNG
>>739
MXでもやれば?
0741デフォルトの名無しさんNGNG
>>740
TMXクラスも今検索してみましたが見つかりません(´Д⊂
0742デフォルトの名無しさんNGNG
>>741
Indyの最新版入れてみれ
TIdMxな
0743デフォルトの名無しさんNGNG
やっぱりみんなも子供の裸が好きだったのか・・・ヨカタ
俺だけだと思ってたから変態なのかと悩んでたよ。安心した。
すれ違いスマソ

ちなみに9歳〜13歳が好きです。
0744デフォルトの名無しさんNGNG
エムエークスで、12歳ぐらいの女の子がバイブで弄られて逝って
いる動画がありました。でもスク水着着るとやっぱり子供だね。
声だけ聞くと大人と変わりません。萌え。
0745デフォルトの名無しさんNGNG
>>743
俺も小学生(特に5,6年)が大好きだ。同士よ。
0746デフォルトの名無しさんNGNG
TMediaPlayerでロリ動画を再生して(*゚∀゚)=3ハァハァしているスレは
ここですか?
0747デフォルトの名無しさんNGNG
配布用にexeファイルを作るとどうしても
500kb近くになってしまうんですが
どうすればもっと小さくできますか?
0748デフォルトの名無しさんNGNG
>>747
プロ�cなんて知らんが探してみたら、UPXつーもんがあるらしいで。これでええんか?
http://urikire.hypermart.net//UPXF.htm
0749デフォルトの名無しさんNGNG
>>747
共有RTLDLLを使うオプションでコンパイルしておき、
http://www.csdinc.co.jp/archiver/lib/runtimes.html
http://www.geocities.co.jp/SiliconValley-Bay/8862/razip.html
↑ここからランタイムだけDLしてもらう。

一度ランタイムをDLしてもらえば、以降共有RTLDLLでの配布
が可能になる。
本当はCLWinがC++Builderに対応していればいいのだが、まだ
のようだ。
0750デフォルトの名無しさんNGNG
>>748
へぇ。。そんなものがあるのかぁ。
0751730NGNG
>>732
いただいた返信にあった、ATDTという単語をキーに検索してみたところ下記のHPを見つけました。
ttp://web.kyoto-inet.or.jp/people/quantum/PT/index.html
ここを読んでずいぶん通信が分かってきました。
恥ずかしながら、今までボーレートなどは"COM1"等の通信にのみ関係することだと思ってました。
携帯電話データ通信USBケーブルの箱裏を見てみたところ、
「モデム制御コマンド:ヘイズATコマンド準拠」と書いてありました。
ということで、後はATコマンドとモデムのオープン方法を調べればなんとかなりそうです。
ありがとうございました。
0752デフォルトの名無しさんNGNG
あるプログラムを実行すると無限ループになる可能性があるか否かを判断する
プログラムを作ることはできないと聞いたことがあります。
どなたか、簡単に証明をお願いします
■ このスレッドは過去ログ倉庫に格納されています