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

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

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

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

兄弟すれ
くだすれDelphi(超初心者用)その24
http://pc8.2ch.net/test/read.cgi/tech/1115581376/l50
0237デフォルトの名無しさん2005/09/29(木) 18:10:59
>>236
これがしたかったんです!
ありがとうございました。

…っていっても、文見てもどんな動作してるのか分からないので、
もうちょっと検索してみます。
0238デフォルトの名無しさん2005/09/30(金) 00:05:23
関数をどのフォームからでも呼べるようなグローバル関数にするにはどうすれば良いのでしょうか。
0239デフォルトの名無しさん2005/09/30(金) 00:16:32
>>238
DLLにすれば?
0240デフォルトの名無しさん2005/09/30(金) 00:30:53
>>239
アホ

>>237
まずユニットのヘッダのClass{ }の外側に

extern "C" void a(int b);

みたいに宣言する。

でその関数の実体をユニットのソースに

void a(int b){

・・・

}

みたいに書く。これでOK。
0241デフォルトの名無しさん2005/09/30(金) 00:55:32
>>238
素直にヘッダファイル使え
02422402005/09/30(金) 00:56:30
書き忘れた。
その関数を呼び出すフォームで #includ "Unit〜.h" みたいにインクルードしてから呼ぶべし。  
0243デフォルトの名無しさん2005/09/30(金) 01:17:58
ただグローバル関数にしたいってだけなんだから、extern "C"はイランだろ。勘違いするぞ。
0244デフォルトの名無しさん2005/09/30(金) 01:44:37
//ヘッダファイル hoge.h
#ifndef HOGE_H
#define HOGE_H
#pragma link "hoge"

int hoge( void ); //関数の宣言

#endif


//ソースファイル hoge.cpp
int hoge( void ) //関数の定義
{
 return 0;
}

そしてhoge()を使用したいフォームのソースに #include "hoge.h"を追加



…回答するやつにも超初心者がちらほらするこのスレ。
0245デフォルトの名無しさん2005/09/30(金) 05:57:21
たしかに
0246デフォルトの名無しさん2005/09/30(金) 07:08:14
>>244
一体そのヘッダでどんな関数が書けるのかな、1+1とかかな。ネタだよな。
0247デフォルトの名無しさん2005/09/30(金) 08:17:10
>>244で正解
ただしhoge.cppをプロジェクトに追加するか、
事前にhoge.cppのみコンパイルしておくか。

後者の場合プロジェクトに追加する必要はないが
リンカにパスが通ってる必要はある。
pragma指令にパスを含めるのでもヲケ。
0248デフォルトの名無しさん 2005/09/30(金) 09:45:43
win32 api を使い シリアルポート(RS-232C)の送信受信をやりたいのですが
どうもうまくいきません、この手の参考書も少なく困っています
何か良い参考書またはプログラムの見本の様な物が掲載されている
サイトがありましたらご教授御願いします。
0249デフォルトの名無しさん2005/09/30(金) 09:54:06
>>248
http://www.tt.rim.or.jp/~rudyard/torii009.html

こことかどうよ?
0250デフォルトの名無しさん2005/09/30(金) 09:58:39
>>247
プロジェクトの追加はあまりよろしくない。
この場合だとhoge.cppが絶対パスでプロジェクトに追加されるっぽい。
もしエディタ等で作成したソースをプロジェクトに組み込みたい場合は
ユニットの新規作成をして、ファイル名を追加したいものと同じにする。
んで、ファイルを上書きすればおk。
0251デフォルトの名無しさん2005/09/30(金) 10:13:17
>>249
間違いを指摘するのはいいことだ。
だがここは”くだすれ”だから回答もしようジャマイカ

>>248
ttp://www.moriq.com/delphi/CommX106.lzh
これでも使っとけ
0252デフォルトの名無しさん 2005/09/30(金) 22:28:24
>>251
ご「教授」ありがとう御座います
何とか出来間に合いそうです感謝しています
0253デフォルトの名無しさん2005/10/02(日) 07:58:37
質問です。
ServerSocketなどでマルチスレッドを使う場合、
グローバル変数の競合が発生するらしく、
TThreadListを使うと書いてあったのですが、これはあるスレッドで、

TList *pList = MyThreadList->LockList();

