有幾種情況下,應該是模態的表單或對話框沒有保持在頂部。我正在使用 10.4 為 Windows 構建。這是一個簡單的例子,涉及兩個表單和一個 TSaveDialog。
要復制問題:
- 在 Windows 中運行應用程式
- 單擊“顯示視窗”按鈕(您應該會看到 Form2)
- 單擊 Show Save Dialog 按鈕(您應該會看到保存對話框)
- 單擊不屬于應用程式的另一個視窗,例如資源管理器視窗
- 單擊 Form2。Form1 現在將在前面
如果您重復此操作但首先最大化 Form1,那么如果不從任務管理器關閉程式或使用一些專業的 Windows 知識,用戶就不容易解決。
表格1:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 480
ClientWidth = 640
Position = ScreenCenter
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
DesignerMasterStyle = 0
object Button1: TButton
Position.X = 264.000000000000000000
Position.Y = 168.000000000000000000
Size.Width = 97.000000000000000000
Size.Height = 33.000000000000000000
Size.PlatformDefault = False
Text = 'Show Window'
OnClick = Button1Click
end
end
表格2:
object Form2: TForm2
Left = 0
Top = 0
Caption = 'Form2'
ClientHeight = 333
ClientWidth = 489
Position = ScreenCenter
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
DesignerMasterStyle = 0
object Button1: TButton
Position.X = 184.000000000000000000
Position.Y = 136.000000000000000000
Size.Width = 113.000000000000000000
Size.Height = 41.000000000000000000
Size.PlatformDefault = False
Text = 'Show Save Dialog'
OnClick = Button1Click
end
object SaveDialog1: TSaveDialog
Left = 80
Top = 40
end
end
單元1:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, Unit2,
FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
end.
單元2:
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
procedure TForm2.Button1Click(Sender: TObject);
begin
SaveDialog1.Execute;
end;
end.
我還沒有在 VCL 應用程式中看到這種行為(模態視窗總是在頂部)。我還在 FMX 應用程式中看到了使用 ShowModal 顯示的表單甚至使用 ShowMessage 創建的訊息視窗中的問題。使用 TDialogServiceSync.ShowMessage 似乎有助于防止這種情況,但即使如此,一些用戶也會遇到同樣的問題。
為什么會發生這種情況,我可以做些什么來解決它?
uj5u.com熱心網友回復:
嘗試設定父級。
喜歡 :
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.parent := form1;
Form2.Show;
end;
我得到了很好的結果,但在 OSX 中它不起作用。
uj5u.com熱心網友回復:
你可以設定FormStyle的Form2,以StayOnTop
FormStyle 是 TFormStyle 中定義的 Normal、Popup 或 StayOnTop 值之一。
正常:通常的形式。這種形式可以具有活動狀態并支持 z 順序。
彈出:此類表單不能處于活動狀態。這種型別的所有表單都屬于 PopupForms 串列。
StayOnTop:此表單保留在桌面和應用程式中其他表單的頂部,但將 FormStyle 設定為 StayOnTop 的任何其他表單除外。如果一個 StayOnTop 表單啟動另一個表單,則兩個表單都不會始終保持在頂部。
https://docwiki.embarcadero.com/Libraries/Sydney/en/FMX.Types.TFormStyle
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371179.html
標籤:德尔福 火猴 delphi-10.4-悉尼
