問題タブ [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 に答える
909 参照

c++ - Firemonkey: TLabel に収まるようにテキスト フォントを縮小する

TLabelテキストが大きすぎてラベルの範囲に収まらない場合は、 a のフォント サイズを小さくしようとしています。これを実現するためにラベルに設定できるプロパティが見つからなかったため、独自のメソッドを作成してみました。私の方法は、TCanvas.TextWidthを使用してラベル内のテキストの幅を測定し、テキストの幅がラベルの幅に収まるまでフォントを縮小することで機能します。

これはうまくいく場合もありますが、フォントが十分に縮小されない場合もあります。呼び出しから得られる値Canvas->TextWidthは、テキストに合わせるために実際に必要なラベルの幅のピクセル数よりもはるかに小さいようです。

私はCanvas->TextWidth間違って使用していますか?TLabel文字列の幅を計算したり、テキストが寸法内に収まるようにフォントのサイズを変更したりするより良い方法はありますか?

編集:
この場合、TCanvasラベルが置かれている関数に渡しています。TCanvasそれとLabel->Canvas. どちらもテキスト幅に同じ数値を与え、両方とも文字列全体を表示するために必要なピクセル単位の実際の値を下回っています。

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

c++ - Embarcadero TThread: C++ で TThreadMethod を渡す

編集:何が起こっているのかをよりよく理解できたので、この質問をより適切に表現して、より役立つようにできると思います。

次の Delphi コードを C++ で複製しようとしています。

TMemoコードの目的は、スレッド セーフな方法でフォームのを更新するメソッドを呼び出すことです。これは、私が呼び出そうとしているメソッドのC++バージョンですThread.Queue

CLANG 拡張なしで BCC32 コンパイラを使用しているため、Lambda を使用することはできません。代わりに、このドキュメントに従って、必要な作業を行うためにメソッドをTThreadProcedureオーバーライドする継承クラスを作成する必要があります。Invoke()次に、そのクラスのインスタンスを に渡すことができますTThread::Queue

TThreadProcuedure呼び出しメソッドを継承して含む次のクラスを作成しました。

ただし、TThreadProcedureは抽象クラスであるため、単純にそのインスタンスを作成して に渡すことはできませんTThread::QueueTThreadProcedureクラスのインスタンスを に渡すときに呼び出される関数を継承して定義する適切な方法は何TThread::Queueですか?

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

c++ - モーダル ダイアログ自体がクリックされない限り、モーダル ダイアログが開いているときに Firemonkey アプリケーションにフォーカスできない

ユーザーがログインすると、モーダルダイアログが表示され、そこで作業したい施設を選択する必要があるアプリケーションがあります。この段階で、アプリケーションは次のようになります。

ここに画像の説明を入力

このメソッドを呼び出すと、モーダル ダイアログが表示されます。

この場合、TFacChoiceFormから継承するTFormため、関数はここに記載されている標準メソッドShowFacChoiceForm()を呼び出しています。TForm.ShowModal

私が直面している問題は、アプリケーションがフォーカスを失った場合、モーダル ダイアログ自体をクリックしない限り、再びアクティブ ウィンドウになれないことです。これをよりよく説明するために、次のシナリオを提示します。

金曜日の午後だとしましょう。私は少し間抜けでウェブ コミックを読むことにしました。アプリケーションを開いた状態で、その上に別のウィンドウを開きます。次のようにします。

ここに画像の説明を入力

その後、どこからともなく上司がパフォーマンス レビューにやってきたので、メイン フォームのどこかをクリックしてアプリケーションに再び焦点を合わせようとしました。たとえば、次の画像のこの赤い X の位置。

ここに画像の説明を入力

上の画像では、赤い X の場所をクリックしました。これで、Web コミックを含むフォームとアプリケーションの両方が非アクティブになります。したがって、私のアプリケーションは画面の前面に来ません。

ただし、次の画像の赤い X のように、モーダル ダイアログのどこかをクリックできれば...

ここに画像の説明を入力

...すると、私のアプリケーションは予想通り前面に出てきます。

ここに画像の説明を入力

これを解決するために、Windows API からSetForegroundWindowのようなものを使用することを検討しましたが、モーダル ダイアログが開いている間はメイン フォームがイベントを発生させないため、イベントをトリガーする方法を見つけることができませんでした。

私の質問は、ユーザーがアプリケーションのどこかをクリックした場合に、それが前面に表示されるようにするにはどうすればよいですか? これを行うためにフォームで編集できるプロパティはありますか?

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

c++ - Firemonkey: TScreen.Forms を使用してアプリケーション内のすべてのフォームを反復処理する方法

アプリケーションで開いているフォームを繰り返し処理しようとしています。私の目標を達成するために使用できるように見えるFMX.Forms.TScreen.Formsのドキュメントを見つけました。とはいえ、どのように使うべきか迷っています。

最初に、フォームの CPP ファイル内の関数でこれを試しました。

これによりエラーが発生しました'Member TScreen::FormCount cannot be used without an object'

Applicationこれは、フォームまたはグローバル変数からこのプロパティにアクセスする必要があることを意味すると考えました。両方試してみました

ただし、これらのオブジェクトのいずれに Formsも存在しません。TScreen

にアクセスするにはどうすればよいForms.TScreen.Formsですか?

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

c++ - カスタム Firemonkey コントロールのクリック イベントをオーバーライドする方法

コントロールから継承するカスタム Firemonkey コントロールを作成しようとしていますTListView。ユーザーがコントロールをクリックすると自動的に実行される機能をコントロールに追加したいと考えています。したがって、私の目標はOnItemClick、コントロールのフォームにメソッドを指定することではなく、コントロール自体に機能を直接追加することです。

のオンクリック ハンドラを利用するために何をする必要があるかを理解するのに苦労していますTListView。私の頭の中では、私のソリューションは次の疑似コードのようになると思います。

ただし、どのメソッドをオーバーライドしようとするか、またはこれをどのように行うべきかについて、ドキュメントで何も見つけられないようです。

「クリックイベント」ハンドラーの呼び出しに関するこの情報を見つけました。次のような簡単な例を設定しました。

これは正常に機能しますが、ドキュメントによると:

ユーザーがコントロールの OnClick イベントにハンドラーを割り当てた場合、コントロールをクリックすると、そのメソッドが呼び出されます。

したがって、Click()コントロールのオン クリック イベント プロパティのいずれかが設定されている場合、コントロールのメソッドに配置した追加のロジックは失われます。

カスタム コントロールがクリックされたときに何が起こるかの機能を拡張するための適切な方法は何ですか?

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

c++ - Firemonkey: 実行時に子コントロールを TListViewItem に追加する

実行時にコントロールにTEditコントロールを追加しようとしています。コントロールを自分の選択しTListViewたコントロールの親にしたいのですが、これを行う方法が見つかりません。 TEditTListViewItemTListView

もともと、私はこれを試しました:

ただし、これにより次のエラーが発生します。

[bcc32 エラー] E2034 'TListViewItem *' を 'TFmxObject *' に変換できません

気まぐれで、リストビューで選択したアイテムを次のように型キャストしようとしましたTFmxObject:

これをコンパイルすると、実行時にアクセス違反が発生しました。

多くのドキュメントとフォーラムの投稿を検索しましたが、コード内のリスト ビュー項目にコントロールを動的に追加することに関する多くの情報を見つけることができません。スタイル エディターの使用を提案するソリューションを見てきましたが、可能であればそれを避けたいと考えています。

コントロールの親を my の項目に設定するにはどうすればよいTListViewですか? TListViewItem実行時にコントロールを追加するより適切な方法はありますか?

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

c++ - Firemonkey: TLabel text truncated despite autosize property true

I am coming across a strange issue with my Firemonkey application. Here is a screenshot of my application when run on my local Windows 8.1 machine. Inside the blue panel, is an auto sizing label with a purposely long description to make sure the sizing is working.

enter image description here

Everything seems fine, until I run the same application on a particular remote machine. Here is a screenshot of the same application, running on a remote Windows Server 2008 R2 machine.

enter image description here

As you can see, the label inside of the blue panel is now being truncated, despite its auto size property being set to true. Additionally, the "Show Logs" button has it's text truncated as well.

In addition to verifying the auto size property of the label, I have tried running the remote machine at different window sizes to see if the issue had something to do with screen resolution. However, the label continued to be truncated.

Does Firemonkey have any known issues with drawing things differently across different operating systems? Are there any display settings on the remote machine that could cause the application to render incorrectly? Anything else I should looks at to try and narrow down / resolve the issue?