とすると、他のスレッドでは、
MyThreadList->UnlockList();
としない限り、
TList *pList = MyThreadList->LockList();
の*pListは無効ということですか?
0254デフォルトの名無しさん2005/10/02(日) 11:02:59
複数のスレッドで、同時に一つの変数の値を変更したら、不整合が生じるから、
そのようなことがないようにロックされているときは、アンロックされるまで待つんでしょ。
他のスレッドで変更して良いのか?ロックしたスレッドがアンロックしなければ意味がないと思うが?

セマフォとかも勉強したら良いんじゃね?
0255デフォルトの名無しさん2005/10/02(日) 12:00:13
セマフォ
ミューテックス

デッドロック
0256デフォルトの名無しさん2005/10/02(日) 17:32:51
>>254
ありがとうございます。
TThreadListは初めて使うので、使い方を確認したかったのです。
スレッド1でロックしてあると、
スレッド2で TList *pList = MyThreadList->LockList(); としても、
正しいポインタは帰ってこないのかなと。
0257デフォルトの名無しさん2005/10/03(月) 06:50:38
リッチエディットでTEitのように切り取りや貼り付けのある普通の右クリックメニューを出すにはどうすれば良いのですか。
0258デフォルトの名無しさん2005/10/03(月) 07:29:16
TPopupMenu
0259デフォルトの名無しさん2005/10/03(月) 11:40:14
TOpenDialogでファイルではなくフォルダを選択させるにはどうしたら良いのでしょうか?
それともTOpenDialog以外を使わなければいけないのですか?
0260デフォルトの名無しさん2005/10/03(月) 11:43:38
>>259
SelectDirectory ちゅう関数でフォルダ選択ダイアログだせるよ
0261デフォルトの名無しさん2005/10/03(月) 11:57:17
>>260
ありがとうございます。できました。
0262デフォルトの名無しさん2005/10/03(月) 15:21:07
それってデフォフォルダを指定したらそこから上の階層に移動できなかったよね
0263デフォルトの名無しさん2005/10/04(火) 17:00:33
継承元ってどうやって呼ぶんだ
0264デフォルトの名無しさん2005/10/04(火) 17:04:20
ParentClassName::Method();
0265デフォルトの名無しさん2005/10/04(火) 17:14:15
>>264
�dクス
sparみたいなのってないのか?
0266デフォルトの名無しさん2005/10/04(火) 19:29:22
   ハハハ
   ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ^∀^)<  spar
  ( つ ⊂ ) \_________
   .)  ) )
  (__)_)     (^∀^)ゲラゲラ superダロ
0267デフォルトの名無しさん2005/10/05(水) 10:39:55
>>265
こんな感じでどうよ?
http://2ch2.net/.l?=3wel
0268デフォルトの名無しさん2005/10/05(水) 20:50:02
>>265
http://www.hawaiians.co.jp/
こんなのは?
0269デフォルトの名無しさん2005/10/06(木) 14:34:05
TRegistryで質問ですが
reg->WriteBool( "aaaa", true );
で書き込んだキーをDeleteKeyするとエラーになって消せません
reg->DeleteKey( "aaaa" );
どうすれば消せるようになりますか?
0270デフォルトの名無しさん2005/10/06(木) 14:44:26
>>269
それDeleteKeyじゃなくてDeleteValueじゃね?
0271デフォルトの名無しさん2005/10/06(木) 15:51:57
>>270
あ、そっちでしたか。試してみます
0272デフォルトの名無しさん2005/10/07(金) 00:16:04
アプリケーションの終了はメインフォームをClose();させるだけでいいんでしょうか。
確実に解放するEnd関数みたいなのは無いんでしょうか。
0273デフォルトの名無しさん2005/10/07(金) 00:26:40
意図したとおりに動けば、メインフォームのCloseで確実に解放されますよ。
0274デフォルトの名無しさん2005/10/11(火) 01:42:10
TApplication::Terminate
0275デフォルトの名無しさん2005/10/11(火) 02:08:44
メインフォームのClosenのほうがマシ
0276デフォルトの名無しさん2005/10/11(火) 16:46:17
任意の数の配列を取得し、そのグラフ(折れ線)を表示するプログラムを作成してます。
任意ですとデータ系列の追加を手動ではなく
プログラム上で行う必要があるようなのですがその手法が分かりません。
どなたか教えていただけますでしょうか?

