トップページ⇒tech
422コメント110KB

[Tips]Borland C++Builder ちょいテク No.01

■ このスレッドは過去ログ倉庫に格納されています
000112006/08/03(木) 13:43:29
今まで知らないでゴリゴリしこしこやっていた処理が実は簡単に出来たなんてことがよくあります。
そんなちょっとしたテクニックやTips(秘訣)を紹介するスレです。
プログラミングのQ&Aは
C++Builder相談室 Part16
http://pc8.2ch.net/test/read.cgi/tech/1138766165/
くだすれC++Builder(超初心者用)その2
http://pc8.2ch.net/test/read.cgi/tech/1144308804/
関連スレ
Borland Developer Studio 2006 No.07
http://pc8.2ch.net/test/read.cgi/tech/1154069526/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
0153デフォルトの名無しさん2007/07/01(日) 22:46:36
>>152
それを見たとき、真っ先に思い浮かべたのはこれ↓だった。

「…僕が一番Delphiをうまく使えるんだ。一番、一番うまく使えるんだ…」

http://www.geocities.co.jp/AnimeComic-Pastel/3829/words19_Gundam.html
0154デフォルトの名無しさん2007/07/02(月) 12:44:56
最近のIDE(具体的にはTurbo C++ Explorer)ってSDIスタイルにはできないの?
今どきの、MDIともちょっと違う気持ち悪いサブウィンドウ構成がデフォルトだけど、
フォームエディタやコードエディタを独立したウィンドウにできないのかしらん。
(記憶あいまいだけどDelphi6/BCB6ではオプションから変更できたような)
01551542007/07/02(月) 16:04:30
デスクトップ ツールバーの Classic Undocked でした > 自己解決
お騒がせしました。
0156デフォルトの名無しさん2007/08/05(日) 00:52:06
>>149
むちゃくちゃ感じの悪いヤツだな、その作者。
0157デフォルトの名無しさん2007/11/17(土) 10:42:33
がっつ
0158デフォルトの名無しさん2007/11/17(土) 13:02:56
>>149
Delphiが用意したクラスって、iostreamとかもダメ?
0159デフォルトの名無しさん2007/11/18(日) 11:12:58
ShiftJIS範囲内の文字しか使われない or ファイルシステムがFAT系ならUnicode対応してなくても問題ない。
問題が出る可能性があるのはパス名にShiftJIS外の文字(アラビア語や韓国語など)が含まれてファイルシステムがNTFSの場合だけだとおもう。
0160デフォルトの名無しさん2007/11/18(日) 11:15:25
あ、FAT32はダメかもわからん

まあ文字化け起こして、意図せずに既存ファイル名とかぶる場合があり得る程度(特に半角カナ)
0161デフォルトの名無しさん2007/11/20(火) 18:35:54
wxFormsで開発したときのTipsキボンヌ。

特に、Macでのコンパイルはどうやんのか、とか。
0162デフォルトの名無しさん2007/11/20(火) 23:22:42
> 特に、Macでのコンパイルはどうやんのか、とか。
ftp://bekins.borland.com/groups/jp/events/devcamp/07/a3.pdf
01631612007/11/21(水) 08:38:10
thx!>>162

有難うございます。
そのPDFだけ持ってます。というか、そのPDFで存在自体知りました。
01641612007/11/21(水) 13:08:38
度々すみません。

実際にセミナー見られた肩、レポートお願いしますorz
0165デフォルトの名無しさん2007/11/22(木) 09:23:23
まぁ、そもそもインタネットに接続されてるのが当たり前な今日に
ShiftJIS範囲内の文字しか使われない
とかどうやってユーザーを制限する気なんだろうね。もう、あほかと。
0166デフォルトの名無しさん2007/11/22(木) 09:34:34
ヒント: UTF-8
0167デフォルトの名無しさん2007/11/23(金) 09:29:54
>>165
意味不明。
0168デフォルトの名無しさん2007/12/31(月) 09:13:11
会社でTurboC++(Professional)を使わされてるんですが、
この先使い続けてても大丈夫ですかね?
反Microsoft派の意見が、まかりとおってて、口出しできません。
ほんとはVisualC++使いたいのに。
参考書の数も圧倒的に違うのに。
0169デフォルトの名無しさん2007/12/31(月) 13:00:53
基本はC++なんだからどっちも変わらない。
boostの通りが悪いくらい。
しかもTurboC++の方がGUIは.NET無しでVBみたいに作れるから楽。
0170デフォルトの名無しさん2007/12/31(月) 13:09:06
>168
そんな会社辞めちゃえよ。でVCやってる会社に行けば、現状がいかに恵まれてるかがわかる。
0171デフォルトの名無しさん2007/12/31(月) 13:38:33
釣れたw
0172デフォルトの名無しさん2008/01/12(土) 14:18:46
バラクーダまだぁ?
0173デフォルトの名無しさん2008/02/02(土) 22:22:49
無駄
0174デフォルトの名無しさん2008/02/15(金) 10:06:04
C++Builderでクロス開発しててある程度見通しついたのですが、最後に躓きました。

