問題タブ [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.
c++builder - スレッドの実行後に進行状況バーが NULL になる
プログレスバーとxmlをサーバーにアップロードするボタンを備えたフォームがあります。ボタンが押されている間、ソケットを作成する新しいスレッドが作成され、データがチャンクでサーバーに送信され、その間に進行状況バーが更新されます。ここで、アップロード ボタンをもう一度押すと、アクセス違反が発生し、デバッガーでプログレス バー オブジェクトのアドレスが NULL になります。プログレス バーが解放される理由がわかりません。
PS ターゲット OS は Windows PS2 です。同じコードがスレッドを使用せずにメイン スレッドで実行される場合、この問題はないようです。スレッド全体でプログレス バーの使用をスキップしても、アップロード ボタンを最初に押した後、再び null に設定されます。
スレッド コンストラクター:
OnTerminate ハンドラー:
実行方法:
2 つの補助機能:
OnConnect ハンドラー:
そして進行状況バーの Update メソッド:
properties - += 演算子はプロパティ セッターを呼び出しません
Embarcadero C++Builder XE8 で次のコードを使用しています。
Unit1.h で:
Unit1.cpp:
私が呼び出すときのメインプログラムで:
Value+= 10
を呼び出さないのはなぜSetValue(20)
ですか?
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()
、既存の行に行を追加するだけです。初心者なのでどこが悪いのかわかりません。
c++ - C++ Builder / Firemonkey でのフォーム作成によるメモリ管理
これまでのところ、私のアプリケーションでは、実行時に作成された追加のフォームはすべてモーダルにする必要があることがわかりました。したがって、新しいフォームを作成するときは、次のコード ブロックに似たものを使用します。
このアプローチでは、ユーザーがフォームを閉じた後、フォームのメモリは簡単に削除されます。
ただし、非モーダル ダイアログのメモリ管理を処理する方法を理解しようとすると、問題が発生します。明らかに、ShowForm
フォームは作成直後に削除されるため、メソッドの最後で単純に delete を呼び出すことはできません。だから私はこのようなものを残しています:
このドキュメントと私が作成したテスト アプリケーションに基づいて、所有者が閉じられるとポインターが削除されることがわかりましform
た。ただし、それでも次のシナリオが残ります。
上記の方法と同じように、コードを使用FormA
するインスタンスを作成して表示するボタンがあるとします。FormB
ボタンをクリックして を作成し、を3 回FormB
閉じます。が閉じられるFormB
まで、 の 3 つのインスタンスがメモリに残ります。 FormA
FormB
フォームが閉じられるとフォームに割り当てられたメモリが削除されるように、フォーム作成用のメモリを管理するにはどうすればよいですか? これには標準的なベスト プラクティスがありますか、それとも組み込みの機能が不足していますか?
c++ - 特定のタイプのフォームが Firemonkey アプリケーションで既に開いているかどうかを検出する
新しいフォームを開く前に、アプリケーションで特定の種類のフォームが開いているかどうかを確認する方法を考え出そうとしています。この理由は、一度に 1 つのインスタンスを開くだけで意味のあるアプリケーションの特定のフォームがあるためですが、それらを厳密にモーダルにしたくないからです。
これを解決するために、次のメソッドを実装しました。これScreen->Forms
は、提供されたフォームのタイプに各フォームを反復してキャストしようとします。キャストが作成されたかどうかを調べたところ、フォームのタイプがすでに開いていることがわかりました。
次に、次のように、フォームを作成しようとしている場所でメソッドを呼び出します。
私が直面している問題は、渡したフォームの種類に関係なく 、常にTCommonCustomForm
オブジェクトを正常にキャストできるように見えることです。Screen->Forms
特定のタイプのフォームがアプリケーションに既に存在するかどうかを正常に検出するようにロジックを変更する方法はありますか? 私が見なければならないこの問題へのより良いアプローチはありますか?