問題タブ [c++builder-xe5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
354 参照

deployment - C++ Builder XE5 - Deployment Manager をオフにする方法

ここでそのような質問をするのが適切でない場合は申し訳ありませんが、Embarcadero のフォーラムでは質問を投稿することが許可されていないため、頭がいっぱいです。

C++ Builder IDE の「デプロイ」機能を有効にして、アプリケーションに依存する dll および bpl ファイルをテストしました。完了すると、厄介な状態に陥っていることに気付きました。デバッグを実行できません。 (PAServerを使用して)リモートPCに接続せずに!オフィスから離れている場合、つまり、クライアントの場所または自宅でフィールドサービスを行っている場合、アプリケーションをデバッグできないため、これは私にとって大きな問題を引き起こしています。

展開プロファイルを削除しようとしましたが、プロジェクトをコンパイルするたびに再作成され、ソース コードのコンパイルと実行時に DEPLOY コマンドが実行されます。アプリケーションの .exe を手動でクリックしてアプリケーションのテストを続行するには、リモート PC への接続試行がタイムアウトするまで待つ必要があります。

「展開」機能を有効にする前と同じように、ローカル マシンでデバッグを実行できるように、「展開」機能をオフにする方法はありますか?

0 投票する
0 に答える
261 参照

c++builder - TFrame のスケーリング

TFrameC++Builder でa をスケーリングするための正しい手順は何ですか?

PixelsPerInch=120 (別名、Windows フォント サイズ 125%) で開発していますが、フォームを PixelsPerInch=96 (別名、デフォルト) でも動作させたいと考えています。

私のメイン フォームは正常に読み込まれます。作成する VCL コードにTFormは、デザイン PPI がランタイム PPI と異なるかどうかのチェックが含まれており、その時点ですべてが正しくスケーリングされます。

ただし、 をロードするTFrame場合、自動スケーリングは行われません。私が発見した限りでは、手動で呼び出す必要がありますFrame1->ScaleBy(M, D);

これはほとんどの場合機能しますが、バグ (以下で説明します) があるため、正しくスケーリングされていないフレームが生成されます。

フレームを作成し、フォームのようにロード時にスケーリングする適切な方法は何ですか?

現在、次のものを使用しています。

フレームをアクティブにしたいときは、`f->Parent = fMain->Panel1; (*f)->ScaleBy(M, D);

Frame には などを使用するコントロールがあるという理論に基づいて、 をf->Parent = fMain->Panel1;呼び出す前にも書いてみました。ただし、これにより他のバグが発生します。 ScaleByParentFont


バグは、 と を含む を含むフレームまたはフォームを呼び出すと、ラベルがウィンドウScaleByの本来よりもはるかに高い位置に表示されることです (ウィンドウの上部から離れている可能性もあります)。TLabelAutoSize=trueParentFont=falseAnchorsakBottom

私は問題を突き止めました:TControl.ChangeScale関数には への呼び出しが含まれてScaleMarginsおり、Margin プロパティにAlignControlsは親フォームを呼び出すオンセット トリガーがあり、 でコントロールを移動しますAutoSize=true

をステップ実行するVcl.Controls.pasと、最初はラベルが正しくスケーリングされることがわかりますが、次のコントロール (たまたまラジオ グループ) が処理されると、AlignControlsがトリガーされ、ラベルの が変更されますTop

このAlignControls関数はTLabel、再スケーリング操作の途中で呼び出されたときに、先ほど説明したパラメーターで を処理できないようです。

理由をしっかりと突き止めていませんが、親のフォームまたはフレームがまだスケーリングされていないためだと思います(ScaleControls関数は自己をスケーリングする前にすべての子をスケーリングします)ので、フォームの古いものを使用して実際の結果Heightを計算しますTop下へのアライメントを行うことから。

csLoadingスケーリング コードがコンポーネントの状態をチェックし、 への呼び出しを含む多くの反応効果を無効にするため、この効果は Form を初めてロードするときにトリガーされませんAlignControls

の場合にのみバグがトリガーされる理由がわかりませんParentFont=false


私の現在の回避策は、問題のラベルを別のラベルに手動で再配置する行を FormResize ハンドラーに含めることですParentFont=true(したがって、バグの影響を受けません)。

0 投票する
2 に答える
1462 参照

delphi - ファイルの書き込み時に IdHTTPServer を使用してファイルを提供する

TIdHTTPServer関数を使用して、クライアントにファイルを提供するために作業していResponseInfo->ServeFileます。これは、「静的」なファイル、つまり他のプロセスによって書き込まれていないファイルに対してはうまく機能します。コードからわかる限り、ServeFile 関数は内部的に を使用しているため、書き込みTIdReadFileExclusiveStream中のファイルを読み取ることができませんが、他のプロセスによって書き込まれているファイルも送信できる必要があります。

そのため、私は自分で FileStream を作成し、ContentStreamプロパティを使用してそれをクライアントに返すようにしましたが、クライアントで 0 バイトのファイルを取得し (ファイルが書き込まれているかどうかに関係なく)、何が表示されているかわかりません。 m 行方不明または間違っています。OnCommandGetイベントハンドラーで使用しているコードは次のとおりです。

この時点での ContentLength プロパティには有効な値 (つまり、ContentStream->Size を呼び出したときのファイル サイズ) があり、ファイルが途中で変更されたとしても、それをクライアントに送信したいと考えています。

WriteContent() 関数、WriteHeader() を削除しようとしましたが、結果は同じです。いくつかの例を検索しましたが、見つかったいくつかはこのコードとほぼ同じであるため、何が問題なのかわかりません。ほとんどの例には WriteContent() 呼び出しが含まれていないため、それらを削除しようとしましたが、違いはないようです。

補足として、書き込み中のファイルは書き込みが完了するまでに 24 時間かかりますが、それはクライアント側から予想されることです。必要なのは、要求時に既に書き込まれているバイトだけです (多少少なくても有効です)。ファイルが削除されることはありません。ファイルは大きくなり続けるだけです。

何か案は?

アップデート

Fiddler を使用すると、これに関連するプロトコル違反に関する警告が表示されます。たとえば、次のようになります。

Content-Length mismatch: Response Header indicated 111,628,288 bytes, but server sent 41 bytes

コンテンツの長さは正しく、それはファイル サイズですが、アプリが 41 バイトしか送信しなかった理由がわかりません。

0 投票する
1 に答える
1928 参照

delphi - Unicode パラメーターを使用した C++ Builder の TRestRequest

サーバーからデータを取得するために TRestRequest を使用しています。パラメータに Unicode 文字列値"ôpen"を入力する必要があります。ただし、クエリ パラメータとしてこの Unicode 文字列を使用して Execute を呼び出すと、クラッシュが発生します。

私のコード:

URL に「ôpen」を正しく追加するにはどうすればよいですか?

0 投票する
0 に答える
110 参照

firemonkey - FireMonkey に GUI コンポーネントを追加する方法

C++Builder XE5 Update 2 で新しいFireMonkey デスクトップ アプリケーションを開始しました。動的 RTLを使用するの設定をオフに変更し、ランタイム パッケージとのリンクをオフに変更しました(そうしないと、プログラムの実行時に起動時にアクセス違反が発生します)。つまり、何も変更しませんでした。

プログラムは、何もない空白のフォームとして正常に実行されます。インターネットのチュートリアルに基づくと、VCL アプリケーションと同じ方法でフォームにコントロールを追加できるはずです。ただし、ツール パレットには何も表示されません。

ツール パレット

「フレーム」だけがあり、他のコントロールはありません。フレームを追加しようとすると、No frames are available to insert. New frames may be created from the File|New|Other selections..

File|New|Other|FireMonkey Frame に移動すると、エラーが発生しますError creating form: Access violation at address 0B6CD96E in module 'fmxdesigner190.bpl'. Read of address 00000000.

フォームにコントロールを追加するにはどうすればよいですか?

0 投票する
1 に答える
784 参照

winapi - C++Builder XE5 で Win32 アプリケーションを作成する

古いバージョンの Borland C++Builder では、コンソール ウィザードを使用して Win32 プログラムを開始していました。XE5からはなくなりました!どうやって始めますか??

0 投票する
1 に答える
5962 参照

indy - Indy TCP クライアントの例?

C++Builder に Indy 10 ソケットのサンプル コードはありますか?

Indy Demos ページの 2 つのサンプル リンクは無効なリンクであり、広範な検索を行ってもサンプル コードを見つけることができませんでした。

JSON メッセージを送受信するクライアントを作成しています。複雑なプロトコルや SSL は必要ありません。

TIdTCPClient のメンバー関数に基づいて id1->Socket->WriteLn、サーバーが受信するものを送信するために書き込むことを推測できましたが、サーバーの応答を受信する方法はまだわかりません。

また、Indy TCP クライアントの概要に関するドキュメントはありますか? 一部の Delphi スニペットではid1.IOHandler.WriteLn代わりに使用されていましたが、IOHandler の目的、どちらを使用すべきか、IOHandler.WriteLn と Socket.WriteLn の違いなどについての説明はありません。

0 投票する
1 に答える
218 参照

c++builder - C++Builder - アプリケーションの起動時にアクションを実行する正しい方法

C++Builder XE5 を使用。

私のメイン フォームには、アプリケーションが起動してメイン フォームが表示されるとすぐに接続してブロックしたい Indy ブロッキング ソケットがあります。

これを行う正しい方法は何ですか?

以前のバージョンまたは C++Builder ではOnCreateAfterConstructionどちらも信頼できませんでした。通常、このようなコードをメイン.cppファイルの の直前に配置しますが、ここでは適切ではありません。これは、ブロックする (そしてメッセージ処理をApplication->Run()に依存する) ためです。TIdAntifreeze

私が考えた 1 つの方法は、カスタム Windows メッセージを定義してそれを自分自身に投稿することですが、「適切な」方法があるかどうか疑問に思っています。

0 投票する
3 に答える
1980 参照

c++builder - TCheckListBox チェック項目の数を取得

簡単な質問があります。ループを使用せずにCheckBoxListBoxでチェックされたアイテムの数を取得するには?