Stringはコンポとアクセスする前までstd::string使えば良いし、
Exceptionは直接使わずに派生したエラークラスを使ってgcc側ではlogic_exception/runtime_exception派生したものを使えば良いことは分かりました。

が、最後の難題はTStringListです。
結構コアな文字列解釈にTStringListをSTLベースに書き換え前途多難、某にはめられますた。

おまいら、クロス用のTStringListどこにあるか教えて下さい。
もしくは純粋C++やSTLでTStringList作って下さい。
0175デフォルトの名無しさん2008/02/15(金) 10:30:16
>>174
要素単位でコピーじゃ駄目なん?

#include <iostream>
#include <vector>
#include <vcl.h>
#pragma link "rtl.lib"
#pragma link "vcl.lib"

int main(){
TStringList* dest = new TStringList();
std::vector<std::string> src;

src.push_back("1行目");
src.push_back("2行目");
src.push_back("3行目");
src.push_back("4行目");

for(int i = 0; i < src.size(); i++) {
dest->Add(AnsiString(src[i].c_str()));
}

for(int i = 0; i < dest->Count; i++) {
std::cout << dest->Strings[i] << std::endl;
}

delete dest;
return 0;
}
01761742008/02/15(金) 10:35:47
Valuesプロパティ、Namesプロパティ、IndexOf、CommaTextの入出力等が要ります。
0177デフォルトの名無しさん2008/02/15(金) 13:48:42
TStringList
おれも昔作ったよ。
STLべースでさ。
Values/Names/IndexOf/CommaText
こんなのなんて簡単に自力で作成できるじゃん。
01781742008/02/15(金) 14:08:57
>>177
レスにコピペorz

もしくは、うpうp!
01791742008/02/15(金) 14:13:35
>CommaText

だけでも欲しぃお( ^ω^)
01801742008/02/15(金) 14:36:33
何ていうか、TStringListって偶然だろうけど使い勝手の良いインターフェースですね。
01811742008/02/15(金) 14:46:46
さっさと教えて下さいよ役立たず共
01821742008/02/15(金) 14:48:37
 ↑
上はニセ174です。
01831742008/02/15(金) 15:07:50
ニセ174登場予定
↓
0184デフォルトの名無しさん2008/02/15(金) 15:11:06
181=183

0185デフォルトの名無しさん2008/02/15(金) 15:53:28
180=182=184
0186デフォルトの名無しさん2008/02/15(金) 20:20:25
String::SubStringは1ベースで、
std::string.substrは0ベースで、
あってますか?
0187デフォルトの名無しさん2008/02/15(金) 20:41:58
どうでしょうね
0188デフォルトの名無しさん2008/02/15(金) 21:24:09
答え待つよりさーー
自分で試したほうが絶対速いじゃんかーー
0189デフォルトの名無しさん2008/02/15(金) 21:28:25
間違ってますって言われたらどうするんだろう
0190デフォルトの名無しさん2008/02/16(土) 00:32:32
TStringListくらい多少手間は食うだろうが自力でできるよ
0191デフォルトの名無しさん2008/02/16(土) 02:16:45
ってかdelphiのソースがあるんだから、それを参考にすれば簡単に作成できるじゃん。
0192デフォルトの名無しさん2008/02/17(日) 14:20:46
コンマで区切るのはstring_algoとかtokenizerとか使ったらダメ?
http://archives.free.net.ph/message/20071213.140751.41186719.ja.html

あと、連想配列ならmapとかunorderd_mapがあるから、
それで済む程度のことなら、自分でコードを書く必要がない。
0193デフォルトの名無しさん2008/02/17(日) 15:46:26
つーか、余程の無能でも二日もあれば自分で書いてるだろう・・・
0194デフォルトの名無しさん2008/02/17(日) 21:50:49
初めての質問です。
環境:WindowsXP/C++Builder5

