問題タブ [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++ - Firemonkey: TLabel に収まるようにテキスト フォントを縮小する
TLabel
テキストが大きすぎてラベルの範囲に収まらない場合は、 a のフォント サイズを小さくしようとしています。これを実現するためにラベルに設定できるプロパティが見つからなかったため、独自のメソッドを作成してみました。私の方法は、TCanvas.TextWidthを使用してラベル内のテキストの幅を測定し、テキストの幅がラベルの幅に収まるまでフォントを縮小することで機能します。
これはうまくいく場合もありますが、フォントが十分に縮小されない場合もあります。呼び出しから得られる値Canvas->TextWidth
は、テキストに合わせるために実際に必要なラベルの幅のピクセル数よりもはるかに小さいようです。
私はCanvas->TextWidth
間違って使用していますか?TLabel
文字列の幅を計算したり、テキストが寸法内に収まるようにフォントのサイズを変更したりするより良い方法はありますか?
編集:
この場合、TCanvas
ラベルが置かれている関数に渡しています。TCanvas
それとLabel->Canvas
. どちらもテキスト幅に同じ数値を与え、両方とも文字列全体を表示するために必要なピクセル単位の実際の値を下回っています。
c++ - Embarcadero TThread: C++ で TThreadMethod を渡す
編集:何が起こっているのかをよりよく理解できたので、この質問をより適切に表現して、より役立つようにできると思います。
次の Delphi コードを C++ で複製しようとしています。
TMemo
コードの目的は、スレッド セーフな方法でフォームのを更新するメソッドを呼び出すことです。これは、私が呼び出そうとしているメソッドのC++バージョンですThread.Queue
CLANG 拡張なしで BCC32 コンパイラを使用しているため、Lambda を使用することはできません。代わりに、このドキュメントに従って、必要な作業を行うためにメソッドをTThreadProcedure
オーバーライドする継承クラスを作成する必要があります。Invoke()
次に、そのクラスのインスタンスを に渡すことができますTThread::Queue
。
TThreadProcuedure
呼び出しメソッドを継承して含む次のクラスを作成しました。
ただし、TThreadProcedure
は抽象クラスであるため、単純にそのインスタンスを作成して に渡すことはできませんTThread::Queue
。TThreadProcedure
クラスのインスタンスを に渡すときに呼び出される関数を継承して定義する適切な方法は何TThread::Queue
ですか?
c++ - モーダル ダイアログ自体がクリックされない限り、モーダル ダイアログが開いているときに Firemonkey アプリケーションにフォーカスできない
ユーザーがログインすると、モーダルダイアログが表示され、そこで作業したい施設を選択する必要があるアプリケーションがあります。この段階で、アプリケーションは次のようになります。
このメソッドを呼び出すと、モーダル ダイアログが表示されます。
この場合、TFacChoiceForm
から継承するTForm
ため、関数はここに記載されている標準メソッドShowFacChoiceForm()
を呼び出しています。TForm.ShowModal
私が直面している問題は、アプリケーションがフォーカスを失った場合、モーダル ダイアログ自体をクリックしない限り、再びアクティブ ウィンドウになれないことです。これをよりよく説明するために、次のシナリオを提示します。
金曜日の午後だとしましょう。私は少し間抜けでウェブ コミックを読むことにしました。アプリケーションを開いた状態で、その上に別のウィンドウを開きます。次のようにします。
その後、どこからともなく上司がパフォーマンス レビューにやってきたので、メイン フォームのどこかをクリックしてアプリケーションに再び焦点を合わせようとしました。たとえば、次の画像のこの赤い X の位置。
上の画像では、赤い X の場所をクリックしました。これで、Web コミックを含むフォームとアプリケーションの両方が非アクティブになります。したがって、私のアプリケーションは画面の前面に来ません。
ただし、次の画像の赤い X のように、モーダル ダイアログのどこかをクリックできれば...
...すると、私のアプリケーションは予想通り前面に出てきます。
これを解決するために、Windows API からSetForegroundWindowのようなものを使用することを検討しましたが、モーダル ダイアログが開いている間はメイン フォームがイベントを発生させないため、イベントをトリガーする方法を見つけることができませんでした。
私の質問は、ユーザーがアプリケーションのどこかをクリックした場合に、それが前面に表示されるようにするにはどうすればよいですか? これを行うためにフォームで編集できるプロパティはありますか?
c++ - Firemonkey: TScreen.Forms を使用してアプリケーション内のすべてのフォームを反復処理する方法
アプリケーションで開いているフォームを繰り返し処理しようとしています。私の目標を達成するために使用できるように見えるFMX.Forms.TScreen.Formsのドキュメントを見つけました。とはいえ、どのように使うべきか迷っています。
最初に、フォームの CPP ファイル内の関数でこれを試しました。
これによりエラーが発生しました'Member TScreen::FormCount cannot be used without an object'
Application
これは、フォームまたはグローバル変数からこのプロパティにアクセスする必要があることを意味すると考えました。両方試してみました
と
ただし、これらのオブジェクトのいずれに Forms
も存在しません。TScreen
にアクセスするにはどうすればよいForms.TScreen.Forms
ですか?
c++ - カスタム Firemonkey コントロールのクリック イベントをオーバーライドする方法
コントロールから継承するカスタム Firemonkey コントロールを作成しようとしていますTListView
。ユーザーがコントロールをクリックすると自動的に実行される機能をコントロールに追加したいと考えています。したがって、私の目標はOnItemClick
、コントロールのフォームにメソッドを指定することではなく、コントロール自体に機能を直接追加することです。
のオンクリック ハンドラを利用するために何をする必要があるかを理解するのに苦労していますTListView
。私の頭の中では、私のソリューションは次の疑似コードのようになると思います。
ただし、どのメソッドをオーバーライドしようとするか、またはこれをどのように行うべきかについて、ドキュメントで何も見つけられないようです。
「クリックイベント」ハンドラーの呼び出しに関するこの情報を見つけました。次のような簡単な例を設定しました。
これは正常に機能しますが、ドキュメントによると:
ユーザーがコントロールの OnClick イベントにハンドラーを割り当てた場合、コントロールをクリックすると、そのメソッドが呼び出されます。
したがって、Click()
コントロールのオン クリック イベント プロパティのいずれかが設定されている場合、コントロールのメソッドに配置した追加のロジックは失われます。
カスタム コントロールがクリックされたときに何が起こるかの機能を拡張するための適切な方法は何ですか?
c++ - Firemonkey: 実行時に子コントロールを TListViewItem に追加する
実行時にコントロールにTEdit
コントロールを追加しようとしています。コントロールを自分の選択しTListView
たコントロールの親にしたいのですが、これを行う方法が見つかりません。 TEdit
TListViewItem
TListView
もともと、私はこれを試しました:
ただし、これにより次のエラーが発生します。
[bcc32 エラー] E2034 'TListViewItem *' を 'TFmxObject *' に変換できません
気まぐれで、リストビューで選択したアイテムを次のように型キャストしようとしましたTFmxObject
:
これをコンパイルすると、実行時にアクセス違反が発生しました。
多くのドキュメントとフォーラムの投稿を検索しましたが、コード内のリスト ビュー項目にコントロールを動的に追加することに関する多くの情報を見つけることができません。スタイル エディターの使用を提案するソリューションを見てきましたが、可能であればそれを避けたいと考えています。
コントロールの親を my の項目に設定するにはどうすればよいTListView
ですか? TListViewItem
実行時にコントロールを追加するより適切な方法はありますか?
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.
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.
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?