例えばhoge[100][30]とかだったらグラフを1〜100までの間で任意の数表示できるようにしたい。
ということです。
0277デフォルトの名無しさん2005/10/11(火) 17:20:35
意味わかんね
グラフは自分で描いてるならどうにでもなるんじゃないの
0278デフォルトの名無しさん2005/10/11(火) 17:21:42
TabSheet1にGroupBox1を貼り付けてGroupBox1にGroupBox2を貼り付けて
GroupBox2にPanelを貼り付けた時にPanelの最上位のParentがTabSheet1だと簡単に取得する方法はありますか?
0279デフォルトの名無しさん2005/10/11(火) 17:36:34
> Panelの最上位のParentがTabSheet1だと

TabSheet1 も子ウィンドウで TPageControl が親、さらにその親がフォームなわけだが
0280デフォルトの名無しさん2005/10/11(火) 18:47:52
じゃあ最上位じゃなくて普通にTabSheet1を簡単に取得したい
フォームはOwnerにあるからいい
0281デフォルトの名無しさん2005/10/11(火) 19:39:13
じゃあ、って・・・
0282デフォルトの名無しさん2005/10/11(火) 19:53:22
>>278
>Panelの最上位のParentがTabSheet1だと簡単に取得する方法

1.PanelがTabsheet1以下のコントロール群の一員であることを確認する。
2.Panelの所属しているコントロールの上位にあるはずのTTabSheet型コントロールのポインタを取得する。

どっちの意味?
0283デフォルトの名無しさん2005/10/11(火) 20:10:53
じゃあ両方教えて
0284デフォルトの名無しさん2005/10/11(火) 20:41:01
1.つ[ContainsControl]
2.つ[dynamic_cast]
0285デフォルトの名無しさん2005/10/11(火) 21:20:12
parent の連鎖を辿っていく

Delphi だとこれでうまくいく

function FindParentTabSheet(ctl: TControl): TTabSheet;
var
  oya: TWinControl;
  flag: Boolean;
begin
  flag := false;
  repeat
    oya := ctl.Parent;
    flag := (oya is TTabSheet) or (oya = nil);
    ctl := oya;
  until flag;
  result := TTabSheet(oya);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ts: TTabSheet;
begin
  ts := FindParentTabSheet(Panel1);
  if Assigned(ts) then
    Label1.Caption := ts.Name
  else
    Label1.Caption := 'not found';
end;
0286デフォルトの名無しさん2005/10/11(火) 21:24:21
flag := false; これはいらんかった
0287デフォルトの名無しさん2005/10/11(火) 21:55:59
くだすれでDelphiネタふるなよ。
それをC++に読み替えできるようなやつがここで質問するか?
0288デフォルトの名無しさん2005/10/11(火) 22:00:00
疑似コードとして論理をしめしただけだろ。
回答できる人は翻訳ぐらいできるだろ。文句あるなら回答しめせよ。
0289デフォルトの名無しさん2005/10/11(火) 22:13:21
回答は>>284で出てるでしょ。

そもそも、DelphiをC++に翻訳できる人間が
その程度のコード自力で書けないと思ってるわけ?
0290デフォルトの名無しさん2005/10/11(火) 22:22:18
あとからでは何とでも言えるし。
0291デフォルトの名無しさん2005/10/11(火) 22:23:48
そもそも>>284で分かるようなら、くだすれで質問しないし
0292デフォルトの名無しさん2005/10/11(火) 22:30:25
>>290
先にこんな話題が出るわけないじゃん。
あとから言うのは当然。
それを後付の屁理屈みたいに貶めようとしても無駄。
0293デフォルトの名無しさん2005/10/11(火) 23:11:52
質問者の態度が厨だから誰もまともに相手してないだけなんだが。