Imageコントロールに延々とグラフを描画するプログラムを運用中のですが、
突然、描画が出来なくなってしまう現象が発生しています。
一度この現象が出ると、プログラムを再起動しないと復旧しません。
止まるもの、規則性が無く、極端には一回目からグラフの描画が途中で
止まったりします。
これは、バグなのでしょうか?
また、何とか対応したくて、Imageコントロールを動的に取得して描画しようと
したのですが、デバッグでブレーク張っていると、問題なく動くのですが
ブレークをはずすと例外エラーが出てしまうのです。(NTDLL.DLLで)
何とかImageコントロールへの描画不具合を直せないでしょうか?
宜しくご指導をお願い致します。
0195デフォルトの名無しさん2008/02/17(日) 23:01:40
しらんけど、タイミングに気をつけりゃいいんじゃないの?
0196デフォルトの名無しさん2008/02/21(木) 10:25:48
ImageのPictureにBitmapを作成して描画してるわけ?

もしかしてスレッド作って描画していない?
片方のスレッドで描画して、メインスレッドで画面に表示なんてやってると良く落ちるよ。


スレッドではTBitmapに描画しておいて、Synchronizeか、メインに対してメッセージを投げて
画面表示の部分だけは同期させるとかさ
0197デフォルトの名無しさん2008/02/21(木) 10:56:45
VCLがスレッドセーフなら使いやすいのにな
0198デフォルトの名無しさん2008/02/21(木) 13:06:47
無茶言うなよ
大昔に出来た基礎に増築しまくっていじるにいじれなくなってるのがVCLなんだから
酷いプロジェクトの見本だな
0199デフォルトの名無しさん2008/02/21(木) 13:11:36
逆に言うと、クラスライブラリでスレッドセーフな物ってあったっけ?

なわけねーだろ、オブジェクトにアクセスするときにはミューテックスとかセマフォとか取得するだろーが。
0200デフォルトの名無しさん2008/02/21(木) 13:37:27
>>198
妄想としてOOPでもスレッド同士でメソッド呼び合えるようなものを考えてるんだろうけど、まあ夢は夢。

VCLのように委譲(イベント)を使いまくる場合、
基本的にダブルポインタが必要なわけ。 メソッドポインタって奴ね。
つまりオブジェクトと、関数アドレスの2つが必要になるわけね。

ポインタ1個だけなら同期とかは必要ないけど、2つになると、これはどうしようもない。

スレッドセーフにする為に、イベントに代入するような場面全部に同期対策入れろって思う?
思わないでしょ?

メソッドポインタ一つでさえコレなんだから、スレッド同士でメソッド呼び出しってのは基本的に無理
関数型言語なら、ある程度は可能かもしれないけどね
0201デフォルトの名無しさん2008/03/06(木) 00:23:00
TStringList *hogehoge = new TStringList();
...
delete hogehoge;

ってコードをよくみるが、
TStringList hogehoge;
でdeleteなしってダメなんか?
0202デフォルトの名無しさん2008/03/06(木) 00:52:13
VCLなオブジェクトってスタックにおけるんだっけ?
0203デフォルトの名無しさん2008/03/06(木) 01:44:11
c++ builder 2007のkeygenerator持ってる人いる?
0204デフォルトの名無しさん2008/03/06(木) 01:52:16
>>202
スタックにおけないのか?kwsk
0205デフォルトの名無しさん2008/03/06(木) 09:52:23
>>201
ヘルプに書いてある
0206デフォルトの名無しさん2008/03/06(木) 10:01:51
>TStringList
>String

これって便利なんだけど、クロス環境で開発してると害悪になる。

下はstringの代用があるけど、上は自作する必要があるorz
0207デフォルトの名無しさん2008/03/06(木) 10:29:41
文字列リストくらい自作すればいいじゃん
別にTStringListそのものである必要なんて殆どないんだろうし
1時間もあれば書けるだろ
0208デフォルトの名無しさん2008/03/06(木) 10:47:45
ヒント: TStringListをバリバリ利用したクラスの移植
0209デフォルトの名無しさん2008/03/06(木) 10:52:08
TStringListを自前で書いたけど
1時間では絶対に無理
俺は結局1日半くらいかかった。
0210デフォルトの名無しさん2008/03/06(木) 12:56:42
STLとboot使えばよゆー
0211デフォルトの名無しさん2008/03/06(木) 13:01:34
TStringListって何か特殊な機能あったっけ?
0212デフォルトの名無しさん2008/03/06(木) 13:09:48
特殊な機能は無いけど、

Values、Names
とか
CommaText入出力
とか、
LoadFromStream/File
とかあるから、
代替品を作るときにイパーイ機能を実装しないといけないし、
posとfindとイマイチ似てないところや、
無意識にthrow Exceptionすれば良かったのをクロスでどうするとか、
考えるの大変、差し替え後テスト大変。
0213デフォルトの名無しさん2008/03/06(木) 13:11:49
.CommaText とか便利機能もあるしな

