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

delphi - generics.defaults を使用して Real48 を比較できますか?

2 つの Real48 (6 バイト float) を比較する次のコードは、コンパイルして実行しますが、無意味な結果を生成するか、AV を生成します。

0 を出力するはずですが、最初に爆撃しないと出力-92するか、その他の誤った値が出力されます。

このバグは最新の XE8 にも存在しますか?
もしそうなら、それは以前に報告されましたか? https://quality.embarcadero.comでは何も見つかりませんが、古い QC があればそれを参照したいと思います。

REAL48最後に....を使用して2つのタイプを比較するにはどうすればよいTComparer<something>ですか?

編集:
これは私が解決した修正でした:

0 投票する
0 に答える
95 参照

delphi - SplitString と Split の違い

StrUtils.SplitStringSysUtils.TStringHelper.Splitを比較する次のサンプル プログラムを検討してください。

出力は次のとおりです。

誰でも違いを説明できますか?

結果は 2 つの空の文字列になると思います。

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

delphi - Delphi XE8 で最後の TListBoxItem までスクロールされた TListBox を処理するにはどうすればよいですか?

最初に 15 個の TListBoxItem をロードし、TListBoxItem の一番下までスクロールするたびに、別の 15 個の TListBoxItem を追加する TListBox を作成しようとしています。Delphi XE8 の firemonkey マルチデバイス プロジェクト。

今、ユーザーが TListBox で一番下までスクロールされているかどうかを知る方法がわかりません。TListBox のすべてのイベントを試しましたが、どれも実行していないようです。

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

delphi - Delphi XE8 は、アプリケーションの起動時に ETetheringException を適切に処理します

Delphi アプリのテザリング マネージャーは、通信スレッドを開始するために、2020 年から 2039 年までの範囲で 20 個のポートを予約しています。同じコンピューターで 21 番目のアプリケーションを起動するとどうなるかを知りたかったのです。このアプリケーションは、強制終了されるまで応答せずにハングアップするだけであり、正常に終了する方法が見つかりませんでした。

再現するには、TTetheringManager と TTetheringProfile を空のフォームにドロップし、プロファイルを Manager に接続し、コンパイルして、IDE の外部でアプリケーションを 20 回起動し、最後に IDE で 21 番目のインスタンスを起動します。

これは私がこれまでに見つけたものです:

System.Tether.NetworkAdapter: プロシージャTTetheringNetworkManagerCommunicationThread.Execute ; TCP または UDP 通信サーバーを起動できなかった場合、ETetheringException.Create(SManagerNetworkCreation)が発生します。ここまでは順調ですね。

この例外は、デバッガーに表示されます。続行して次のコードをステップ実行すると、アプリケーションは最終的にSystem: function AcquireExceptionObjectでハングし、戻りません。

Application.Run 中にアプリケーションが発生するため、次の方法で例外をキャッチしようとしました。

しかし、これはうまくいきませんでした。この例外をキャッチ (または防止) する方法について何か提案はありますか?

0 投票する
0 に答える
492 参照

android - Delphi Android テキストのレンダリング バグ?

そのため、バックグラウンドでの作業にスレッドを使用して、Android で Delphi XE-8 を使用しています。そして、メインスレッドからクロックのラベルを更新するタイマーがあります(おそらく、これを行うより効率的な方法があります)。

Androidでアプリを起動すると、時計の文字がランダムにサイズが縮小されたり、文字があるべき場所の上または下に配置されたりします。これは、アプリの存続期間中に同じキャラクターに対して発生します。アプリを閉じて再起動すると、別のキャラクターになる可能性があります。多くの場合、数値は指数のサイズを持ち、文字がまったくない場合もあります。また、バグがまったく表示されない場合もあります... 4 ~ 5 回に 1 回発生します。

下の図では、'5' がラベルの途中に配置されており、2 は表示されていません (表示されているラベルの上または下にある可能性があります)。

ここに画像の説明を入力

時計のコードは次のようになります。

だから私は複数のことを試しました。1. 時計をスレッドに配置し、同期呼び出しを使用して UI を更新します。2. ラベルの代わりにビットマップを使用します (同じ問題)。3. ラベルの設定、labelsize、textsize、fonts、textAlignment、margins、padding などをいじってみます。しかし、すべて役に立ちません。

