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

C++Builder相談室 Part4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-4あたり。
0597デフォルトの名無しさんNGNG
とある情報によると、美咲タンの個人HPがあるそうですね。
おしえてくらはい。
0598デフォルトの名無しさんNGNG
IP記録?
例えば、ライブドアや無料アカウントを作れるプロバイダー
からなら、IPを記録されても大丈夫じゃないかな?
まぁ犯罪予告するわけじゃないけど、ムカつく会社とかの
書き込みなら、無料プロバイダとか。全くダメになるとは限らないよ
アメリカの無料プロバイダから 2ch.netにアクセスしたってOKだし
(フュージョンコムなら1分15円 YAHOOBBなら3分7.5円
ダイヤルアップはできるかな〜?)
灰色の公衆電話からノートパソコンで電話線使ってやる方法も
あるしね。
0599デフォルトの名無しさんNGNG
ひろゆきツマンネー!!
0600デフォルトの名無しさんNGNG
最後の記念カキコ
0601デフォルトの名無しさんNGNG
こんにちは。
TEditのみにD&Dするにはどうすればいいのでしょうか?
よろしくお願いします。
0602デフォルトの名無しさんNGNG
IBXはSQLDialect3に対応していますか?
BCB5のEntなんですが。
0603デフォルトの名無しさんNGNG
>>601
TEditにOnDragDropイベントハンドラを書く。

例えばフォーム内のLabelからEditにD&Dするには

void __fastcall TForm1::Edit1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Accept = Source->ClassNameIs("TLabel");
}

void __fastcall TForm1::Edit1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
if (Sender->ClassNameIs("TEdit") && Source->ClassNameIs("TLabel"))
{
TEdit *DestList = (TEdit *)Sender;
DestList->Text = ((TLabel *)Source)->Caption;
}
}
0604デフォルトの名無しさんNGNG
>>601
http://pc3.2ch.net/test/read.cgi/tech/969458279/142-
0605デフォルトの名無しさんNGNG
>>604
DAT落ち&倉庫に無い。
0606デフォルトの名無しさんNGNG
私も知りたいので、どの方法が一番良いのか教えてください…


142 名前:名無しさん@お腹いっぱい。[] 投稿日:2000/11/04(土) 06:38
エクスプローラからDrag&Dropでファイル名を渡したいのですが
以下の点でハマってます。

1.特定のコンポーネント(例:TListView)のみにD&Dを許可するには?

Form全体にD&Dする方法や、Drop時のマウスカーソル座標によって
D&D可能なコンポーネントを判別する方法は出来たのですが…
無関係のコンポーネント上で、マウスカーソルを
「Dropできますよ形状」に変化させたくないのです <誤操作の元だし…

145 名前:ぴか虫[] 投稿日:2000/11/05(日) 01:44
    ☆ぴかっ
 /)_/)  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,’ー’) < コンポーネントを継承してメッセージをマップ! でできるかも?(試してない)>>142(1)☆
_( U U)  \____________________

147 名前:名無しさん@優しい人[sage] 投稿日:2000/11/05(日) 01:57
>>142
そのコンポーネントやらに対して、
::DragAcceptFiles(h, FALSE);
じゃだめなの?

0607つづきNGNG
149 名前:142[] 投稿日:2000/11/05(日) 04:11
レスありがとうございます。

>145
実はまだ、継承とか派生とかそのへん勉強中なので
よくわかってませんが、頑張ってみます。

>147
実はそれを呼ぶタイミング(?)がわかりませんで… (T▽T)
Formの時はOnCreateイベントで呼んでるんですが…
そのコンポーネントのコンストラクタ関数(?)とやらで
呼んでしまってもいいものなのでしょうか。
っていうか、実験してみたほうが早そうですね。やってみます。


150 名前:名無しさん@お腹いっぱい。[] 投稿日:2000/11/05(日) 07:14
>149
使いやすさと安全を期待するなら
TListViewを継承してドラッグの受けつけの禁止許可の
メソッドをつくってしまいましょう。
プロパティにしてしまえば設計時にも設定できて便利かも‥
0608デフォルトの名無しさんNGNG
C++Builder6を使っています。

今までexeファイルを右クリックするとコンテキストメニューに「デバッグ」という
項目があったのですが、今回全部入れ直してみたら、「デバッグ」と表示され
ず、デバッガを起動できません。