念のために言っておくと、>>285のコードをC++に翻訳しようとすると、
実は詰まってしまう個所がある。その答え(の1つ)が>>284にあるわけで、
それが見抜けないで>>290って言ってる様じゃ寒い罠。
0294デフォルトの名無しさん2005/10/11(火) 23:15:07
いろいろ後から言っても説得力無いなぁ。>>284 は未来予見超能力コードなのね。
0295デフォルトの名無しさん2005/10/11(火) 23:15:46
いいから速く翻訳しろよ。
0296デフォルトの名無しさん2005/10/11(火) 23:52:26
C++使ってる人はデルファイとか知らないよ。使う必要ないし。
0297デフォルトの名無しさん2005/10/11(火) 23:56:51
今必要になったじゃないか
0298デフォルトの名無しさん2005/10/11(火) 23:57:35
VCLもそうだけど世に出てるフリーソフトは結構Delphiで書かれてる。
かつDelphiで書かれてるOpenJaneとかはオープンソースだから
Delphi読めるようになると結構勉強になる。
0299デフォルトの名無しさん2005/10/12(水) 00:00:41
別にデルファイを非難するわけじゃないが、
C++はその百倍は資産があるよ。
0300デフォルトの名無しさん2005/10/12(水) 00:03:15
確かにそうなんだがVCLを必要とするBCB特有の事情だね
0301デフォルトの名無しさん2005/10/12(水) 00:06:09
C/C++のソースが読めるならDelphiのソースは読めるよ。
Delphiで書けと言われると厳しいが。
BCB使ってるとVCLのソースを読む必要に駆られることが多いから
読むだけならそのうち自然に覚えちゃう。
0302デフォルトの名無しさん2005/10/12(水) 00:13:22
そういうこと。Delphiに文句言ってるとBCBで無駄に苦労する。
Delphiの上に成り立ってるんだから当然と言えば当然だけど。
0303デフォルトの名無しさん2005/10/12(水) 00:30:48
倒産したんだから、どっちも将来性無し。
0304デフォルトの名無しさん2005/10/12(水) 01:19:09
これのことかw
ttp://pc8.2ch.net/test/read.cgi/tech/1091066805/853
0305デフォルトの名無しさん2005/10/12(水) 11:38:13
じゃあおしえて
0306デフォルトの名無しさん2005/10/12(水) 13:19:25
なにが「じゃあ」なのかおしえて
0307デフォルトの名無しさん2005/10/12(水) 13:46:38
>>306
jar教えて
0308デフォルトの名無しさん2005/10/12(水) 13:52:19
sir知らんがな
0309デフォルトの名無しさん2005/10/12(水) 16:33:44
じゃあ知らないでいいや
0310デフォルトの名無しさん2005/10/13(木) 14:32:24
TListViewで指定行の背景色を変更する方法を教えてください
0311デフォルトの名無しさん2005/10/14(金) 00:09:09
カスタムドロー
0312デフォルトの名無しさん2005/10/14(金) 10:41:53
ガンダムとフォー?
0313デフォルトの名無しさん2005/10/14(金) 12:01:06
CustomDrawSubItemで
if( SubItem == 4 ) Sender->Canvas->Brush->Color = clRed;
とかすると、SubItem4以降もすべてその色になってしまうんですよ
0314デフォルトの名無しさん2005/10/14(金) 13:04:19
じゃ4以外でも色を設定すりゃいじゃないの
0315デフォルトの名無しさん2005/10/14(金) 14:06:25
あ、書き忘れたけど
if( SubItem == 4 ) Sender->Canvas->Brush->Color = clRed;
else Sender->Canvas->Brush->Color = clWindow;
ってやっとりますた
0316デフォルトの名無しさん2005/10/14(金) 22:25:50
if( SubItem == 4 ) Sender->Canvas->Brush->Color = clRed;
else if( SubItem == 5 ) Sender->Canvas->Brush->Color = clBlue;
else if( SubItem == 6 ) Sender->Canvas->Brush->Color = clYellow;
else if( SubItem == 7 ) Sender->Canvas->Brush->Color = clYattaro;
else Sender->Canvas->Brush->Color = clWindow;
0317デフォルトの名無しさん2005/10/16(日) 11:53:31
http://pc8.2ch.net/test/read.cgi/tech/1124614110/l50
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50
0318VIPから失礼します2005/10/16(日) 12:00:19

これもVIPクォリティ?
小学6年生の男女が裸体うp祭り中!!!

VIPになら小学6年生ぐらいは来てるだろ?
http://ex11.2ch.net/test/read.cgi/news4vip/1129427490/
0319デフォルトの名無しさん2005/10/17(月) 10:57:33
画像のラベリングのやり方や特徴を調べる方法、仕組みなど教えてください。
お願いします。
0320デフォルトの名無しさん2005/10/17(月) 11:32:27
>>319
誘導されてきたようだが、残念ながらスレ違いだ。
画像処理スレあたりに逝け。

相手してもらえるかどうか判らんが。
0321デフォルトの名無しさん2005/10/17(月) 11:49:07
>画像のラベリングのやり方や特徴を調べる方法、仕組みなど教えてください。

