トップページ⇒tech
990コメント312KB

C++Builder相談室 Part19

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/08/01(金) 16:30:32
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
※2008/07よりCodeGear(Borland IDE/DB部門)はBorlandからEmbarcaderoに移動しました

【前スレ】
C++Builder相談室 Part18
http://pc11.2ch.net/test/read.cgi/tech/1188607282/

過去スレ・関連サイトは>>2-7あたり。

※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part5
http://pc11.2ch.net/test/read.cgi/tech/1135127048/
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.13
http://pc11.2ch.net/test/read.cgi/tech/1175861395/
※CodeGear(Borland/Embarcadero)関連はこちら
【CodeGear】Embarcaderoオッチャ その10
http://pc11.2ch.net/test/read.cgi/tech/1216250111/

<関連スレ>
くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/
[Tips]Borland C++Builder ちょいテク No.01
http://pc11.2ch.net/test/read.cgi/tech/1154580209/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
06526502009/06/22(月) 19:47:21
>>651
VSで同様な目に逢った事無いもんで。
0653デフォルトの名無しさん2009/06/22(月) 21:47:46
コピペできなくなることはたまにあるな
折りたたみ機能とかいらん機能の弊害だろう
0654デフォルトの名無しさん2009/06/23(火) 00:32:14
>>653
でも、あれはあれで便利な時もあるんですよ、たまに。…って弊害が大きくちゃ
仕方ないですね。

どうにも、IDEってか、エディタのソースがどうなってるのか一度見てみたい。
時々カーソル位置を上手く認識してなかったり、コピペがおかしくなったり。

特に大きめのソース&複数のソースのデバッグを続けると発生し易いような。
(ソースデバッガ兼用な所も一因なのかな)(↑使い方に問題有りかも?C++なのに
ってか、OOPなのに…?って事かな)

いずれにせよ、少しでもおかしくなったら、まずIDEを疑えって事ですね。
0655デフォルトの名無しさん2009/06/23(火) 00:45:23
BCB6はええよ
BCB5のときに俺がバグ報告をFAXで3枚も送ってやったからそれが6ではちゃんと直ってるし、まあデバッグ実行で例外出しまくってると動作がおかしくなったりBCB自体に例外が出て終了できなくなったりなんてことはたまにあるけど致命的なものはないしね
動作も軽いしもう最高だよ!
0656デフォルトの名無しさん2009/06/23(火) 10:49:50
>BCB6はええよ

良すぎるでかんわ。
0657デフォルトの名無しさん2009/06/23(火) 14:42:21
2009って64bitOSに対応してる?
0658デフォルトの名無しさん2009/06/23(火) 16:08:52
64bitは2010だろ。
っていつ出るんだろう。
2009は2008年に出た希ガス。
0659デフォルトの名無しさん2009/06/23(火) 16:11:54
つーか、UIを2010から5のUIに戻してほしい
0660デフォルトの名無しさん2009/06/23(火) 16:38:36
2009ってWin98で動くプログラムも作成できる?
0661デフォルトの名無しさん2009/06/23(火) 16:40:04
2009ってキーボードに付いた精子を綺麗に拭き取ることできる?
0662デフォルトの名無しさん2009/06/23(火) 17:18:48
Windowsのフォルダ選択ダイアログって開けましたっけ?
0663デフォルトの名無しさん2009/06/23(火) 17:22:47
なにを?
0664デフォルトの名無しさん2009/06/23(火) 22:58:28
SelectDirectoryのoverload版で。
0665デフォルトの名無しさん2009/06/25(木) 10:26:27
>overload版で。

これって何ですか?
0666デフォルトの名無しさん2009/06/25(木) 11:07:22
マルチな上にヘルプも読まない人には無理。
0667デフォルトの名無しさん2009/06/25(木) 11:37:17
知らないならレスしないで下さい。ウザいだけです。
06686652009/06/25(木) 11:57:36
 ↑(667)
