7
votes

Formulaire DELPHI sans menu système mais avec bouton fermer

Par défaut, un formulaire ayant BordersTyle = BSSizeable a un menu système (à gauche) et un bouton de fermeture ('x', à droite). Je veux me débarrasser du menu Système et garder le bouton de fermeture.

La propriété Bordericons me permet de supprimer le menu Système (via Bisystemmenu), mais le bouton Fermer est maintenant parti.

Y a-t-il un moyen de faire cela?

Utiliser Delphi Xe

PS: il devrait être possible aussi loin que Windows est concerné: la fenêtre "Inprivate Filtring Paramètres" de IE8 est importante, a un bouton de fermeture et n'a aucun menu système.


11 commentaires

Etrange, pour moi la valeur par défaut pour Borderstyle = bsdialog ne pas a un menu système indépendamment de ce qui est spécifié dans Bordericons . Bisystemmenu doit être là pour que le rouge X à afficher.


Vous avez raison, Bsdialog fonctionne comme je le souhaite. Blush ;-) J'ai mis à jour la question suivante: je veux aussi que cela fonctionne pour BsSisisable.


@Andreas - Vous voulez dire personnalisé dessiner un bouton?


Je pense que vous devriez être clair: ce que vous cherchez à vous débarrasser de l'icône , pas du menu . Cliquez avec le bouton droit sur la barre de titre affiche toujours le menu, qu'il y ait une icône dans le coin supérieur gauche.


@Rob: Oui, c'est une meilleure façon de le dire


@Sertac: Non, je viens de dire que WMC est un autre exemple d'une telle fenêtre (avec bouton de fermeture, mais sans l'icône du menu système), outre la fenêtre "Inprivate" mentionnée ci-dessus).


Ok, j'ai oublié d'indiquer l'évidence. Lorsque je parle de la fenêtre WMC (et de son cadre), je suis - bien sûr - parle de la fenêtre lorsqu'elle est fenêtrée et dispose d'un cadre de fenêtre normal et, de ce qui n'est pas en mode plein écran.


@Giel comme un de côté, une telle fenêtre serait très ennuyeuse pour moi! Je viens de regarder WMC sur la suggestion de @ Andreas. Je ferme souvent une fenêtre en double-cliquant sur l'icône de la barre de légende. Ceci n'est plus possible si l'icône est supprimée! Firefox et Chrome sont deux applications qui font cela et je le trouve très frustrant.


@David: Ce n'est pas la fenêtre principale, et des fenêtres de style de dialogue non importantes n'ont pas d'icône de toute façon. FWIW: jusqu'à aujourd'hui, je ne savais pas que vous pouviez doubler l'icône ou la droiteCliquez sur la barre de titre ;-)


@Giel, cela ne me dérangerait pas si c'était la fenêtre principale. Je serais démangeaisons pour doubler cliquer dessus! En ce qui concerne les fenêtres de la boîte de dialogue Windows, ils répondaient généralement à ESC ou entrez. Il est toujours utile d'essayer de rester aux idioms de l'interface utilisateur éprouvée et testé, car vous ne pouvez pas être au courant des coins et des crannies. Je pensais que je savais beaucoup de choses sur ce sujet, mais je ne savais pas à droite cliquez sur la barre de légende, que ce soit jusqu'à aujourd'hui !!!


Ce lien Delphi3000 est mort - Ça vous dérange de poster le code de travail?


3 Réponses :


0
votes

Je ne pense pas qu'il y ait un moyen de le faire sans recourir à la coutume de dessin de votre zone non-client, ce qui est très difficile lorsque le verre est impliqué.

considère cette méthode. P>

procedure TMyForm.DeleteSystemMenu;
var
  SystemMenu: HMenu;
begin
  SystemMenu := GetSystemMenu(Handle, False);
  DeleteMenu(SystemMenu, SC_CLOSE, MF_BYCOMMAND);
end;


5 commentaires

Cela semble faire le opposé de ce qui est demandé. Il conserve évidemment le menu Système (puisque vous le modifiez), mais il désactive le bouton.


Même chose pour DELETEMENU (SYSTEMMENU, SC_SIZE, MF_BYCOMMAND); Il supprime l'élément de menu Taille et, par conséquent, vous ne pouvez pas redimensionner le formulaire.


@Rob a lu ma réponse à nouveau. Le point que je fais est que si vous vous débarrassez des parties du menu système, la fonctionnalité correspondante de la barre de légende est également désactivée. En fait, vous commenciez à la q semble faire un point similaire.


Mais sûrement Windows Media Center ne fait pas de dessin personnalisé du cadre? Pourtant, il est redimensionnable, aime minimiser, maximiser et fermer les boutons à droite et dispose d'un menu système normal, mais ne montre pas l'icône du menu système à l'extrême gauche.


@Andreas La solution acceptée montre comment faire ce que vous décrivez. La question initiale souhaitait se débarrasser du menu système et je pense que vous ne pouvez pas le faire et conserver un bouton de fermeture fonctionnant. Comme Rob souligné cependant, vous pouvez vous débarrasser de l'icône, conserver le menu Système, il apparaît toujours sur l'espace alt +, la barre de légende clic droit, etc.



1
votes

Borderstyle: = Bssizetoolwin fait ce que vous voulez, avec une apparence légèrement différente du bouton X.


3 commentaires

-1. C'est trop différent et cette différence non désirée n'est pas nécessaire.


@Andreasrejbrand qui est l'auteur de cette différence non désirée? Microsoft voulait-il faire une différence entre "Windows normal" et "Windows d'outils"?


@ user1580348: correct. Les fenêtres d'outils ont des bordures plus petites et c'est très intentionnel: les fenêtres restantes, flottantes, les plus volumineuses ne devraient pas avoir de frontières massives. Voici un exemple de Microsoft Word 1997: Capture d'écran . Le mot et la boîte de dialogue A propos des barres de titre épais, mais l'assistant de bureau et la barre d'outils de dessin flottant - qui sont des fenêtres à outils - ont des barres de titre plus petites.



1
votes

Par "Menu Système" Voulez-vous dire l'icône à gauche de la barre de titre? Ou menu contextuel invoqué par clic droit?

S'il s'agit de l'icône que vous souhaitez supprimer - utilisez ce code: xxx


0 commentaires