必要なプロセッサを搭載した複数の Android デバイスを使用していますが (一部はそうでないものもあります)、すべてのデバイスでバグが発生します。

論理的な説明 (根本的に間違ったことをしている) と、この問題を解決する方法はありますか?

お時間とご尽力いただきありがとうございます。

編集:これはXE6およびXE7でも発生します... Edit2:私も使用してみました:

どれも状況を改善しませんでした。

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

delphi - 非同期 TADOQuery の OnFetchComplete がメイン スレッドに同期されない

TADOQuerywithを使用してイベントに[eoAsyncFetchNonBlocking]アタッチすると、メイン スレッドで実行されていないことがわかりました (XE4 および XE8 でテスト済み)。私たちのほとんどは、これらのタイプのイベントで UI で作業を行うため、これはバグ* だと思います。これが大規模なプロジェクトでの問題の原因であると考えており、回避策が必要です。OnFetchCompleteOnFetchComplete

[編集] *ADO のドキュメントを読んだ後、これがバグではない可能性があることを認めますが、マルチスレッドの問題は残っています。

このハンドラーにコードを強制的に実行させてメイン スレッドで実行させるエレガントな方法はありますか? 私はタイマーを使いたくありません(しかし、それが唯一の解決策である場合はそれを採用します)。または、ここで待機できる ADO 同期オブジェクト、または ADO プロバイダーへの他の形式のシグナリングはありますか?

問題を示す簡単なサンプルを次に示します。私のプロジェクトは、ファクトリがこれらのデータセットを作成して埋めることでより複雑になりますが、ここではデータセットを内部のグリッドにアタッチすることに似ていますADOQuery1FetchComplete

そして、dfm はクエリを設定しExecuteOptions = [eoAsyncFetchNonBlocking]OnFetchComplete処理するだけです。

[編集] を使用するよう提案されましたTThread.Sychronizeが、これは Delphi スレッドではありません。

ハンドラーが別のスレッドから呼び出されたという十分な証拠がない場合は、GetCurrentThreadIdここにメインスレッドと問題のあるスレッドのコールスタックがあります (適切な測定のためにメインスレッドにスリープを追加しました)

メインスレッドのスリープ

ハンドラーを呼び出す他のスレッド

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

android - Delphi XE8 を使用する Android の TListBoxItem の前の TSearchBox

TListBox に TSearchBox を追加した Delphi XE8 に firemonkey マルチデバイス プロジェクトがあります。Android でのみ、SearchBox は TListBoxItems の前に配置されます。Windows と iOS では、すべてのリスボックス項目の上に検索ボックスが表示され、下にスクロールしても常に一番上に表示されます。

Android 5.1.1 を搭載した Nexus 7 を使用しています

下の画像では、一番上のリストボックス項目の前に検索ボックスが表示されています。 fmx に追加された検索ボックス

Androidでこれを取得するにはどうすればよいですか?

アップデート

TListBox の上にツールバーを作成し、実行時に searchBox を追加しました。このように、検索ボックスは常にアイテムの上にありますが、リストボックスで検索できません。ListBoxItems のテキストをチェックするように設定するにはどうすればよいですか?

更新 2

新しいテスト プロジェクトを作成しましたが、そのプロジェクトでは正しく動作しているようです。今、私が使用しているカスタムスタイルで少しテストしましたが、それが問題のようです. 唯一の問題は、Stylebook を使用してプロジェクトのすべてのスタイルを設定していて、ListBox とその項目をこれから除外する方法がわからないことです。

更新 3

StyleBook で使用している .style ファイルから listbox および listboxitem スタイルを削除しました。これで問題は解決しました。私が今持っている唯一の問題は、TListBoxItem テキストが表示されることです。下の図に示すように、ラベルを付けてカスタムリストボックスアイテムを作成して、必要な方法で整列させます。しかし、アイテムを検索できるようにするには、アイテムのテキストを設定する必要があります。そのため、アイテムに設定したラベルの上にテキストが表示されます。

listboxitem テキストを非表示に設定する方法はありますか? すでに色を背景と同じ色に変更しようとしましたが、これは機能せず、フォント サイズを 0 に設定しても機能しません。