まあ IStrings のCOMインターフェース連携機能は諦めるとして
0214デフォルトの名無しさん2008/03/06(木) 13:13:03
だから、そんなのSTLとboostで代替できるじゃん?
それら使い方知らないってのは勘弁してくれw
0215デフォルトの名無しさん2008/03/06(木) 13:15:29
で、それらを全て持ってるSTLとboostの代替ってどれ?

バラバラに持ってても意味無いんだよ。
0216デフォルトの名無しさん2008/03/06(木) 13:15:46
そか、VCLしか知らない人が困るというだけだね
0217デフォルトの名無しさん2008/03/06(木) 13:18:17
>>215
なんでバラバラに持っていては意味ないのかわからない
余程の無能じゃなければラッパー部のテストなんてすぐ可能だし、時間がかかる理由がない
逆に教えてくれw
0218デフォルトの名無しさん2008/03/06(木) 13:21:35
そりゃCommaTextくらい実装出来るけど STL や boostでどうやるわけ?
boostのSpiritでやるのか? なんか牛刀持ち出してるように思うが1時間で書けるの?


IStringsはATLだが これも STLの一種だと言い張るわけか
0219デフォルトの名無しさん2008/03/06(木) 13:22:53
ってかまともにテストするなら、テストコード書いてテストするだけで1時間上かかるだろ。
0220デフォルトの名無しさん2008/03/06(木) 13:29:02
>>218
CommaTextなんてtokenizer使えばすぐ

つーか、クロス開発するときにTStringListの置き換えに困るという話なんだから
>>206が言っているようにStringの代替にstd::stringを使えるレベルでいいなら余裕でしょ
IStringsAdapterが、とか持ち出すのは滑稽w

全体的なテストはまた別の話だし、TStringList関係なく必要だから
0221デフォルトの名無しさん2008/03/06(木) 13:39:36
>なんでバラバラに持っていては意味ないのかわからない

クラスのメンバ変数となってたりするわけだから。
0222デフォルトの名無しさん2008/03/06(木) 13:50:19
それだってescaped_list_separatorからエスケープ殺すか、TokenizerFuncから自作するか
0223デフォルトの名無しさん2008/03/06(木) 13:52:22
posが1ベースでfindが0ベースだったり。

TStringListの仕様はガチガチに決まってるところを、
類似クラス作成するときどこまで同じにするかで悩んだり。
0224デフォルトの名無しさん2008/03/06(木) 13:54:52
そもそも、どんなプラットフォームで開発するにしてもTStringListみたいなデータ構造は必要なんだから
クロス開発するような人なら手持ちにあるはずなんだけどな・・・
0225デフォルトの名無しさん2008/03/06(木) 13:57:16
>手持ちにあるはずなんだけどな・・・

誰でも一番初めは作らないといけないだろ。
反論になってない。
0226デフォルトの名無しさん2008/03/06(木) 13:58:13
結局、自分のよく知らない開発環境で作ろうとしてるから大変なだけ
初心者がBCB難しいって言ってるのと同じ
0227デフォルトの名無しさん2008/03/06(木) 17:08:30
最近はboost::algorithm::splitなんてものもあるね。
0228デフォルトの名無しさん2008/03/06(木) 18:04:25
VCLべったりってのもよろしくないね。
0229デフォルトの名無しさん2008/03/07(金) 08:14:02
MSべったりが一番です
0230デフォルトの名無しさん2008/03/07(金) 14:16:07
我が娘はお父さんべったりです。
0231デフォルトの名無しさん2008/03/07(金) 15:40:38
うちは父が妹にべったりです
0232デフォルトの名無しさん2008/06/24(火) 10:59:31
bcb -b hogehoge.bpr
でビルド自動化
0233デフォルトの名無しさん2008/07/04(金) 20:56:47
TIBQueryを使ってるアプリでEOutOfMemoryが出る場合、出にくくするテクはありますか?
ざっと見メモリリークもなさそうですし、CodeGurardでも警告ないんですが。
0234デフォルトの名無しさん2008/07/04(金) 22:39:01
双方向カーソルが有効になってない?前にこれではまったことがある。
02352332008/07/07(月) 10:01:24
サンクス>>234

UniDirectionalで使用メモリ量が変わるのですね。
影響ありませんでした。 → 従って、TIBQueryのメモリリークじゃないってことです。

