J'ai un formulaire (TBigForm dans l'exemple ci-dessous) qui permet de manipuler certaines données complexes et nécessite des informations supplémentaires à afficher. J'ai mis cette information dans un formulaire de fsStayOnTop (OnTopForm dans l'exemple) pour s'assurer qu'il est toujours visible mais peut être déplacé si nécessaire. Maintenant, quand une action de l'utilisateur dans TBigForm montre une forme modale, elle est souvent cachée derrière OnTopForm ce qui rend l'application figée. Comment puis-je éviter ça? (La recherche rapporte beaucoup, mais je n'ai pas pu en distiller une solution.)Formes modales cachées par les formulaires fsStayOnTop
Dans ma vraie application il y a beaucoup d'endroits où les formes modales sont montrées, ainsi je voudrais éviter de changer tout. de ces appels.
Exemple: Créer une nouvelle application VCL, déposez un TButton sur Form1, double-cliquez sur le bouton et remplacer le talon de mise en œuvre Button1Click générée avec les éléments suivants:
type
TBigForm = class(TForm)
strict private
OnTopForm: TForm;
Button1: TButton;
procedure Button1Click(Sender: TObject);
protected
procedure DoHide; override;
procedure DoShow; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TBigForm }
procedure TBigForm.Button1Click(Sender: TObject);
begin
ShowMessage('Test');
end;
constructor TBigForm.Create(AOwner: TComponent);
begin
inherited CreateNew(AOwner);
Caption := 'Big form';
WindowState := wsMaximized;
Button1 := TButton.Create(Self);
Button1.Parent := Self;
Button1.Caption := 'Freeze!';
Button1.SetBounds(10, 10, 100, 100);
Button1.OnClick := Button1Click;
end;
procedure TBigForm.DoHide;
begin
OnTopForm.Free;
inherited DoHide;
end;
procedure TBigForm.DoShow;
begin
inherited DoShow;
OnTopForm := TForm.Create(Self);
OnTopForm.Caption := 'Important information';
OnTopForm.BorderStyle := bsToolWindow;
OnTopForm.FormStyle := fsStayOnTop;
OnTopForm.Position := poScreenCenter;
OnTopForm.Show;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
f: TBigForm;
begin
f := TBigForm.Create(nil);
try
f.ShowModal;
finally
f.Free;
end;
end;
Démarrez l'application, cliquez sur " Button1 "puis sur" Freeze! ".
(BTW: Nous utilisons D2007.)
C'est marrant - après 3,5 ans de downvote de rien, sans aucun commentaire. –
Voici un upvote pour compenser le downvote. – Shannon
@Shannon, merci! :-) –