いつもはりつきご苦労様です。
06696652009/06/25(木) 17:48:54
�d>>664
ヘルプを見たら、2つ関数があって分かりました。
はっきり言って、Exsampleをコピペして動作見たのが間違いだった(><;)
0670デフォルトの名無しさん2009/06/27(土) 21:23:42
質問です。
1画素4バイト(ゴミ, R, G, B各1バイト)のデータが
long img[4*160*120];の配列に格納されています。
これを160x120のカラー画像として、TCanvasにDrawメソッドで
描画するにはどうしたらいいのでしょうか?
img配列をTBitmap(?)などに格納すればいいみたいですが、
どのように格納すればいいのか分かりません。
よろしくお願いします。
06716702009/06/27(土) 22:45:46
>>670 long img[160*120]です。すみません。
0672デフォルトの名無しさん2009/06/27(土) 23:48:06
RGB関数で色指定して、1dotづつ書いていくのでは出目なの?
0673デフォルトの名無しさん2009/06/28(日) 00:37:00
>>670
ScanLine()を使えば少しは速くなる
ドット単位で打つと猛烈に時間がかかる
0674デフォルトの名無しさん2009/06/28(日) 02:29:26
>>672-673
ありがとうございます。ScanLine()でやってみたいと思います。
0675デフォルトの名無しさん2009/07/05(日) 14:51:56
はじめまして、BCB6使い始めて間もない初心者です。

StringGridのセルを結合する方法が分かりませんorz
先輩方、どうかご教示を(´・ω・`)
0676デフォルトの名無しさん2009/07/05(日) 15:15:47
できない
0677デフォルトの名無しさん2009/07/05(日) 15:28:00
>>675
?ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200407/04070056.txt
0678デフォルトの名無しさん2009/07/06(月) 00:16:05
>>677

有難うございます!

しかし解決できずorz
もっと勉強しないとだなぁ・・・('A`)
0679デフォルトの名無しさん2009/07/06(月) 01:13:01
ほらできないw
0680デフォルトの名無しさん2009/07/06(月) 01:13:38
有償でよければ
ttp://www.tmssoftware.com/site/gridpack.asp
こんなのとか。
0681デフォルトの名無しさん2009/07/06(月) 20:37:53
StringGridは出来が悪いから使わない方がいいよね
0682デフォルトの名無しさん2009/07/06(月) 21:10:17
>>680

有償版があるくらいにアレなんですね、わざわざ有難うございます!

