C++Builder相談室 Part21
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
※2008/07よりCodeGear(Borland IDE/DB部門)はBorlandからEmbarcadero(エンバカダロ)に移動しました
【前スレ】
C++Builder相談室 Part20
http://toro.2ch.net/test/read.cgi/tech/1280985719
過去スレ・関連サイトは>>2-7あたり。 C++Builder 10 Seattleですが、
TEdit.MaxLengthの『アプリケーションがテーマを使用している場合、MaxLength の単位は、バイトではなく文字です。
』ってどういう意味なんでしょうか? 1文字が何バイト使うかは、文字コードだったり文字セットだったりでいろいろ違う
という話かしら
それとも、テーマを使用とはどういう意味なのか
という話かしら >>119
>テーマを使用とはどういう意味なのか
こちらの方になります
ランタイムテーマをOFFにしても相変わらず文字数なので・・・ チェック外しても治らない場合は、リソースファイル削除して作り直すとかtips昔無かったっけ? UnicodeString us1;
us1.c_str()
UnicodeStringの文字列をc_str()で取り出すとwchar_t*型の文字列が返されるのね
そして
UTF8String utf8_1(us1);
utf8_1.c_str()
UTF8Stringにしてからc_str()で取り出すとchar *型のUTF-8の文字列になるのね Windowsで10.1 Startar使ってるのですが
bcc32だとu8""が使えず、UTF-8指定の文字列リテラルが使えないのね
bcc32cだとu8""は使えはするがSJISになってしまうようだ
utf-8を無理に使わずにwchar_t*型のUnicode文字列を使うほうが楽みたいね
C++ならstd::stringよりもstd::wstringを使った方が楽そう
UnicodeStringからwchar_t*型のUnicode文字列はc_str()で取り出せるし、
_D("hogehoge")
のように_D()で囲むとwchar_t*型のUnicode文字列のリテラルが生成されるようだ
その上でソースコードをUTF-8にしておくとSJISでは表現できない文字も普通に使える模様 C++Builder10.2でTChart使っているのですが
マウスドラッグでグラフを拡大した時に
拡大したX軸とY軸のMinとMaxを知るにはどうしたらいいですか? マウスのサイドボタン押されたの認識できるイベントおしエロ >>125
WM_MBUTTONDOWN
WM_MBUTTONDBLCLK
WM_MBUTTONUP
WM_XBUTTONDOWN
WM_XBUTTONDBLCLK
WM_XBUTTONUP
あたり?
https://github.com/katahiromz/vkeycheck
わからなかったらこれもチェックしてみて。 TIdTCPServer + TIdTCPClientで数MBの長大な文字列を送受信する場合はどうしたらいいのでしょうか?
Client(送信)側:
TIdBytes buf;
buf = TEncoding::UTF8->GetBytes(SendStr);
IdClient->IOHandler->Write(buf, buf.Length);
Server(受信)側:
void __fastcall TForm1::IdTCPServerExecute(TIdContext *AContext)
{
TIdBytes buf;
AContext->Connection->IOHandler->ReadBytes(buf, -1);
RecvStr = TEncoding::UTF8->GetString(buf);
}
これだと最初の32768バイトだけ受信されている状態でした。 ネットワーク関係は
相手が送った量をそのまま受け取れると仮定するのが間違い
分割されて複数になるかもしれないし
結合されてまとめて送られてくるかもしれない
それを大前提として、データはもう送られてこないとわかるまで
何回も受信するのが当然 >>128
ありがとうございます。
とりあえずこんな感じにしたらできました。
void __fastcall TForm1::IdTCPServerExecute(TIdContext *AContext)
{
TIdBytes buf;
if (!AContext->IOHandler->InputBufferIsEmpty()) {
buf.Length = 0;
while(1) {
AContext->Connection->IOHandler->CheckForDataOnSource(100);
if (!AContext->IOHandler->InputBufferIsEmpty()) {
break;
}
AContext->Connection->IOHandler->ReadBytes(buf, -1, true);
}
RecvStr = TEncoding::UTF8->GetString(buf);
}
} C++Builder2007をWin10にインスコしようとしたら途中でエラー出てインスコできないんだけど
誰か助けて >>130
まず、どこにインストールしようとしているのかとか
インストーラを管理者権限で実行しているのかとか
2007年だとVistaか
UAC出始めた時だしProgram Files(x86)にはインストールせず
CドライブにProgramsみたいなフォルダ作ってそこにインストールしたほうがいいよ >>131
返事遅れてすみません
インスコ先はインストーラーのデフォルトドライブ(C)とデフォパスです
教えてもらったように、管理者権限で別フォルダにインスコしてみます
ありがとうございます ダメでした、インスコ先フォルダ指定する前にエラー出てました
エラー内容
.NET Frameworks 2.0(x64)をインストールできませんでした
Windows updateを利用して手動で更新せよと書いてあるので
全て更新したのですがこのエラーきえません。
このあとXE4とXE8と10もインスコ予定なのですが、これら全てエラーでますかね?
これどやったらいいのだろうか・・・ Frameworks Service pack2をダウンロードしてインスコしてから
2007のインスコしたらうまくいきました。
お騒がせしました Builder10でPageControlのTabSheetの背景変える方法教えてくださいよ
以前のBuilderはグレーだったのにいつからか背景白になって糞見づらいので こういう感じのをC++Builderで表現するにはどうしたらいいのでしょうか?
function TCustomListView.CreateListItem: TListItem;
var
LClass: TListItemClass;
begin
LClass := TListItem;
if Assigned(FOnCreateItemClass) then
FOnCreateItemClass(Self, LClass);
Result := LClass.Create(Items);
end; C++Builer10.2でTAnimate動かないんだけど
どうしたら動くのこれ。
以前のはAction=trueだけで動いたのに何このバグ ヤフオクでC++Builder6とC++ Builder 2009 Professional DELPHI RAD STUDIO
が出品されてます。
OS Windows10で使いたいのですがどちらが良いですか? 中古品だとエンバカ登録のメールアドレスがないと使用許諾コードの入手ができないのでは? 前ユーザが登録したメールアドレスじゃなくても
自分でメアドをエンバカに登録して、それで認証通せばいいだけじゃない?
たぶん、この使用許諾コードは他のユーザが使用しています、とか表示されると思ったけど
そこで改めてエンバカに事情を説明すれば、認証通してくれるかもしれない(経験ないから分からない)
PC買い替えで同時インストール数(だっけ?)超えた場合はエンバカに連絡すれば認証通してくれるよね
それと同じで
エンバカが中古販売を認めているのならだけどね、認めてなかった場場合最悪ライセンス料金請求(新規購入して)されるかもしれんけど >>138です。
前利用者が登録してなかったのか、メールアドレスも登録できました。
(インストールまでエラーが三個ほど出た。)
2枚CDが入ってたけど、1枚しか使わないんでしょうか。
あとavastウイルススキャンがデバッグの時いちいち動作して、デバッグできないです。 >>143
本体インストールは一枚だけ
もう一枚はオプション的なアプリケーションとかだったと思うけど自分はインストールしていない
>avastウイルススキャンがデバッグの時いちいち動作して
avast使ってないから詳細は答えられないけど、
たいていavast側に除外する設定があるはずなのでググるなりなんなりして設定してみて
あとインストールおめ ありがとうございます。
高額の買い物だったので動作してくれてあんしんしました。
それと、以前どこかで見かけたのですが、C++98 とか C++ 11とか、コンパイラ(visual studioとかC++ builder)の対応表、ご存じないですか?
Firefoxのお気に入りがすべて消えてしまってわからなくなりました。 TChartで現在表示されているY軸の最大値と最小値を取る方法教えて
Chart1->MaxYValue だと現在表示されているのではなくてY軸の最大値だったので C++Builer10.2で256x256のアイコンをアプリケーションのアイコンに登録しようとすると
「アイコンを設定できません。システムリソース不足です」とエラーが出るのですが
これ登録する方法教えてくだあし。
それとも64x64が限界ですか? >>148
いえ、ありがとうございます。
色々調べたらどうもアイコンが原因で読めなかったみたいです。
アイコンエディタで開いて保存してから読み込んだら正常に読むことができました。 Win10 2009でデバッグしようとしたらフォームを閉じた後
bds.exe - bordbk120N.dll
Assertion failure:"(!"SetThreadContext failed")"
in ..win32src\thread32.cpp at line 434
Continue exection?
と聞かれてYESでもNOでも再起動するしかなかった。
ググったらdllのバイナリ書き換える方法が載ってた。
ひやひやしたけどなんとかなった。
なんでこんなバグ直さないのかな? C++Builder 10.4 hotfix3 でデバッグ実行時
「〇〇〇.exe エントリポイントが見つかりません」
「プロシージャエントリポイントILfreeがダイナミックライブラリ〇〇〇.exe から見つかりませんでした。」
というエラーが出ます。
ilink32ではエラーが出ておらず、再ビルドするとエラーが消えて暫くすると再発します。
何か解決方法はないでしょうか? onidleの使い方がよくわかりません。
助けてエロい人 Builder2009で質問です。
OnIdleの使い方がよくわかりません。 http://docwiki.embarcadero.com/Libraries/Sydney/ja/Vcl.Forms.TApplication.OnIdle
アプリケーションがアイドル状態になった際に発生します。
OnIdle イベント ハンドラを記述すると、アプリケーションがアイドル状態になった際に、特別な処理を実行させることができます。 アプリケーションは、コードを処理していないときに、アイドル状態になります。たとえば、アプリケーションは、ユーザーからの入力を待っている際になどアイドル状態になります。
OnIdle は、アプリケーションがアイドル状態に移る際に、一度だけ呼び出されます。Done パラメータが false に設定されない限り、継続して呼び出されることはありません。Done を false に設定したアプリケーションは、過度の CPU 時間が消費されるため、システム全体のパフォーマンスに影響がでます。 うーん。
読んだんですが実例コードないから、よくわからないんですよ。 使い方がよくわからないから助けて、と言うのがよくわからない
使いもしない機能の使い方を知らなくても困らないのでは?
TActionの更新などはOnIdle イベント 内ではないけど、OnIdle イベント が呼ばれるプロシージャで行われている
直ちに更新する必要があるわけじゃないけど定期的に更新する必要がある場合に使う感じかね
同じ用途でTTimerなんかもあるけど、TTimerの場合アプリがなんか他のメッセージ処理していても時間が来れば呼ばれるのに対して
OnIdleは他のメッセージ処理をしている間は呼ばれない
ユーザの操作(入力)に対してアプリが応答、その最後に状態を更新するなんてのが使い方としては適正かなと思う
ただ場合によってはいつまでたても呼ばれない可能性もあるのと
OnIdleに時間のかかる処理を入れるとアプリの応答性が悪くなるので注意が必要 >>158
一秒間60フレーム(古いかな)とかを実現するのにタイマーより(精度が)良いのかと思ってます。
使ってみたいだけで確かに困ってはいないです。 >>159
精度はないよ
言った通り、アプリのメッセージループでウインドウメッセージが空だった時に実行される
つまりずっとメッセージが届けばいつまでたっても実行されない可能性がある
一定時間に動作することを期待するのは無理
入力待ちのように「空いた時間に処理をさせる」ための仕組み .net用に作られたCOMコンポーネントをbuilderからアクセスできる?
調べてもbuilderからCOMは作れるってくらいしか見つからないんだけど。 C++Builder10.4.2でSDL2を使用したいのですが
.includeの段階で躓いています。
includeとlibのパスは何処を指定するといいのでしょうか? 最近のバージョン使ってる人ってどのくらいいる?
10.4.2でWin64使ってるけど品質がクソ過ぎてイヤになってくる 10年前のXEから付いてくるCodeSiteを初めて使ったんだけど、
すっげー便利だな
10年間も知らずにテキストのログファイルにシコシコ出してたのが悔しいのう 10.4.2使ってるよ
デバッガがダメダメなのもそうだけど、TwineCompileを有効にすると落ちやすいのと
ヘッダを書き換えるとクリーンアップせざるを得ないのが悲しい
サードパーティーコンポーネントのインストーラが残念なのも何とかして欲しい TwinCompileは何ともないな
GetItのフリーのコンポーネントはC++向けの設定をちゃんとやってくれない物が多いね
前のバージョンではそんなこと無かったんだけど、10.4ではTurboPack系のコンポーネントは全滅してる Win64 C++では実行時パッケージを使わないとデバッグ中の例外でブレークしない(直ったことになってる) TwineCompile何ともないのか。じゃあこちらの環境依存かな
こちらは逆に10.4.2にしてからTurboPack系が良くなった
実行時パッケージをリンクしない様にするとトラブル多いね
ブレークが効かないのはこちらも困ってる
ステップ実行もおかしくなるし、この辺は早急に直して欲しいね。
後、エディタの「定義の検索」が全く効かないのだが、これもおま環なのだろうか エディタの支援機能はC++では2009の頃から使い物にならない
TurboPack系は10.4.2でC++のライブラリパスの設定が漏れてて静的リンクできない
>>169
普段から実行時パッケージ使ってるの?
俺は使わない主義だけど >>170
すまん、今日入れ直したらできなくなった
前は自分でパス通してたのかもしれん
BPLはVCランタイムと違ってどの環境にも入っている訳じゃないから
実行時パッケージは通常使わないね
でもFireMonkeyだと10MB超えるから悩ましいところ 仕方ないからデバッグビルドでは実行時パッケージ有りにしてる
今のプロジェクトは16MBにもなる
客がなんか言ってきたら、EXCELは22MBだよって言おうと思ってる
お前のソフトはEXCELほどの機能があるのか?と言われると困るけどw 10.4.2入れ直したらエクスプローラからのドラッグ&ドロップで
WM_DROPFILESメッセージが飛ばなくなってるな
昔からある
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles)
END_MESSAGE_MAP(TForm)
でもイベントハンドラに飛ばない
過去できていたプロジェクトでも再構築すると同症状になるが、これはおま環なんだろうか >>173
俺の所ではちゃんと動く
IDEは確かにクソだが出来上がるコードについての問題には遭遇した事は無い
DragAcceptFiles()を呼んでないか、
フォームの別の階層にDispatch()があってそれが呼ばれてるか、ではないか? 原因はVMWare workstation playerのVMWare Toolsで、再インストールしたら治った
後出しで申し訳ないが、VMにインストールしてあるんだよ
最近になってやっとFiremonkeyへ移行するべく動いているのだが
グラフィック周りはこちらの方がいいね
画像をファイルから読み込むだけでもパフォーマンス差があるのは驚いた
SynEditのようなVCLしかないコンポーネントもそろそろこちらをサポートしてくれないかね sqlite3.dll を使ってみようと思ったんだが
まずは簡単にsqlite3_openとsqlite3_closeだけを使ってみるのが目標
implib.exe 使って同梱のdefファイルからlibを生成
で、libをプロジェクトに追加したんだけど
[リンカ エラー] 外部シンボル '_sqlite3_open' が未解決(C:\CBUILDER5\TEST\UNIT1.OBJ が参照)
[リンカ エラー] 外部シンボル '_sqlite3_close' が未解決(C:\CBUILDER5\TEST\UNIT1.OBJ が参照)
これが出る
他にしなきゃいけないことってなんだろうか? 単にシンボル名が違うんじゃね。tdumpでリスト出してみるとか。
まさかextern "C"忘れてるってのはないよな。 インクルードヘッダーファイルの方
もともとextern "C" { } で括られてたのもあるけど
括るのはダメかもと思って関数のほうにextern "C" 付けてみたけどダメだった implib使う方法でダメならコッチは
ttp://docwiki.embarcadero.com/RADStudio/Sydney/ja/チュートリアル:VCL_アプリケーションから_SQLite_データベースに接続する とりあえず、implib -? してオプションの説明の意味を考えてみたかから どうもありがとうございました
解決しました
本体側のアンダースコアを消すことばかり考えていてインポートライブラリ側にアンダースコアをつけると言うことを失念していました リンカの出すエラーメッセージ見りゃわかるけど
UNIT1が参照しようとしているシンボル名にはおかしいところは無いからな
ならばimplibで作ったシンボル名が何か違うはずって気づく
そしてimplibのオプションを確認するところに行き着く
まあ冷静に考えましょってことで C++ builder 2009 pro使いこなしたくて、C++ builder5 learningについてた
開発者ガイド読んでるんですが、半分もわからない。
読解力ないのかなぁ。 そのC++Builder5は半分以上理解してたのかな 今ならネットに転がっている情報を拾う方がいいような気がする
特にUnicode周りは慣れておくといいよ
勉強不足もあって多言語対応で結構躓いた そうですね。2009から文字コード変わってるんですよね。
Ansistringのメソッドとかももう一度覚えたいから5をいじってます。
(開発者ガイドよりヘルプのほうが勉強になります)
今は2009で C++ BuilderでWindowsゲームを作ろうって本 使ってます。
DirectXなんか全然使わないのですが色々と勉強になります。
Comunity入れるまではbprファイルを自動変換してくれてたのですが、
Javaがらみっぽいエラーが出て変換できなくなりました。 5を使うってどこにも書いてないんだが
2009を使いこなしたいってあって、Community Editionもインストール済みみたいだけど、
だったらCommunity Editionだけで掘り下げればいいと思うけど そうですね。
5は使わないでいいですね。
5はヘルプだけ使います。
あと、頭は悪いと思います。 そんな卑下しなくても、5から使っているなら突き進めばいいのでは
BCB5からBCB6に乗り換えのメリットが感じられなくて無理やり
WinXP上のBCB5で「Win10で動作させるUSB-IO2.0(AKI)を制御するソフト」を
作ったりもしたけど、ECB10への移行は大した苦労はなかった
AnsiStringとUnicodeStringの変換は、慣れればいいし >>190
ありがとうございます。
また質問なのですがHotKeyがヘルプ見てもよくわかりません。
どういうものなのでしょうか。 ここで聞くべきか分からないんだが質問。C++Builder2009
typedef std::pair<UnicodeString,int> TPair;
TPair P0[3] = { TPair(L"ABCDEF",20) , TPair2(L"JKLJM",40) , TPair2(L"BMNJKLOI",60) };
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TPair P1[3] = { TPair(L"ABCDEF",20) , TPair2(L"JKLJM",40) , TPair2(L"BMNJKLOI",60) };
}
//---------------------------------------------------------------------------
こんな感じのコードとしてP1のほうはちゃんと初期化されるんだけど
P0[0]のintが正しく初期化されない P[0].second=36974812 ってなる
ただしstd::pair<int,int>やstd::pair<int,UnicodeString>だと大丈夫
何が原因なのかわかりますか? 直し忘れた
TPair P0[3] = { TPair(L"ABCDEF",20) , TPair(L"JKLJM",40) , TPair(L"BMNJKLOI",60) };
でお願いします Qtが商用に傾いてきたからCommunity Editionでもと思ったが、
年間売り上げ55万円までって・・・実質商用利用出来ないやん 日本で現行版使ってるのって、俺以外にいるのかしら?
ってくらい話題にあがらないな
使ってる人は未だに5とか6使ってる感じ 縺セ縺菴ソ縺」縺ヲ繧九h縲ょョカ縺ィ莨夂、セ縺ォ1縺、縺壹▽縲
莨夂、セ縺ッSymantecEP縺悟�縺」縺ヲ縺縺ヲ
菴懈�縺励◆繧「繝励Μ縺御ク肴э縺ォ豸医&繧後◆繧翫@縺ヲ繧仇
縺薙�繧ヲ繧」繝ォ繧ケ縺ィ隱、隱崎ュ倥☆繧句撫鬘御ス輔→縺九@縺ヲ谺イ縺励>繝サ繝サ繝サ 何故か文字化けしてる
まだ使ってるよ。家と会社に1つずつ。
困っている事といえば
SymantecEPがコレで生成した実行ファイルを
ウィルスと誤認する事がある位かねぇ 10.4つかってるよ。メイクがまともに動かないのはなんでだろうねw
a.h修正してもa.cppしかコンパイルしない。他のa.hをインクルードしてるcppは無視。 その動作は、「普通の」makeなら普通だろ
a.cppがa.hに依存しているというのは、Makefile内に依存ルールが書いてなければmakeにはわからない
borlandは.objのコメントを使って依存関係をobjに埋め込んで全てのファイルの更新を確認する機能をつけたけどね
.autodependってやつ
それが無くなってるかoffになってるかってことじゃね 11のTwineCompile早よクレ
後これだけあれば移行できる 本当に誰も買ってないと思うよ
俺は2009から使ってるけど 質問です。
TListBoxで最初から、二番目の項目を選択状態にしておく方法がありますか? ListBox1->Selected[1]=true;
すいません、できました。 M$に開発者を刈り取られても頑張っているから応援したいが、
高杉てとても手が出ないよ
コミュニティ版はエラーが出て落とせないし その通りだよ
20万近く払って買った開発ツールのヘルプが前バージョンのまま
しかも報告されたissueは、won't fixでクローズだぜ
ホントにupdate2でも直ってない
コソッとファイルだけリリースして、自分で上書きしてレジストリを書換よ、だと 確かに高いですね。
C++Builder6 pro ヤフオクで28000円位で二件見つけたけど全然売れてない。
さすがに6は古いのかな。 >>212
同感です。
とても良いツールで価値があるのは分かりますが、もう少し個人が手を出せる価格に下げてもらわなければ、どんどんユーザーが離れてしまうことが気がかりです。
以前CB使ってたけどVCに乗り換えたと言う話は残念ですが、たまに聞きます。
自分は会社でエンタープライズ版使っていましたが自分のPCにはCommunity版です。 誰でもいいですから、Lazarus C++Builder版を仕上げて下さい。
おねがいします。 C/C++おぼえた後に他の言語おぼえるのって苦しいです。
自分はあとはPHPでお腹いっぱい。 PythonもやるけどアプリはまだC++Builderだなぁ
逆にWeb系は全然やる機会が無い >>211
GetItがあるから頻繁にBug fixのアップデートしてくれるのかと思ってたら
Hot fixが1、2度出るだけであとは次のバージョンが出るまでお預けだもんな
Visual Studioの更新頻度と比べるとしょぼい