C++Builder相談室 Part14
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/05/19(木) 08:56:18過去スレ・関連サイトは>>2-6あたり。
0653デフォルトの名無しさん
2005/06/30(木) 00:04:54MyDocHandlerクラスの定義内で、ShowContextMenuもインラインで書いてるんだと思うけど、
自分がコンパイラだと思って、上から順にコードを辿って
Form1->PopupMenu1->...
ってとこに来た時に、それまでにForm1という文字を見たかどうか考えれば分かるんじゃまいか。
0654デフォルトの名無しさん
2005/06/30(木) 00:11:06>>651の書式だと
ShowContextMenu内のPopupMenu1->Popupで
PopupMenu1が未定義といわれます
class TForm1の後にclass MyDocHandler :public IDocHostUIHandler
とすると
private:// ユーザー宣言
MyDocHandler* dochandler;
が未定義と言われます
0655650
2005/06/30(木) 00:12:12あ、それでよかったんですね。盲点でした。
ありがとうございました。
それともうひとつ、Image1からOnMouswWheelイベントを発生させることはできないのでしょうか
0656デフォルトの名無しさん
2005/06/30(木) 00:12:18Form1::Button1のOnClickイベント内でForm2->OnMouseDownを直接呼び出したら良いやン。
イベントハンドラも関数だからそのまま呼び出せるよ。必要な引数だけ適当に按配すると。
0657デフォルトの名無しさん
2005/06/30(木) 00:32:09そういう時は、ShowContextMenuをインライン定義しないで、ソースのほうに書くとか、
TForm1の後にMyDocHandlerを定義するなら、TForm1の定義の前に、
class MyDocHandler;
と、前方宣言しておくというお決まりのテクニックを使うんだよ。
0658デフォルトの名無しさん
2005/06/30(木) 01:24:08TImageは
TWinControlから派生してないから直接はむりだねえ
TWinControlから派生している
TCustomControlから自前で派生クラスのコントロールをつくって
Image1->Picture->BitmapをこのクラスのCanvasにPaint()でDraw()してやる
この自前のコントロールでならOnMouswWheelイベントを処理できるのでは?
こうすれば見かけ上TImageでOnMouswWheelイベントを処理したように見える
0659デフォルトの名無しさん
2005/06/30(木) 04:05:55ドッキングされているフォームの一つを任意の幅に変更したいのですが
どうやれば良いのですか?
WidthやLRDockWidthを色々触っているんだけど、どうも上手く行かない。
DockManager->LoadFromStream( ) で復元は出来ているのですが
最初に起動した際、保存しているファイルがないのでLoadFromStream( )が使えず
丁度幅が50%になっているのを何とかしたいのです。
0660デフォルトの名無しさん
2005/06/30(木) 05:00:38>最初に起動した際、保存しているファイルがない
これだけが問題なら
生でAPI使うことになるけど
リソースにユーザ定義データとして初期値を格納しておくってのはダメカナ?
0661654
2005/06/30(木) 06:37:03その方法で試したところ見事オリジナルの方を表示する
ことが出来ました
まだC++初めて一週間のど素人に優しく教えていただき
有難うございました
HPで公開させていただきます
0662659
2005/06/30(木) 08:59:44え、それは普通にプログラム側から幅を変更する方法がないということ?
私が知らないだけで、Form->Width = 200; 程手軽ではないとしても
幅を制御する方法があるものと思ってたのですが。
0663デフォルトの名無しさん
2005/06/30(木) 15:10:090664デフォルトの名無しさん
2005/06/30(木) 17:50:13BCB用の設定とかあるけど、なぜかうまくいかない。
0665デフォルトの名無しさん
2005/06/30(木) 19:52:40プログラムってどこかにありますか?探しても見当たらなくて…
0666デフォルトの名無しさん
2005/06/30(木) 20:04:34俺はここ見た
http://www.kmonos.net/alang/boost/install.html
0667デフォルトの名無しさん
2005/07/01(金) 20:00:09Length(WideString('あいうえおABCDE'))は10です。
0668デフォルトの名無しさん
2005/07/01(金) 22:21:33Cって *char で いちいちメモリ確保しないといけないでしょ。
vcl使えるのでありそうなきもするのですが
C++は どうなんでしょうか
delphiと同じ stringみたいなのがあるのでしょうか?
0669デフォルトの名無しさん
2005/07/01(金) 22:22:45Cよりはずっとましだ。
C++標準ライブラリのstd::stringやBCBにはAnsiStringがある。
0670デフォルトの名無しさん
2005/07/01(金) 22:30:30お返事ありがとうございます
あったんですか。。。
Cにはないから長年Delphi2つかってたんですけど・・・
じゃあ、次のDelphiからC++Builderが統合されるので
次のバージョンからDelphi言語やめてC++で作っていこうと思います♪
0671デフォルトの名無しさん
2005/07/01(金) 22:48:39http://www.geocities.co.jp/SiliconValley/7201/tech.html#AnsiString
AnsiString s=" abc_ABC_z ";(前後にスペースが一つずつ入っています) に 対して、次のような操作ができます。
・n番目の文字を取り出す(ただし、s[1]が一番前の文字) s[2] → "a"
・大文字小文字を区別して比較する s.AnsiCompare(" abc_abc_z ") → 1(大 きい。小さいときは-1、等しいときは0)
・大文字小文字を区別せずに比較する s.AnsiCompareIC(" abc_abc_z ") → 0(等しい。大きいときは1、等しいときは0)
・一番最後の文字を取り出す s.AnsiLastChar() → " "(スペース)
・char *へ代入する char *str=s.c_str();
0672デフォルトの名無しさん
2005/07/01(金) 22:57:56ありがとうございます。
忘れないようにHDDに.txtで保存しました。
0673デフォルトの名無しさん
2005/07/02(土) 00:14:03それに加えてSTL他の標準ライブラリが使える点は有利だな。
その分覚えるの大変だけど。
0674デフォルトの名無しさん
2005/07/02(土) 09:42:35↑がないのが気に入らない
>>670
ちなみにAnsiStringとObjectPascalのstring型はメモリ上の互換性がある。
[]演算子でのアクセスもObjectPascal互換で一文字目が[1] (std::stringやchar[]は[0])
0675デフォルトの名無しさん
2005/07/02(土) 13:32:590676デフォルトの名無しさん
2005/07/02(土) 14:16:000677デフォルトの名無しさん
2005/07/03(日) 01:35:11使ってるはずのOS関連のDLLに対応するlibファイルを書かなくても
リンクできてしまいます(オプションは-Wと-wだけです)が、
bcc32がリンカを呼び出すときに勝手に追加してくれてるのでしょうか?
0678677
2005/07/03(日) 01:37:050679デフォルトの名無しさん
2005/07/03(日) 08:44:43ヘルプにはこんなことが書いてある。
デフォルトでは,BCC32 は C0X32.OBJ,CW32MT.LIB,および IMPORT32.LIB(それぞれ初期化モジュール,ランタイムライブラリ,および Windows インポートライブラリ)を使って ILINK32 を呼び出します。
0680デフォルトの名無しさん
2005/07/03(日) 11:18:51kernel32、user32、gdi32あたりの基本的なものは自動リンク。
winmm.libとかはリンクされない。
0681デフォルトの名無しさん
2005/07/03(日) 18:59:48賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。
プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/
理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
0682デフォルトの名無しさん
2005/07/03(日) 23:10:250684デフォルトの名無しさん
2005/07/04(月) 04:29:24ここは、平和だからわからん。
0685デフォルトの名無しさん
2005/07/04(月) 06:25:02気持ちが荒れてる人も少ないんじゃないか?
0686デフォルトの名無しさん
2005/07/04(月) 06:31:260687デフォルトの名無しさん
2005/07/04(月) 09:07:590688デフォルトの名無しさん
2005/07/04(月) 09:28:560689デフォルトの名無しさん
2005/07/04(月) 09:32:420690デフォルトの名無しさん
2005/07/04(月) 09:35:480691デフォルトの名無しさん
2005/07/04(月) 14:15:00ようになりますた。
0692デフォルトの名無しさん
2005/07/05(火) 02:28:18買ったけど
BCB3版のDB活用ガイドに比べて内容薄くなってるな...
参照項目さえろくすっぽ載っってない
ダイアログエディタについてもなにも載ってない
QuickReportの参考書としてしか使えん
0693デフォルトの名無しさん
2005/07/05(火) 02:36:460694デフォルトの名無しさん
2005/07/05(火) 02:43:53ヘルプを読み解くのに根性いる時あるもんなぁ。(しみじみ)
0695デフォルトの名無しさん
2005/07/05(火) 21:15:26するときのカチカチいう音が気に入りません
どうやったら消せますか?
0696デフォルトの名無しさん
2005/07/05(火) 22:47:10専用ブラウザがやってるように、直接描画するしかないんじゃない?
http://www.monazilla.org/
ここにやり方かいてある。
0697デフォルトの名無しさん
2005/07/05(火) 22:55:57http://homepage2.nifty.com/winfaq/c/hints.html#181
0699デフォルトの名無しさん
2005/07/06(水) 02:16:52資料室にあるサンプルコード。
でも、Delphiのコードだね。
C++ Builderで作られた専用ブラウザってあったと思うけど、何だっけな?
調べて作者に聞いてみるとか?
0700デフォルトの名無しさん
2005/07/06(水) 10:01:16__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { MozillaBrowser1->GoHome
(); } //---------------------------------------------------------------------------
void __fastcall TForm1::ToolButton3Click(TObject *Sender) ...
homepage2.nifty.com/spw/tips/Gecko.html
0701デフォルトの名無しさん
2005/07/06(水) 10:59:55どうやったらできるでしょうか?
0702デフォルトの名無しさん
2005/07/06(水) 11:26:34・・・??
「指定URLをブラウザで開く」の間違いなら ShellExecute 使え。
0704デフォルトの名無しさん
2005/07/06(水) 13:39:05ちみの質問がさっぱり解りませんでした。
ソフトのことよく理解してないんじゃない?
0705デフォルトの名無しさん
2005/07/06(水) 14:23:450706デフォルトの名無しさん
2005/07/06(水) 14:42:59そうか?俺解ったぞ。
0707デフォルトの名無しさん
2005/07/06(水) 17:28:28俺もわかったけど。馬鹿?
0708デフォルトの名無しさん
2005/07/06(水) 18:21:46さっぱり解らないのに、どうしてソフトのこと理解していないって
解るんだ?
ちみの言ってることが、さっぱり解らないな。
0709デフォルトの名無しさん
2005/07/06(水) 18:35:44カコイイ
0710デフォルトの名無しさん
2005/07/06(水) 21:57:350711デフォルトの名無しさん
2005/07/06(水) 22:29:490712デフォルトの名無しさん
2005/07/07(木) 02:03:17#include <windows>
int main(int argc, char *argv[])
{
// 秀丸を起動する
ShellExecute(NULL, "open", "C:\\Program Files\\Hidemaru\\Hidemaru.exe", NULL, NULL, SW_SHOW);
// 秀丸を起動してD:\TEST\Sample\ReadMe.txtを開く
ShellExecute(NULL, "open", "C:\\Program Files\\Hidemaru\\Hidemaru.exe",
"D:\\TEST\\Sample\\ReadMe.txt", NULL, SW_SHOW);
// http://www.tagu.info/をブラウザで開く
ShellExecute(NULL, "open", "http://www.tagu.info/", NULL, NULL, SW_SHOW);
return 0;
}
Windows APIのShellExecute()は実行したコマンドが終了しなくとも次の行に進んでしまう。
上の例だと次々に秀丸二つとブラウザが一つ開いてしまう。
0713デフォルトの名無しさん
2005/07/07(木) 03:13:34ShellExecuteの解説か? それとも質問?
起動した秀丸の終了を待ちたいなら、
CreateProcess()
WaitForSingleObject()
CloseHandle()
の3点セットAPIが使えるな。
0714デフォルトの名無しさん
2005/07/07(木) 05:21:170715デフォルトの名無しさん
2005/07/08(金) 01:16:280716デフォルトの名無しさん
2005/07/08(金) 01:27:03http://homepage3.nifty.com/flare/pc/bcb/data/076.html
簡単なものであれば、「SelectDirectory()」を使うという手がある。
欠点としては、ネットワークドライブを認識できない問題がある。
//
フォルダの選択ダイアログを表示するには?
Windows API SHBrowseForFolder()を使用します。
http://www.borland.co.jp/qanda/cbuilder/c0005004.html
#define NO_WIN32_LEAN_AND_MEAN
0717デフォルトの名無しさん
2005/07/08(金) 01:30:080718デフォルトの名無しさん
2005/07/08(金) 01:38:050719715
2005/07/08(金) 01:44:40紹介いただいた方法で試したのですが、オプションで実行時パッケージを使って構築のチェックをはずすと
コンパイルできなくなります。
単体で配布したいのですが、どうしたらいいですか?
0720デフォルトの名無しさん
2005/07/08(金) 01:47:55Unit1.hに
#include <FileCtrl.hpp> //追加
0722デフォルトの名無しさん
2005/07/08(金) 09:14:14http://homepage3.nifty.com/endou/tips/03/tips29.htm
使用する関 数、クラス
OpenGL
API
OpenGL
ポイント
TFormのCanvasを指定する
Windows98以降で利用できるはずであるが、DLLの関係から か、OSの状況によってはうまく動かないこともある
出典、参考
OpenGLをDelphiで使う(http://nakg.hp.infoseek.co.jp/ opengl/)
「OpenGL 3Dプログラミング」CQ出版 酒井幸市,2000
OpenGLは3Dではデファクトスタンダードな(?)グラフィックライブラリーです。ただ し、利用するためにはちょっとやかいです。
ホームページと本ににあったのを自分なりに書き直してみました。
OpenGLを利用するためのヘッダファイルUOpengl.hとルーチンUOpenGL.cpp
この2つのファイルをプロジェクトに追加して利用します。
利用例
0723デフォルトの名無しさん
2005/07/08(金) 14:45:47一バイトとカウントされてしまうんでしょうか・・・
Memo1の内容
↓
Memo1あいうえお
"いうえお"を選択状態にして
ShowMessage(Memo1->SelText);
とすると "・い"
と表示されてしまいますorz
0724デフォルトの名無しさん
2005/07/08(金) 15:00:12再現できまへんな。ちゃんと"いうえお"って表示される。
0725デフォルトの名無しさん
2005/07/08(金) 16:45:170726デフォルトの名無しさん
2005/07/08(金) 17:09:070727デフォルトの名無しさん
2005/07/08(金) 19:48:19Eidt1->Textに入力された文字列(1バイト2バイト混在)が64バイトを超えるとカットされるようにしたいのですが、
どうしたらいいでしょうか?
ByteToCharLenで丸めた長さの文字数が帰ってくるかなと思ったんですが、うまくいかず困ってます。
0728デフォルトの名無しさん
2005/07/08(金) 19:57:26MaxLength
0729727
2005/07/08(金) 20:06:34すいません、書き忘れましたが、64バイトに丸める文字列は、Edit1に入力される以外に直接ストリームから入力
されることもあるため、こちらからも64バイトに丸める必要があるため、特定のコンポーネントにあるメソッドではなく
普通の関数の範囲で処理したいのです。
0730デフォルトの名無しさん
2005/07/08(金) 20:14:24情報を小出しにするな。
その場合は、自前で丸めろ。
0731デフォルトの名無しさん
2005/07/08(金) 22:05:02TQuery使って IDE環境からSQL文を何度も実行してると
メモリエラー起こしてBDEが起動しなくなるよね...
もはや個人的には仕様かと思っているんだが
むかつく
0733デフォルトの名無しさん
2005/07/09(土) 00:12:190734732
2005/07/09(土) 12:37:56ttp://www.delphi-gems.com/supplement/download.php?ID=55
の下のほうの
WindowsXP manifest resource
これをプロジェクトからはずした結果問題が解決しました。
ほかにXPスタイルを適用するための方法はありませんか?
exeと同じディレクトリにmanifestをおくやり方ではなく
リソースに組み込みたいです。
0735734
2005/07/09(土) 12:48:49XPスタイルを適用するとどんな方法であれ
>>723のような現象が起こってしまいます。
この問題を解消する方法はありませんか?
0736デフォルトの名無しさん
2005/07/10(日) 02:50:35http://www.h3.dion.ne.jp/~hanagex/dev/contents/xp/implant.html
http://www.namakoworld.com/lowtech/d6tips/dtips4.htm
0737デフォルトの名無しさん
2005/07/10(日) 11:18:49Borlandの社長兼CEO、デイル・フラー氏が降板した。
同社4〜6月期決算の最終損益は1株当たり24〜26ドルの赤字。
http://www.itmedia.co.jp/news/articles/0507/09/news015.html
0738デフォルトの名無しさん
2005/07/10(日) 11:24:25#define CONTROL_PANEL_RESOURCE_ID 123
#define RT_MANIFEST 24
0739デフォルトの名無しさん
2005/07/10(日) 15:22:17VS2005出たら買っちゃうことになるよな。
Builderの新バージョンがVS2005より先に出れば、Builderの新バージョンっていうか統合されたバージョン買うだろうけど
その逆ならVS2005買うだろうし、2本もコンパイラ買う金ないしな。
0740デフォルトの名無しさん
2005/07/11(月) 23:39:39実現したいことは、・Form1のコンストラクタにおける起動準備で何か問題が生じた時に、フォームが一瞬たりとも表示されないように終了する。
・コマンドライン引数があるときにはForm1のメソッドをいろいろと使いつつ特定の処理をして、フォームを一瞬たりとも表示されないように終了する。・・・ということです。
そこで、問題がおきた時(特定の処理が終わった時)にはフラグを立ててApplication->Run();を実行しないようにすることで、とりあえず目的は達成できました。
しかし、Application->Run();を削ることによって、終了時のいろいろな後始末がきちんとおこなわれているのか不安になりました。
調べたところ、Application->Run();はメッセージループであるからメッセージの処理が必要なければ削ってもよいとの指摘もあれば、実際は暗黙に作られるApllicationウィンドウやFromMainのウィンドウを
破棄するためにWM_QUITやWM_CLOSEのメッセージ処理が必要との指摘もあり、結論はどうなったのかわかりませんでした。
長文で申し訳ありませんが、おわかりになる方はご教授お願いします。
0741デフォルトの名無しさん
2005/07/12(火) 00:01:06メインフォームもApplicationもちゃんとデストラクタ呼ばれるし、
CodeGuardも何も報告しないから、大丈夫でない?
0742740
2005/07/12(火) 00:34:38早速のご返答ありがとうございます。
メインフォームやApplicationのデストラクタは両方ともしっかりと呼ばれるのですね。(たしかにFormDestroyは呼ばれておりました。)
とりあえず問題なしと考えて良さそうですかね。
ただ、Application->Run();内での処理がトリガーとなって破棄の手順が開始されると思い込んでいたのですが、Run()なしでもOKとなると、どこがトリガーとなっているか謎ですね。
Runのあとはexitくらいしかない気がするんですが。理解できてないので変なことを行っているかもしれません(^^;
0743デフォルトの名無しさん
2005/07/12(火) 00:55:48WinMainの出口にブレークポイントを置いてステップ実行していけば、
Application.Freeやその他の終了処理にたどり着くよ。
0744デフォルトの名無しさん
2005/07/12(火) 00:56:360745デフォルトの名無しさん
2005/07/12(火) 12:21:05単にウィンドウを表示させたくないのであれば、
ウィンドウスタイルを変えればいいんジャマイカ?
0746デフォルトの名無しさん
2005/07/12(火) 14:26:190747デフォルトの名無しさん
2005/07/12(火) 15:08:310748デフォルトの名無しさん
2005/07/12(火) 15:20:560749デフォルトの名無しさん
2005/07/12(火) 15:23:05セルが編集されたかどうか と書きたかったんですがね、
まあ言おうとしている意図もわからず言葉の間違いだけを指摘してる奴には何の期待もしてないけどね
0750デフォルトの名無しさん
2005/07/12(火) 15:24:06ここから煽りタイムが始まるわけですね。わかってるよ
↓
0751デフォルトの名無しさん
2005/07/12(火) 15:30:130752デフォルトの名無しさん
2005/07/12(火) 16:16:13まあ言おうとしている意図もわからず言葉の間違いだけを指摘してるコンパイラには何の期待もしてないけどね(藁
■ このスレッドは過去ログ倉庫に格納されています