StringGridは2009だとその辺が改善されてるんですかね?
というか2009BCB以外に安いですね、高いけど('A`)
0683デフォルトの名無しさん2009/07/07(火) 00:05:02
StringGridはStringのGridでしかない
改良コンポなんかごろごろしてるから探せ
0684デフォルトの名無しさん2009/07/07(火) 09:45:25
Builder2009のHelpにStringGridの項目無いよ
相変わらずヘルプは腐ってるな
0685デフォルトの名無しさん2009/07/07(火) 10:25:26
>>684は
StringGridで検索しているに1000万ジンバブエドル
0686デフォルトの名無しさん2009/07/07(火) 14:30:09
セルの結合はうまくいったのですが
横スクロールすると結合したセルの表示がおかしくなります。
どうすればいいですか?
0687デフォルトの名無しさん2009/07/07(火) 14:40:15
Refresh or InvalidRect
0688デフォルトの名無しさん2009/07/07(火) 14:46:29
>>687
DrawCellイベント内なのでRefreshをすると永遠にチラつきまくりますが、
InvalidRectはヘルプに載ってないのですがAPIですか?
0689デフォルトの名無しさん2009/07/07(火) 14:51:09
InvalidateRect
でした。

>DrawCellイベント内なので

スクロールの終了後にコールすれば良いんジャマイカ?
0690デフォルトの名無しさん2009/07/07(火) 14:52:31
>>689
これは失礼しました。
TopLeftChangedでやればよかったんですよね^^
とりあえずTopLeftChangedでやったらうまくいきましたが
InvalidateRectも調べてみます。
ありがとうございました
0691デフォルトの名無しさん2009/07/09(木) 14:16:35
たすけてーーー。

今回、初めてC++Builder5を使用してプログラムを作成していますが
何もわからない。

1、以下のようなテキストファイルが存在する。
---------------------------------
1の要求を受付ました。
1の要求の応答を送信しました。
2の要求を受け付けました。
2の要求の応答を送信しました。
              <-どんどん新しいデータが入る。

---------------------------------

2、テキストファイルのデータを新しいもの順に表示する。

※↓textArea??MeMo????
--------------------------------- ↑新
2の要求の応答を送信しました。 <-新しいデータが来るたび一番上に追加される。
2の要求を受け付けました。
1の要求の応答を送信しました。
1の要求を受付ました。


--------------------------------- ↓古

上記のようなものを実現したいのですが、さっぱりわかりません。
誰か教えてください・・・(;;)w
0692デフォルトの名無しさん2009/07/09(木) 14:22:35
「○○の□□を△△した」に分解してソートすればいいんじゃね?
0693デフォルトの名無しさん2009/07/09(木) 14:47:55
TStringListでLoadして逆からSaveすればいいんじゃね?
0694デフォルトの名無しさん2009/07/09(木) 15:14:51
>>692
>>693
ありがとう
しかしぺーぺーですのでわかりません。
もっとくやしくお願いします。
0695デフォルトの名無しさん2009/07/09(木) 15:56:03
>>964
このブタ野郎がっ!!

TStringList *sl = new TStringList( );
sl->LoadFromFile( "元ファイル" );
sl->Stringsをソート
sl->SaveToFile( "新ファイル" );
delete sl;

めんどいなら↓

TStringList *sl = new TStringList( );
TStringList *wl = new TStringList( );
sl->LoadFromFile( "元ファイル" );
wl->Clear( );
for( int i = sl->Count - 1; i>= 0; i -- ){
 wl->Add( sl->Strings[i] );
}
wl->SaveToFile( "新ファイル" );
delete wl;
delete sl;
0696デフォルトの名無しさん2009/07/09(木) 16:12:53
>>695
ソートじゃきっとまずいだろ
ちゃんと逆順になめなきゃ

「表示する」ってんだから
保存は不要だろうけど

ファイル読みの排他処理も気になるが
まあ、ときどきチェックして
変化分だけ先頭に追加表示かな
0697デフォルトの名無しさん2009/07/09(木) 16:32:52
おっと、保存するかと思ったぜ。

>>696
TStringListのソートじゃアレだとおもったからソースはかかなかった。
自分で逆からぐるぐるやればアレ。

表示だけなら
TStringList *sl = new TStringList( );
sl->LoadFromFile( "元ファイル" );
for( int i = sl->Count - 1; i>= 0; i -- ){
 Memo1->Lines->Add( sl->Strings[i] );
}
delete sl;
これでいいんじゃね?
これはTMemoに書いてるがそこを変えればおk
0698デフォルトの名無しさん2009/07/09(木) 16:35:20
>>695
ぶひっ

>>696
>>697
ありがとう
本当に助かりました。
0699デフォルトの名無しさん2009/07/09(木) 16:36:26
っと思いましたが、もう一点いいですか?
0700デフォルトの名無しさん2009/07/09(木) 16:40:13
テキストファイル
      ---------------
      |       |
常に    |       |   常に
書き込み-> |       |  <-読み込み
      |       |
      |       |
      ---------------

を行うわけですが、問題ないですか?
問題がある場合は、みなさんはどのように対応していますか?
0701デフォルトの名無しさん2009/07/09(木) 16:42:09
↑
おうっ!壊れた。
初心者ですので勘弁してください。

ひとつのログファイルに常に書き込むプログラムと常に読み込むプログラムが
いるけど大丈夫ですか?
0702デフォルトの名無しさん2009/07/09(木) 17:54:29
そういう場合はRDBを使います。
無料のものならFirebird。
0703デフォルトの名無しさん2009/07/09(木) 18:00:28
テキストファイルで読み書きする仕様なんだ・・・
どうすれば良い○| ̄|_
0704デフォルトの名無しさん2009/07/09(木) 18:14:53
CreateFileでググる
07056962009/07/09(木) 18:19:17
>>702
ただのログファイルの表示に
それはないだろ

>>701
書き込み側のプログラムは
既存のものなのか?
書き直しはできるのか?

あーあ、現実逃避中
0706デフォルトの名無しさん2009/07/09(木) 18:23:30
>>704
グググってみる

>>705
書き込み側のプログラムも新規作成します。
何か良い案がありますか。
0707デフォルトの名無しさん2009/07/09(木) 22:09:30
内部的にStringListを持ってログの生成閲覧はそいつを起点にする
テキストファイルはログの保存だけに使う
0708デフォルトの名無しさん2009/07/09(木) 22:22:01
そのテキストって新しい行を追加し続けるだけ?
一定数行を越えると古いものを削除したりするの?

二つのプロセスが一つのファイルいじるならミューテクスとかで排他制御するといいよ。
0709デフォルトの名無しさん2009/07/10(金) 02:11:20
ファイル入出力は、オープン時にちゃんと排他制御の機能がある訳だが。
07106962009/07/10(金) 09:19:48
>>706
どうしてふたつのプログラムにするのかわからんが
要はプログラム間通信ということだな。

簡単には、書き込みファイルの存在をフラグとして
読み込み側で読んだら消すというハンドシェイクをする。
必要なら読み込み側で別ファイルに保存する。
もちろん、書き込み側はログを遅延書き込みできなきゃダメだが。

>>709
それももちろん必要だが、それだけで解決できないよね。
0711デフォルトの名無しさん2009/07/10(金) 12:27:28
>>710
簡単に解決できるだろ。
0712デフォルトの名無しさん2009/07/10(金) 13:53:26
>>711
リトライするってこと?
0713デフォルトの名無しさん2009/07/10(金) 18:05:17
書き込み側は、FILE_SHARE_READ指定
読み込み側は、FILE_SHARE_WRITE指定
で問題なく読み書きできるだろ。
0714デフォルトの名無しさん2009/07/10(金) 22:46:12
>>713
その設定でオープンしたまま処理するの?
タイミングによっては、どこまでが読めてくるのか
心配なのだが・・・

691さん、実験してみて
0715デフォルトの名無しさん2009/07/12(日) 20:23:17
BCB5の『開発者ガイド』やヘルプファイルを1日や2日読んだだけでは
何の成果も得られません。
それでも、何ヶ月も毎日読み続けてたら、Windowsプログラムを作れるように
なりますか。
それとも、ニートになって毎日起きてる時間の全部を、その学習に費やして
10年という歳月を掛けても、無理ですか。
0716デフォルトの名無しさん2009/07/12(日) 21:06:48
知識というのは使ってこそ覚えられるもの
読み続ける、学習を続けるだけでは一生無理

何が言いたいかというととにかくまずプログラムを書け
動くものを作れ
簡単なものから徐々にレベルアップしていけばいい
実践のなかで知識の本質を理解しろ
0717デフォルトの名無しさん2009/07/12(日) 21:58:18
何もわからん奴に
とにかく作れと云っても無理ぽ
何もわからんのだから。
一番の近道は、ソースを読むこと。
評判のいいソース、あるいは自分が作りたいプログラムに近いものの
ソースを読み、実際にコンパイルして動かして動作を確認する。
そして、ちょっとだけプログラムを変更してみて
自分の思った通りに動くかどうかを確認する。
まあ、こんなところからやってみるのが現実的であろう。

0718デフォルトの名無しさん2009/07/13(月) 19:25:54
>>707 - 717
みんなアドバイスありがとう
ログもDBで管理するようになりました。
いいのかな???まぁいいや。

BCB5でのDBアクセスの方法等を調査しなくては...。
0719デフォルトの名無しさん2009/07/13(月) 20:51:06
>>718
BCBは基本的に殆どのライブラリをVCLに頼っているから
Delphiの参考書があればほとんどそのまま移植できる
0720デフォルトの名無しさん2009/07/14(火) 09:32:38
まあ C++ の皮をかぶせた Delphi だからな。
できないのは class of に相当する定義だけじゃない?
0721デフォルトの名無しさん2009/07/14(火) 09:53:42
>BCB5

.pasファイルをそのままプロジェクトに組み込めるw

Delphiで作成したクラスは、実体宣言できなくて、”ポインタ宣言&new”というのが最大の制限。
0722デフォルトの名無しさん2009/07/14(火) 10:30:21
しかしなぜか AnsiString だけは実体宣言するという。
0723デフォルトの名無しさん2009/07/14(火) 10:33:54
Delphiではクラスじゃないから
0724デフォルトの名無しさん2009/07/14(火) 11:21:28
そう、だるふぃのソースを移植する必要さえない。
pasソースをBuilderのプロジェクトにぶちこめばいい。
0725デフォルトの名無しさん2009/07/14(火) 17:31:18
OpenJaneのソースをBCB5でコンパイルできないんだが・・・
0726デフォルトの名無しさん2009/07/14(火) 21:10:08
はぁーー。
先週から常連になってきたペーペーです。
新たな問題が発生しました・・・。助けてください。

2台のPCが存在します。
各PCには共有フォルダと作業用フォルダを持っています。

PC1からPC2へ何か要求を行う場合、PC2の共有フォルダに要求が入力された
ファイルが置かれます。

各PCは自分の共有フォルダをポーリングしていて、ファイルを発見した場合
そのファイルを作業フォルダに移動させます。(要求の処理は他の人の担当です)
(コピー後削除? 切り取りはできますか?)

上記の動作をexeを起動したら自動的にスレッドを起こして、その中で行う
みたいです。

まず、スレッドって何?から話が始まって、とりあえずそこはなんとなく理解
できました。
しかし、スレッドの起こす方法や、起動時に自動ってどうやって??
で詰まっています。

要は、何もわからない状況です。助けてください。
周りにC++できる人が一人もいないのです・・・。
DBアクセスもできていなのに・・・。泣きたい。
0727デフォルトの名無しさん2009/07/14(火) 21:13:58
なんかIndyのHTTPサーバコンポとかでやった方が手っ取り早いような
0728デフォルトの名無しさん2009/07/14(火) 22:22:20
>726
その腐った仕様は誰がどうやって決めたんだ?排他処理は?スレッドの必要性は?
とそんなことをそいつにちゃんと考えさせろ。

スレッドはTThreadを派生させて作る。
0729デフォルトの名無しさん2009/07/14(火) 23:22:25
>>726
お前にはまだ早い
0730デフォルトの名無しさん2009/07/14(火) 23:35:35
スレッドの意味が間違っている様な悪寒
0731デフォルトの名無しさん2009/07/14(火) 23:42:46
プログラミングの勉強課題じゃねえの?w
実用的とは考えにくいなー
0732デフォルトの名無しさん2009/07/15(水) 05:04:17
スレッドの初歩として
セマフォー or CriticalSectionの概念を理解させるために
問題を単純化して、ファイルで制御させる目的で
どっかの田舎の専門学校が学生に出した課題
って感じだな。
0733デフォルトの名無しさん2009/07/15(水) 09:58:57
いやいや>>726の文句を言ってる連中は無知としか言いようがないなあ
たしかに>>726はプログラムの知識は文句言ってる貴様らと大差はないが
実際に運用するときはこんな使い方をするところもある
0734デフォルトの名無しさん2009/07/15(水) 10:09:32
>>731-732
説明が悪いので勘違いされたかもしれませんが
勉強課題ではないんです。

自分の担当分以外は全く理解できていませんが、
これが一番良い方法らしいです。

>>733
ありがとう
少し落ちこんでいました。

>>729
の言うと通り、技術的にまだ未熟ですので皆さんに助けを
お願いしたいのです。
0735デフォルトの名無しさん2009/07/15(水) 10:22:57
>>733
発言力はあるが、知識のない奴が
たくさんいるからな
0736デフォルトの名無しさん2009/07/15(水) 10:31:23
>>726
タイマーでやるよりはスッドレの方が好みだな。
同期に関して、Windows のセマフォは実装に問題があるから、
使うときは良く考えた方がいい。大抵はミューテックスか
クリティカルセクションで事足りるけど。

とりあえず思いついたことだけ。
要点もまとめられないほどわかってないやつをこのような場所で
サポートするのは至難だと思うな。
0737デフォルトの名無しさん2009/07/15(水) 10:33:00
とりあえずここは口だけのクズが多い
0738デフォルトの名無しさん2009/07/15(水) 16:32:17
同意だが、普遍的過ぎるぞ。
その「ここ」には「地球」すら違和感なく入る。
0739デフォルトの名無しさん2009/07/16(木) 15:54:51
【緊急】
誰かBCB5でのSetTimer,KillTimerの使い方おしえて
0740デフォルトの名無しさん2009/07/16(木) 16:38:40
急いでいるので早く教えて
0741デフォルトの名無しさん2009/07/16(木) 16:41:00
>>740
コラ
偽者め
お前が教えろ
0742デフォルトの名無しさん2009/07/16(木) 16:42:28
TTimerではダメなのか?
0743デフォルトの名無しさん2009/07/16(木) 16:43:31
>>>742
知らんなら黙ってろカス

知ってる人早く教えてください
詳しく
0744デフォルトの名無しさん2009/07/16(木) 17:12:42
SetTimer(うんちゃら)
KillTimer(なんちゃら)
知らんけど。
0745デフォルトの名無しさん2009/07/16(木) 17:22:18
>>744
早く調べて教えろボケ
0746デフォルトの名無しさん2009/07/16(木) 17:24:56
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win47.html
0747デフォルトの名無しさん2009/07/16(木) 17:55:55
>>746
長すぎて読む気がしないからまとめろ無能
0748デフォルトの名無しさん2009/07/16(木) 18:24:52
>>746
いつまで待たせる気だ
無能め
0749デフォルトの名無しさん2009/07/16(木) 18:31:53
まとめ:
ttp://oshiete1.goo.ne.jp/qa3499000.html?ans_count_asc=20
0750デフォルトの名無しさん2009/07/18(土) 09:04:36
どうしても使いたいってのならこんなんでいいのかな?
********* unit1.h のTFormのpublicに追加
public: // ユーザー宣言
UINT_PTR myEvent;
static int CALLBACK MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR nIDEvent, DWORD dwTime);

********* unit1.cpp
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
myEvent = NULL;
SetTimer(this->Handle, myEvent, 1000, (TIMERPROC)MyTimerProc);
}
//---------------------------------------------------------------------------
int CALLBACK TForm1::MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR nIDEvent, DWORD dwTime)
{
Form1->Caption = AnsiString(rand() % 100); //適当にキャプション変えてみる
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
KillTimer(this->Handle, myEvent);
}
//---------------------------------------------------------------------------
0751デフォルトの名無しさん2009/07/18(土) 09:08:32
ただしこれだとstaticだから、Timer1より使いにくいこと請け合い。
SetPropとか使ってthisを渡すとかすんのかな・・・めんどくさ
■ このスレッドは過去ログ倉庫に格納されています