問題タブ [topendialog]

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 に答える
1009 参照

delphi - VCL スタイルを使用すると、TOpenDialog で例外/クラッシュが発生する

VCL スタイルを有効にして単純な TOpenDialog を使用すると、クラッシュまたは例外が発生します。

スタイルが有効になっていない場合、ダイアログはもちろん正常に機能します。この問題は、C++ Builder 10 および 10.1 Professional で発生します。

再現するには:

  1. スタイルを使用する単純な VCL フォームを作成する
  2. TComboBox、TButton、および TOpenDialog をフォームに追加する
  3. ボタンの OnClick イベントに次のコードを追加します。

    /li>
  4. アプリケーションを実行し、ボタンをクリックしてファイルを選択します

  5. 私にとって、これは「システムリソース不足」という例外につながります

このバグは、Windows 7 Enterprise および Windows 8.1 Pro で再現できます。TSaveDialog にも同じ問題があります。

私にとって奇妙なことは、この例外に関して、Web 上で同様の問題を見つけることができないことです。私の意見では、これが必要なのは VCL スタイルと TOpenDialog だけなので、Web でこれに関する詳細情報を期待したいと思います。

少し似たものしか見つかりませんでしたが、例外ではなく、ネイティブ VCL スタイルに関する解決策もありません。

TOpenDialog でファイルを右クリックすると、カスタム スタイルを使用すると無効な文字が表示される

VCL スタイルの別の問題についてどこかで読んだ SystemHooks shDialogs (スクリーンショットを参照してください) も無効にしようとしましたが、役に立ちませんでした。

コード

例外


※2016/05/26追記※

Remy Lebeau は MCVE を求めています。私はすべてを質問に入れようとしましたが、明確にするために、MCVEの要約をここに示します。

  • デフォルト設定で新しい VCL プロジェクトを作成する
  • TComboBox、TButton、および TOpenDialog をフォームにドロップする
  • ボタンの OnClick イベントに次のコードを追加します。

    /li>
  • プロジェクト オプションで VCL スタイル 'Smokey Quartz Kamri' を有効にします。

  • プログラムを実行し、ボタンを押し、任意のファイルを選択し、TOpenDialog で [OK] を選択します。

ここで、例外に必要なのはこれだけです。

私の意見では、Execute() の呼び出しはいくつかの VCL 構造を台無しにし (スタイルが有効になっている場合のみ)、別の VCL アイテム (私の場合はコンボボックス) へのアクセスがクラッシュにつながります。

私は今、すべての人がこのクラッシュを経験しているわけではないことを認識しています。100% 検証可能な例ではない場合は、ご容赦ください。

しかし、このクラッシュが発生したのは私と同僚だけではありません (現在、3 つの異なる OS バージョンの 4 つの異なるコンピューターでテストされています)。

※2016/05/27追記※

シングル ステップに対する Tom Brunberg の要求に関して、呼び出し内のアドレス 005459F4 のスクリーンショットで、WndProc 内のどこかで例外が発生します。

さらに一歩進めると、TCustomCombo.WndProc のどこかに着陸しています。その後は、WndProc でループが繰り返されるため、さらに追跡するのが非常に難しく、例外が発生する最終的な場所に到達できないようです。

ここに画像の説明を入力

※2016/05/27秒編集※

OK、クラッシュの正確な場所を特定することができました。VCL.Graphics 内の関数 CopyBitmap にあります。最初のスクリーンショットでは、次の行で例外が発生します。

結果:= GDICheck(CreateCompatibleBitmap(ScreenDC, bmWidth, bmHeight))

2 番目のスクリーンショットの関数 GDICheck() では、変数 Value がデバッガーでゼロであるため、関数 GDIError が呼び出されます。そこでは、ErrorCode もゼロであり、これにより OutOfResources が呼び出されます。

これがさらに絞り込むのに役立つことを願っています。

ここに画像の説明を入力

ここに画像の説明を入力