どうやればデバッガ起動ができるようになりますか?
0609デフォルトの名無しさんNGNG
>類似発言を連呼すればグレーゾーンに入りますね。
で、何でそれをお前が決めるんだ??
0610デフォルトの名無しさんNGNG
288 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:56 ID:rLfxQ17l
>厨房板は本当に閉鎖なのか?
初耳。
0611デフォルトの名無しさんNGNG
>ID:A+3kp3mQ

判ったからネレw
0612デフォルトの名無しさんNGNG
>あめぞうより2ちゃんのほうが質が良かった時代
 そんな時代はありませんでしたが、何か?
0613デフォルトの名無しさんNGNG
( ´,_ゝ`)プッ
糞荒らしなんとか言ってみろや(藁
0614デフォルトの名無しさんNGNG
ループコピペ厨は年越しは一人ぼっちの筆記
0615デフォルトの名無しさんNGNG
>>608
C++Builderは標準ではデバッグをコンテキストメニューには追加しないぞ。
レジストリエディタで
HKEY_CLASSES_ROOT\exefile\shell\debug
というキーを作り、自分でコンテキストメニューを定義しろ。
0616デフォルトの名無しさんNGNG
>>615
ありがとうございます!!
HKEY_CLASSES_ROOT\exefile\shell\debugに
デバッグ(&P)
HKEY_CLASSES_ROOT\exefile\shell\debug\commandに
"c:\program files\borland\cbuilder6\bin\bcb.exe" "-d" "%1"
という文字列を入れてみました。
これで、EXEファイルを右クリックしたらデバッグ(P)と表示
されるようになりました。
今までC++Builderにデバッグというコンテキストメニューがあった
というのは私の思い違いで、Borland-C++5.0の時にはあったのですが、
それをC++Builderに乗り換えた時に自分で追加したのかもしれません。
0617デフォルトの名無しさんNGNG
さよなら2ch、、
0618デフォルトの名無しさんNGNG
同じような書き込みが削除されずにいたら、今後も同じような訴訟になると思うぞ。
0619デフォルトの名無しさんNGNG
次は数ヶ月後とか?
0620デフォルトの名無しさんNGNG
BCB6を使用しているのですが、
ボタンなどのインターフェースをWindowsXPっぽくすることはできるのでしょうか?
0621デフォルトの名無しさんNGNG
フリーウェア作ろうと思ったら
BCBのパーソナルとプロのアカデミックどっちがいい??
アカデミックはフリーウェアも駄目かな??
0622デフォルトの名無しさんNGNG
>>620
http://www.namakoworld.com/lowtech/download/xpctrls.htm
http://www.shagrouni.com/english/software/xpmenu.html
0623620NGNG
>>622
ありがとうございます。
manifestというのを作るのが簡単そうですね。
試してみます。

>>621
アカデミックは配布駄目みたいです。
ttp://homepage2.nifty.com/feather/nikki/200207.html#20020718
具体的には、
http://www.borland.co.jp/products/cbuilder6_license_jp.pdf
の4.5節にありました。
0624デフォルトの名無しさんNGNG
フォームが閉じるのを抑止したいのですが、どうやれば良いのでしょうか?

右上の閉じるボタンを無効にしてもAlt+F4で閉じてしまいます…
0625デフォルトの名無しさんNGNG
>>624
フォームのOnCloseQueryイベントで
CanCloseにfalse入れればいいのではないかと。
0626601NGNG
>>603
あっ、いえ、
エクスプローラからTEditのみにD&Dしたいのですが・・
フォームにはできたのですが、TEditのみというのができなくて
よろしくお願いします。
0627デフォルトの名無しさんNGNG
DragAcceptFilesにEditのハンドル渡せばできるよ。
0628601NGNG
>>627
お答えありがとうございます。
指定した、EditのみにD&Dするとカーソルが受け取る状態になったのですが、
実際にイベントが発生しません。
protected:
void __fastcall WMDropFiles( TWMDropFiles &Msg )
{
  char buff[MAX_PATH+2];
  ::DragQueryFile( (HDROP)Msg.Drop, 0, buff, MAX_PATH );
  Edit1->Text = buff;
  ::DragFinish( (HDROP)Msg.Drop );
}
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER( WM_DROPFILES, TWMDropFiles, WMDropFiles )
END_MESSAGE_MAP(TControl)

これがソースなのですが、どこがいけないのでしょうか?
よろしくお願いします。
0629TECHNGNG
>>628
それはどこに書いたの?
Editのハンドルを渡したら、それを書くのは TEditを継承したコンポに書く必要があるよ。
それをしたくないなら、 TEditをサブクラス(メッセージフックするとか)
0630デフォルトの名無しさんNGNG
>>629
TForm1のヘッダファイル内に書いたんじゃない?protected:とか
書いてあるし。
0631山崎渉NGNG
(^^)
0632デフォルトの名無しさんNGNG
Σ(゚Д゚)
0633デフォルトの名無しさんNGNG
>>628

>>606-607
0634債務不履行の名無しさんNGNG
>>628
なんかちょっと違う気がする・・・
0635デフォルトの名無しさんNGNG
前スレを踏襲しただけじゃないの?

と、マジレスしてみry
0636621NGNG
>>620
どもありがとうございました
結局VCになっちゃいました
0637601NGNG
>>629
えと>>630さんの言うとおり、Formのヘッダに書きました。
すみません、サブクラスを行う場合のコードを教えて下さい。
よろしくおねがいします。
0638デフォルトの名無しさんNGNG
>>637
サブクラス化を行ってTEditにWM_DROPFILESメッセージを受け取らせる方法です。

--unit1.h
private:// ユーザー宣言
HWND wnd;
TWndMethod OldEditWndProc;
void __fastcall NewEditWindowProc(TMessage& Msg);

--unit1.cpp
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
OldEditWndProc = Edit1->WindowProc;
Edit1->WindowProc = NewEditWindowProc;
wnd = Edit1->Handle;
DragAcceptFiles(wnd, TRUE);
}
void __fastcall TForm1::NewEditWindowProc(TMessage& Msg)
{
char buff[MAX_PATH + 1];

if (Msg.Msg == WM_DROPFILES) {
DragQueryFile((HDROP)Msg.WParam, 0, buff, MAX_PATH);
Edit1->Text = buff;
DragFinish((HDROP)Msg.WParam);
}
OldEditWndProc(Msg);
}
0639デフォルトの名無しさんNGNG
コンパイル時の引数はどこで設定するのでしょうか?
% gcc hoge.c -DDEBUG
みたいなのをやりたいのですが。
0640デフォルトの名無しさんNGNG
>>638
だから、その技法だと TEdit のプロパティを実行時に代えるとクラッシュするんだってば。
0641デフォルトの名無しさんNGNG
>>639
プロジェクトの設定のディレクトリ/条件とかいうとこで設定してます
0642デフォルトの名無しさんNGNG
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    OldEditWndProc = Edit1->WindowProc;
    Edit1->WindowProc = NewEditWndProc;
    DragAcceptFiles(Edit1->Handle, TRUE);
}
void __fastcall TForm1::NewEditWndProc(TMessage& message)
{
    if (message.Msg == WM_DROPFILES)
    {
        char buffer[MAX_PATH];
        DragQueryFile((HDROP)message.WParam, 0, buffer, MAX_PATH);
        DragFinish((HDROP)message.WParam);
        Edit1->Text = buffer;
    }

    if (message.Msg == CM_RECREATEWND)
        DragAcceptFiles(Edit1->Handle, FALSE);

    OldEditWndProc(message);

    if (message.Msg == CM_RECREATEWND)
        DragAcceptFiles(Edit1->Handle, TRUE);
}
0643601NGNG
>>638、>>640、>>642さん、ありがとうございます。
さっそくやってみます。
0644601NGNG
さっそく>>642さんのコードで試してみました。
私の希望通りの動作ができたのですが、
Edit1->Textにファイル名が表示された瞬間にOSごと落ちてしまいます。
これは何が原因なのでしょうか?
よろしくおねがいします。
0645デフォルトの名無しさんNGNG
OldEditWndProc はどうしてる?
0646601NGNG
>>645
えと>>642さんのコードそのまんまでやっております。
0647デフォルトの名無しさんNGNG
という事は WM_DROPFILES の時はDefWindowProcが動いてしまうのでは?
0648601NGNG
>>647
DefWindowProcとは>>642で言うところのOldEditWndProcですよね?
それでしたら、動くと思いますが。WM_DROPFILES の時は
動かさない方がいいのでしょうか?
0649601NGNG
うおおおおおおおおおおおおおおおおおおおおおおおおおおお!!
>>647さん、ありがとうございます。
WM_DROPFILESのelseでOldEditWndProcを動かすようにすれば
正常に動作しました!ありがとうございました。
0650645NGNG
だから、 OldEditWndProc という変数はどこで定義したの?
0651601NGNG
>>650
定義は>>638さんのように、ヘッダのprivateに定義しました。
0652645NGNG
あそう。じゃごめん  >>649で解決だと思う
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と未だに読んだことがない。
■ このスレッドは過去ログ倉庫に格納されています