Я динамически создаю форму, которая переопределяет CreateParams, чтобы я мог отображать ее на панели задач. Из динамически созданной формы я вызываю TColorDialog, но как только она отобразится, моя форма перейдет под MainForm с ColorDialog поверх этого.
После закрытия ColorDialog динамическая форма вернется обратно через MainForm.
Я вижу, что в методе ColorDialog Execute есть дескриптор, который можно передать, но я не уверен, что я на правильном пути с этим?
Если я щелкну под диалоговым окном в MainForm, он будет мигать, но как я могу иметь динамически созданную форму, чтобы «владеть» этим диалоговым окном с MainForm сзади?
Я создаю форму следующим образом:
procedure TMain.Button1Click(Sender: TObject);
var
SEMArcF: TWriteSEMArcFrm;
begin
SEMArcF := TWRiteSEMArcFrm.Create(nil);
SEMArcF.Show;
end;
и освобождается при событии OnClose:
procedure TWriteSEMArcFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Я переопределяю CreateParams следующим образом:
procedure TWriteSEMArcFrm.CreateParams(var Params: TCreateParams);
begin
inherited;
if (FormStyle = fsNormal) then begin
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
end;
и чтобы показать ColorDialog, я либо создаю его, либо просто имею компонент TColorDialog в форме, в любом случае результат будет тот же. Я хочу, чтобы оно принадлежало динамической Форме.
EDIT
Я сейчас добавлю:
Application.ModalPopupMode := pmAuto;
Полный код:
procedure TWriteSEMArcFrm.btnBackColourClick(Sender: TObject);
var
ColorDlg: TColorDialog;
begin
Application.ModalPopupMode := pmAuto;
ColorDlg := TColorDialog.Create(nil);
try
if ColorDlg.Execute then
re.Color := ColorDlg.Color;
finally
ColorDlg.Free;
end;
end;
Это работает нормально, но может ли быть какое-то необычное поведение при установке этого?
Спасибо
Chris