問題タブ [firemonkey-fm2]
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.
delphi - Firemonkey TImageControl ズーム
Firemonkey の TImageViewer がズームを処理する方法を変更したいと考えています。マウス ホイールを回すと、画像はズームされますが、中央に表示されません。代わりに、ズーム前のマウスの位置にあったピクセルは、ズーム後もマウスの位置にある必要があります。したがって、Windows フォト ビューアーと同じように機能するはずです。
XE3 を使用し、Delphi でプログラミングしています。
delphi - TImageviewer の最大サイズ
FireMonkey TImageViewer のビットマップの最大幅と高さを知っている人はいますか? TImageViewer でベクター グラフィックスを描画しています。特定の値までしかズームできず、メモリ例外が発生します。
delphi - タブを介したナビゲーションを有効にしてグリッドにキーを入力する方法は?
私は TGrid を採用し、1 つの列に TLabels を、もう 1 つの列にデータ入力機能用の TEdits を入力しました。Tab と Enter によるナビゲーションが必要です。VCL のものとは異なり、firemonkey グリッドで公開されているそのようなオプションは見つかりませんでした。
誰でも助けてもらえますか?
delphi - BeginUpdate - EndUpdate によりフォームが開いているすべてのウィンドウの背後に移動する
私は DXScene で 2 年以上取り組んできた制御負荷の高いアプリケーションを firemonkey に移植しました。UI が変更されるたびに更新されるビジュアル コントロールの数が非常に多いため、すべての UI 更新メソッドで、それぞれプレフィックスとサフィックスが付けられた BeginUpdate メソッドと EndUpdate メソッドが必要でした。
移植後、firemonkey エンジンはこれらのメソッドに対して不規則に動作します。
- 新しいコントロールが構築されても、内容が更新されないことがあります。
- 時々それらは表示されず、強制的なフォームの最小化-最大化によって表示されます。
- そして、常にフォームが開いている他のすべてのウィンドウの後ろに表示されます。
これらを引き続き使用することをお勧めしますか、それとも代替手段が FMX に導入されましたか?
delphi - true に設定すると、フォームの一部が表示されない
私のプログラムはリリース後の状態ですので、ご容赦ください。
シナリオ
私のプログラムは、オフィス データ管理システム (車両メンテナンス指向) のさまざまな機能のさまざまなページの複数のレイアウトに基づいています。これらの機能の主要なカテゴリは、明らかにデータ入力です。さまざまな聴衆に合わせて、さまざまなスタイルを使用してきました。
要点を言えば、インターフェイスの 1 つには Excel スタイルのグリッドと、印刷/保存/リセット機能用の 3 つのボタンがあります。フォームの印刷には FastReports を使用しています。
グリッド列のカスタム クラスを開発して、その場でセルの代わりに事前定義されたコントロールのリストに対応できるようにしていますが、今のところ、必要なコントロールをコード内のセルの子にしました。
ページには 3 つのセクション (レイアウト) があります。
一番上のものは、すべてのページに固有の一種の目的 (追加/変更/部分追加) セレクターであり、必要のない場所では表示されない場合があります。
中央のものは、変更するフォームの受信番号、他のフォームに埋め込まれた情報などを受け取るためのコントロールです。ほとんどの場合、すべてではありませんが、すべてのページにあります。
最後の 1 つには、前述のようにグリッドと 3 つのボタンであるページのコンテンツがあります。
コード
これは、問題のあるページの 1 つを表示するためのコード スニペットです。すべてのデータ処理が完了し、サーバーが遷移を OK すると実行されます。
伝説
AState : ステート マシンの状態変数。表示されているページの現在の状態を示します。
AMode : ステート マシン状態列挙子。予約 (データ入力) など、アプリケーション全体のモードを示します。この問題が発生するために AState の遷移中にスキップされるため、これに関連するコードはスキップしました。
fMode : 上記と同じですが、目的のためのフォームのメイン フィールドです。
UI_CA_Controls1 : 予約モードの目的セレクター (コンボ リスト ボックス) を含むレイアウト。
EV_Mode : 便宜上の変数です。パーパス セレクタのアイテム インデックスを格納します。
UI_CA_Grid : UI_CA_Content に含まれるレイアウトと、それ自体に UI_CA_FieldGrid (TGrid) が含まれます。
fEditColumn : TEdit を持つグリッドの 2 番目の列。
fGridDataset : TStringList に関連付けられたグリッド。
///
問題
問題は、領収書セクションが表示されるたびに、コンテンツ セクションがその場で表示されないことです。動作は、それらの子コントロールと 3 つのボタンが表示されるはずの場所にマウスを置くと表示されますが、クリックするとグリッドが表示されるというものです。
この問題は、UI コードを変更することなく自然に発生し、3 日間私を困惑させました。私は、ネットワーク側 (個別のデータ モジュール) でのプロトコルとデータ処理の最適化のみを行いました。
順序
ユーザーは、すでに予約されている車両のデータを変更したいと考えています。
ユーザーは予約受付番号を入力します。( AState = 0、AMode = UIM_Booking )
クライアント クエリはサーバーであり、サーバーは完全なデータセット (存在する場合) を返します。
クライアントはデータを取得し、それをグリッドに関連付けられた TStringlist および子フィールドの文字列にコピーします。
クライアントは、データと 3 つのボタンを含むグリッドを表示しません。( AState = 1、AMode = UIM_Booking )
今まで何を試してきた
BeginUpdate/EndUpdate を使用すると、アライメント アーティファクトが悪化しました。
グリッドとボタンで SetFocus を使用した結果、一部がランダムに表示され、場合によっては完全に表示されましたが、毎回ではありませんでした。
Application.ProcessMessages を変更せずに使用するのではなく、UI スレッドがスタックして戻らないことがありました。別のスレッドで使用し、変更なしで毎秒呼び出しました。
さらに多くの問題があるメソッドに別のスレッドを使用しました。
古い作業コードを変更せずに追跡して復元しました (本当に腹が立ちました)。
更新 1: グリッドを非表示にしてからコードの最後に表示しようとしました。グリッドの一部のセルがランダムに表示されるようになりました。
回避策 1
- グリッドとボタンは、それぞれに対して SetFocus メソッドが呼び出されたときに表示できます。
- ボタンの呼び出しの順序は不安定です。最初にリセットを呼び出してから、印刷して SetFocus メソッドを保存する必要があったように、それ以外の場合は、そのうちの 1 つだけが表示されました。
- コントロールのサイズ変更を示す一瞬の再調整の不具合がありますが、それは無視できると思います。
回避策 2
- 即時ではなく、キューに入れられた再描画を行います。警告はありませんが、結局のところ、すべての再描画の間に遅延があるという問題があります。リンク: https://stackoverflow.com/a/8424750/1388291
ですから、何か提案があれば、本当に感謝しています。
delphi - Firemonkey フォームのサイズを自動調整する方法
VCL フォームには、フォームのサイズをコンテンツに合わせて自動的に調整する AutoSize プロパティがあります。Firemonkey に同様のメカニズムは見当たりません。サイズを手動で計算し、高さと幅を設定する方法はありますか?
delphi-xe2 - FireMonkey2: プリミティブ コンポーネントが Fill プロパティに応答しない理由
Embarcadero Web サイトのサンプルから TRegularPolygon という名前の新しいコンポーネントを作成しました。このコンポーネントは FM1 (XE2) ではうまく機能しますが、XE3 以降では Fill.Color プロパティが応答しません。XE4 および XE5 の設計時にはコンポーネントは黒で塗りつぶされ、実行時にはコンポーネントは白で塗りつぶされます。実行中のプログラムでプログラムによって fill.color プロパティを変更すると、fill.color プロパティが機能します。このコンポーネントは TShape から派生しています。TRectangular や TCircle などの他の Tshape コンポーネントと比較してみましたが、これらのコンポーネントはすべての XEx バージョンでうまく機能します。
コンポーネントのコードは次のとおりです (XE5 用) -->
delphi - ハードボタンの処理 vkHardwareBack
私のアプリケーションでは、3 つのタブを持つ TTabControl を使用します。3 つのボタンを持つメイン タブ (TabItem1): Button1 は TabItem2 に、Button2 は TabItem3 に、Button 3 は TabItem3 に移動します。
FormKeyUp イベントを処理してナビゲーションを制御し、次のことを行います。
押されたキーが vkHardwareBack の場合、ActiveTab が TabItem1 の場合、ユーザーがアプリケーションを終了するかどうかを尋ねるメッセージが表示されます。答えが「はい」の場合、アプリケーションを閉じます。そうでない場合は何も起こりません。この部分は問題なく動いています!
ただし、ActiveTab が TabItem2 または TabItem3 の場合は、プロパティを指定して TTabChangeItem 標準アクションを起動して、アプリケーションをメイン タブ (TabItem1) に戻す必要があります。
- タブ: TabItem1
- 方向: tdReversed
- トランザクション: ttSlide
しかし、これは起こっていません。ActiveTab が TabItem2 または TabItem3 のときにユーザーが vkHardwareBack を押すと、アプリケーションはバックグラウンドになり、ホーム画面が表示されます。
私は何が間違っているのですか?
FormKeyUp 手順は次のとおりです。
delphi - 文字列を使った移動の奇妙な動作
私はいくつかの強化された文字列関連の関数をテストしています。これを使用して、ポインターを掘り下げることなく、より高速で効率的に使用するために文字列をコピーする方法として move を使用しようとしています。
TStringList から区切られた文字列を作成する関数をテストしているときに、奇妙な問題に遭遇しました。コンパイラは、インデックスが空の場合に含まれるバイトを参照し、move によって文字列が追加されると、インデックスは含まれる文字を参照しました。
以下は、小型化されたベアボーン コードのサンプルです。
解決策を考案し、可能であれば説明をお願いします。代替案も大歓迎です。
delphi - アニメーションのトリガーが起動しない設定またはシナリオは何ですか?
スタイルブックを介してチェックボックスをアニメーション化しようとしています。
- レイアウトを作成し、「ch_style1」という名前を付けます
- 「レイアウト」という名前の別のレイアウトを追加する (整列 = 左)
- TRectangle の追加 (Align = Left; HitTest = False)
- TColorAnimation で塗りつぶしの色をアニメートするように設定する
- TColorAnimation ( Enabled = True; Inverse = True; Trigger = IsMouseOver=true; InverseTrigger = IsMouseOver=false )
- TText と TShadowEffect の追加
この問題は、非表示になっているコントロールが多数あるメイン アプリケーションでのみ発生します。各ビューには、最大 30 ~ 40 個のコントロールを含めることができます。パフォーマンスの問題はまったくありません。スタイル デザイナーの IDE では、コントロールにアニメーションも表示されますが、アプリケーションを実行すると、IsMouseOver トリガーが起動しないかのように表示されます。新しいフォームのコントロールに対してのみ、成功に直面しています。
すべてが IDE にあるため、私のケースを支援するコードを提供することはできません.dfm は 600KB を超えています. ありがとうございました。