良く考えたら、TImage等を使って巨大なビットマップを作成やコピーしているアプリだと気付きました。
TBitmap系のメモリリークを防ぐテクニックがあれば教えてほしいです。
0236デフォルトの名無しさん2008/07/07(月) 21:59:53
C++BuilderってFastMM使えるのかな?リークがないのにOutOfMemoryってことはメモリ領域の
断片化が原因かも。
02372332008/07/08(火) 08:55:17
>>236
あ、断片化でOutOfMemoryが出ることがあるんですか。
勉強になりました。

BCB6なのでFasmMMは標準で入っていません。
数年以内には最新版に逝行するつもりです。
02382332008/07/08(火) 09:49:00
他にも、std::vector使いまくってるから、確かに断片化してるかも。
一応調査はこれで終わろうと思います。

が、この際周辺情報も入手しておきたかったり:
・断片化状態調査ツールなんかないですよね?
・断片化メモリを解放するメソッドはやっぱり無いですよね。
・FastMMにすると断片化を防げるわけですか。
0239デフォルトの名無しさん2008/07/08(火) 16:19:35
断片化と言えば一部のMS-IMEが中途半端なアドレスに陣取ってて、1GB以上の物理メモリ積んだ環境でペイントソフトが起動しないってことがあったなあ‥‥
0240デフォルトの名無しさん2008/07/08(火) 18:07:42
ページングでメモリ管理やってるんだからメモリ容量(仮想メモリを含む)
ぎりきりのメモリ確保をすれば連続したメモリ領域に確保され直される
と思うが
0241デフォルトの名無しさん2008/07/08(火) 21:22:26
>238
FastMMでメモリアロケートの情報を取得できたような気もする。あとメモリ確保のストラテジが標準のものと
異なり、いまどきのメモリがそこそこある状況に最適化されていたはずなので断片化がおきにくいとは思う。
いずれにせよC++Builder 6でも使えるはずなのでまずは試してみてはいかがか?
02422332008/07/10(木) 10:32:26
>>239
メモメモ、すごい勉強になったけど、、、

そんなんあり?_? orz

>>240
そう思うんですけど、現象からはそれを破壊している何かが起きているような。。。

>>241
言われる通りです。
先延ばししても同じ問題が発生したら結局原因追究&対処しなきゃならないんですよね。
0243デフォルトの名無しさん2008/07/10(木) 11:21:11
>>242
なんというか、MS-IME はこういう状況らしい。
ttp://magredirect.itmedia.co.jp/r/5Gf/1B/43/1/pcuser/articles/0805/22/news055.html
0244デフォルトの名無しさん2008/07/10(木) 11:53:15
日本語のMS-IMEを中国人に開発させるなよ・・・
0245デフォルトの名無しさん2008/07/12(土) 00:16:20
毛唐は、日本語と支那語は似たようなものという認識しかねえだろ。
0246デフォルトの名無しさん2008/07/12(土) 11:59:20
その前は韓国で作ってたし、レッドモンドの連中の認識はその程度かも。
「うちのほうが頭がいい連中が多いしIMEはまとめて作りますよ」とかいう言葉に乗せられちゃたんだろな。
0247デフォルトの名無しさん2008/08/01(金) 11:28:41
コンピュータかコンピューターかなんて話よりそっちをどうにかしろってことだよな
0248デフォルトの名無しさん2008/08/09(土) 23:26:48
さっき知って感動したこと。
試しに、プロジェクトにDelphiのソースを突っ込んでみたら
.hppファイルが自動生成されて、ビルドがちゃんと通った。
Delphiの変数宣言って、C++のポインタ宣言と同じで実体は生成されないんだね。
C++ならnewするのを、DelphiはCreateするって違いなんだね。
だから、VCLにはCreateメンバ関数が無いんだね。
0249デフォルトの名無しさん2008/08/10(日) 01:24:36
>>248
単純なDelphiプロジェクトなら、プロジェクトマネージャに構成ユニット放り込めばビルド通るぞ。
0250デフォルトの名無しさん2008/08/15(金) 15:45:38
だれかDMonkeyをBCBで使ってるやついない?
0251デフォルトの名無しさん2008/08/15(金) 16:20:45
Monkey D るふぃー?
0252デフォルトの名無しさん2008/09/09(火) 15:50:55
いま、BCB6で填まっているんですがどなたかお知恵を・・・

BCB6でサービスプログラムを作ったのですが、
有る処理で
Application->ProcessMessages();
と同様の処理をしないといけなくなったのですが、
Application->ProcessMessages();
を記述すると TServiceApplication のメンバーで無いと怒られてしまいます。

なにか他に ProcessMessages と同様の操作する方法ないでしょうか?。
■ このスレッドは過去ログ倉庫に格納されています