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

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 投票する
1 に答える
145 参照

c++builder - スレッドの実行後に進行状況バーが NULL になる

プログレスバーとxmlをサーバーにアップロードするボタンを備えたフォームがあります。ボタンが押されている間、ソケットを作成する新しいスレッドが作成され、データがチャンクでサーバーに送信され、その間に進行状況バーが更新されます。ここで、アップロード ボタンをもう一度押すと、アクセス違反が発生し、デバッガーでプログレス バー オブジェクトのアドレスが NULL になります。プログレス バーが解放される理由がわかりません。

PS ターゲット OS は Windows PS2 です。同じコードがスレッドを使用せずにメイン スレッドで実行される場合、この問題はないようです。スレッド全体でプログレス バーの使用をスキップしても、アップロード ボタンを最初に押した後、再び null に設定されます。

スレッド コンストラクター:

OnTerminate ハンドラー:

実行方法:

2 つの補助機能:

OnConnect ハンドラー:

そして進行状況バーの Update メソッド:

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

properties - += 演算子はプロパティ セッターを呼び出しません

Embarcadero C++Builder XE8 で次のコードを使用しています。

Unit1.h で:

Unit1.cpp:

私が呼び出すときのメインプログラムで:

Value+= 10を呼び出さないのはなぜSetValue(20)ですか?

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

android - C++ Builder XE 8 (firemonkey) で TOpenDialog を手動で作成する

C++ Builder XE8 を使用しています。Androidでは動かないので、TOpenDialog自作しようと思っています。私の論理は非常に単純です。「/storage」からファイルとフォルダーのチェックを開始し、上のすべてのアイテムを表示しTListViewます。フォルダー (名前) に触れると、そのフォルダーが開き、ファイルに触れると、ラベルに名前が表示されます。TListViewそこで、の OnItemClickイベントに関数を割り当てました。

ここにコードがあります。fpath は文字列、Label1 は現在のフォルダーを示し、Label2 は選択されたファイルを示しています。

以下は、ファイルとフォルダーをスキャンして表示する関数のコードです。stringlist は TStringList です。

ここでの問題は、ListView1->ClearItems()TForm1::showfiles で使用すると、「アドレス 00000009 にアクセスしているアドレス (ランダムな番号) でのアクセス違反」というエラーが表示されることです。使用しない場合はClearItems()、既存の行に行を追加するだけです。初心者なのでどこが悪いのかわかりません。

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

c++ - C++ Builder / Firemonkey でのフォーム作成によるメモリ管理

これまでのところ、私のアプリケーションでは、実行時に作成された追加のフォームはすべてモーダルにする必要があることがわかりました。したがって、新しいフォームを作成するときは、次のコード ブロックに似たものを使用します。

このアプローチでは、ユーザーがフォームを閉じた後、フォームのメモリは簡単に削除されます。

ただし、非モーダル ダイアログのメモリ管理を処理する方法を理解しようとすると、問題が発生します。明らかに、ShowFormフォームは作成直後に削除されるため、メソッドの最後で単純に delete を呼び出すことはできません。だから私はこのようなものを残しています:

このドキュメントと私が作成したテスト アプリケーションに基づいて、所有者が閉じられるとポインターが削除されることがわかりましformた。ただし、それでも次のシナリオが残ります。

上記の方法と同じように、コードを使用FormAするインスタンスを作成して表示するボタンがあるとします。FormBボタンをクリックして を作成し、を3 回FormB閉じます。が閉じられるFormBまで、 の 3 つのインスタンスがメモリに残ります。 FormAFormB

フォームが閉じられるとフォームに割り当てられたメモリが削除されるように、フォーム作成用のメモリを管理するにはどうすればよいですか? これには標準的なベスト プラクティスがありますか、それとも組み込みの機能が不足していますか?

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

c++ - 特定のタイプのフォームが Firemonkey アプリケーションで既に開いているかどうかを検出する

新しいフォームを開く前に、アプリケーションで特定の種類のフォームが開いているかどうかを確認する方法を考え出そうとしています。この理由は、一度に 1 つのインスタンスを開くだけで意味のあるアプリケーションの特定のフォームがあるためですが、それらを厳密にモーダルにしたくないからです。

これを解決するために、次のメソッドを実装しました。これScreen->Formsは、提供されたフォームのタイプに各フォームを反復してキャストしようとします。キャストが作成されたかどうかを調べたところ、フォームのタイプがすでに開いていることがわかりました。

次に、次のように、フォームを作成しようとしている場所でメソッドを呼び出します。

私が直面している問題は、渡したフォームの種類に関係なく 、常にTCommonCustomFormオブジェクトを正常にキャストできるように見えることです。Screen->Forms

特定のタイプのフォームがアプリケーションに既に存在するかどうかを正常に検出するようにロジックを変更する方法はありますか? 私が見なければならないこの問題へのより良いアプローチはありますか?