※2016/07/19追記※

ここでは誰も問題を抱えていないようだったので、別の試みをしました。会社の私の同僚が、C++ Builder 10.1 Berlin を英語で新しくインストールしました (おそらくドイツ語の IDE が原因だと思いました)。 StylesCrashTest アプリをインストールし、再作成しました。結果は同じで、ファイルを選択してダイアログで「開く」を押すと、すぐにクラッシュします。 ここに画像の説明を入力

ここにテスト プロジェクトをアップロードしました http://fboom.me/file/9904e22ddd22b/StylesCrashTest.zip

生成されたリリース exe はこちら http://fboom.me/file/368d0b62cc1a7/StylesCrashTest.exe

exe は、virustotal.com の多くのウイルス対策スキャナーでテストされています。 https://www.virustotal.com/de/file/e96f2e7eb80c162c2e5998decc15f26615c9fc76efec73379dd2e2140e4eba08/analysis/1468952442/

皆さんがexeとテストプロジェクトをテストできれば役に立ちます。これにより、問題をコンピューター関連またはインストールされたIDE/生成されたexeに関連する問題に分けることができます。もちろん、これは誰かが問題を再現できる場合に限ります。

この exe を使用すると、商用環境の 2 台の Windows 7 x64 Enterprise コンピューターでアプリがクラッシュします。ただし、Windows 8.1 x64 Prof を搭載した私の個人用コンピューターではクラッシュしません。

現在、私は行き詰まっています。ミュンヘンの町の外では誰も問題を再現できないようですが、2 台の異なるコンピューターで問題が発生していることは間違いありません。

この問題は Embarcadero にも提出されています (ログインが必要です): https://quality.embarcadero.com/browse/RSP-15019

悲しいことに、現時点では、これは VCL スタイルを使用するためのショップ ストッパーです。

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

delphi - TOpenDialog を使用して外部デバイス (Android タブレット、iPhone) からフル パス名を取得する方法

次のリンクで説明されているのと同じ問題に遭遇しましたが、代わりに Delphi XE2 を使用しています。

Delphi - iPhone を画像ソースとして OpenDialog でディレクトリを取得する方法

誰かが何か助けを提供できれば、それは大歓迎です。

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

delphi - tOpenDialog の背後で意図しない tStringGrid.OnFixedCellClick が起動する

Windows 10 で Delphi Berlin を使用しています。tStringGrid ベースの tForm で tOpenDialog を使用する必要があります。

開いているダイアログの固定列または行に重なっているファイルをダブルクリックすると、開いているダイアログが消えた直後に onFixedCellClick イベントが自動的に発生します。次の画像では、ファイルは最初の行である固定行の同じ位置にあります。

ここに画像の説明を入力

ほとんどの場合、ダイアログ ウィンドウを移動するか、ファイルを 1 回クリックして [開く] ボタンをクリックすることでこれを処理できますが、これを使用する他の人がそうするかどうかは保証できません。

その理由と、この問題を解決するにはどうすればよいですか?

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

delphi - Delphi 10.3 のプレビュー付きのファイルを開くダイアログ

私は Delphi 10.3 用に変更し、そのデフォルトTOpenDialogにはプレビュー ペインが含まれています。いくつか検索したところ、標準ダイアログIFileDialogCustomizeをカスタマイズするために Microsoft が提供するインターフェイスを見つけました。ペインの画像を変更するには、イベント ハンドラーをWinAPI使用する必要があることはわかっています。OnSelectionChange私にとって大きな問題は、次のとおりです。プレビュー ペインの画像にアクセスするにはどうすればよいIFileDialogCustomizeですか。これの ItemID は何ですか? この質問に対する答えは、ネット上で見つかりませんでした。誰かが答えを知っていますか?それから私とコミュニティと共有してください!:)

一部のコード フラグメントを ... に置き換えました。これらは些細なセクションまたはアプリに依存するセクションであるため、簡潔にするためです。