サイトのコンテンツ一つできそうだな
0322デフォルトの名無しさん2005/10/18(火) 12:46:53
すみません、質問です。

BCB6 Personalなんですが、
TToolBarのMenuプロパティに
ファイル(&F)->終了(&X)となっているメニューを指定し、
フォームにはTStringGridを置いています。

実行し、StringGridの上でFキーをおすと
フォーカスがメニューのファイル(&F)に移動してしまいます。

OnKeyPressで処理したいのですが、FとXともにイベントが発生しません。
これをフォーカス移動しないようにできないでしょうか。

よろしくお願いします。
0323デフォルトの名無しさん2005/10/18(火) 17:18:18
BCB5使いです。
..\Borland\CBuilder5\Examples\Internet\Chat
にあるサンプルプログラムで、
1台のPCで、自身のIPに接続し文字入力すると、
ローカルエコーのように入力文字を表示します。

これを別PC(IP)に接続し、2台のPCでチャット
させることは可能なのでしょうか?
0324デフォルトの名無しさん2005/10/18(火) 17:40:35
可能
0325デフォルトの名無しさん2005/10/18(火) 17:44:41
>>319
たらいまわしで済まないけど、正しい質問先はこちら。

画像処理スレッドその5
http://pc8.2ch.net/test/read.cgi/tech/1127705848/l50

過去ログを読むと、情報はあるかも。以前のログへのリンクもある。
03263232005/10/18(火) 17:53:41
>>324
Address Name に別PCのIP(例:192.168.0.10)を設定して実験してみましたが、
Error connecting to:192.168.0.10
と表示されてしまいます。
ちなみに別PCのIPに対してpingするとtimeoutになります。
192.168.0.10のPCが見えていないようなんですが、なぜなんでしょうか・・・
ご教授ください。よろしくお願いします。
03273232005/10/18(火) 17:56:23
ついでに・・・、
>>322 Editモードにすればよろしいかと。
0328デフォルトの名無しさん2005/10/18(火) 18:20:09
>>326
http://www.tt.rim.or.jp/~rudyard/torii009.html

ここ参考にしてみて
03293232005/10/18(火) 18:40:15
ご教授・・・ご教示ください。
なんですね。初めて知りました。ご指摘ありがとうございます。
03303222005/10/18(火) 18:52:54
>>327
どもです、これなら大丈夫ですね
ただgoEditingは無効(InplaceEditorが完全に出ないよう)にしたいので
今InplaceEditorを弄ってどうにかできないかとやっています

goEditingがtrueの時にどういうことをしているか分かれば楽なんですが…
03313222005/10/18(火) 19:19:49
何度もすみません。
GetEditTextをオーバーライドしてEditorMode = false
でそれっぽく動くみたいです。

助かりました、ありがとうございます。
03323222005/10/18(火) 20:03:29
と思ったらgoEditingがtrueだとgoRangeSelectがfalseになっちゃうんだった…
orz

どうにもならなかったらメニューをToolBarに置かないようにします
スレ汚しすみませんでした。
03333232005/10/18(火) 20:48:08
>>332
ALT+Fのキー操作で行くものではないのですか。知らなかった。
それとBCB5ではTToolBarにMenuプロパティがなかったりします^^
FormのOnKeyPressを使ったりするのは、スマートな方法では無いですね。
と書きながら思ったのですが、StringGridは本当にフォーカスされたんですよねぇ。
BCB5とBCB6ではえらい違ってるのかしら・・・。
03343222005/10/18(火) 23:14:39
たびたびすみません。

>>323
通常はそうですよね。
同じフォームにあるTreeViewだと大丈夫なんですが、
StringGridにフォーカスがあるときだけ、単一キーで
OnKeyDownが呼ばれた後にメニューにフォーカスが移動します。
(FormでKeyPreview=trueにしてもFormも同じ)

それっぽい情報が見つからないので 謎です。

こういうときにソース見られるといいんですが
なかなか手がでないです…ううむ 
0335デフォルトの名無しさん2005/10/19(水) 00:09:31
既存のボタンやらエディットやらのコンポーネント全部何かして
コンポーネントパレットに表示されなくなったんだけど、
またパレットに表示させて使うにはどうすればいいですか?
0336デフォルトの名無しさん2005/10/19(水) 00:12:54
メインメニュー→コンポーネント→パレットの設定
■ このスレッドは過去ログ倉庫に格納されています