Form non déplaçable et autres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 495 fois - Téléchargée 36 fois

Contenu du snippet

Comme personne sur le forum n'as réussi à me fournir une réponse sur la façon de rendre une form non déplaçable, j'ai entrepris une recherche qui m'a permis de fournir ce petit bout de code.
Il permet de ne pas permettre à l'utilisateur de déplacer la form. Utilisable pour les forms tels que 'Login', ...
De plus je fournis les constantes qui offrent d'autres possibilités comme ne pas pouvoir redimensionner la form, ...
Bonne prog

Source / Exemple :


//Api si vous utilisez le code dans des dll par ex, dans une form ça marche sans
function GetSystemMenu(hwnd: LongInt, bRevert: LongInt): LongInt;external 'user32.dll';
function DeleteMenu(hMenu: LongInt, nPosition: LongInt, wFlags: LongInt): LongInt; external 'user32.dll';
//constantes
//pour GetSystemMenu 
const MF_ENABLED = 0; //Rend le menu accessible.
const MF_DISABLED = 2; //Rend le menu inaccessible, à utiliser conjointement avec MF_GRAYED.
const MF_GRAYED = 1; //Donne un aspect grisé au menu.
const MF_BYCOMMAND = 0;   //uIDEnableItem donne le menuID de l'item (par défaut).
const MF_BYPOSITION = 40; //donne le zero-based
//pour DeleteMenu
Const SC_MAXIMIZE = 30; //Empêche l'aggrandissement de la feuillle
Const SC_MINIMIZE = 20; //Empêche la réduction de la feuille
Const SC_MOVE = 10;     //Empêche le déplacement de la feuille
Const SC_RESTORE = 120; //Empêche la restauration de la feuille
Const SC_SIZE = 0;      //Empêche le redimensionnement de la feuille
Const SC_Close = 60;    //Empêche la fermeture de la feuille

//Pour empêcher de bouger la form
Procedure Form_Move(Handle:Integer);
begin
       DeleteMenu(GetSystemMenu(Handle, FALSE), SC_MOVE, MF_BYCOMMAND);
end;

//A la création de la form supprimer le dépacement
Procedure TForm1.FormCreate(Sender: TObject);
begin
       Form_Move(Form1.Handle);
end;

Conclusion :


Le programme est simple:
une procédure Form_Move avec en paramètre le handle de la form qui ne doit pas bouger
elle utilise deux api's qui vont en fin de traitement supprimer un item dans le menu de la fenêtre en l'occurence le déplacement ( SC_MOVE ).
Il suffit ensuite d'appeler la procédure avec le handle de la fenêtre en paramètre.
Il est donc facile de changer SC_MOVE avec les autres constantes.

!!! je n'ai pas tout tester, peut-être faut-il vérifier les valeurs des constantes.

A voir également

Ajouter un commentaire

Commentaires

cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
@devilmaycry41281 :

ce source n'est pas inutile bien au contraire

si tu désires produire un code qui soit compatible entre les différentes versions de Delphi
cette petite astuce a son importance ... puisque "alCustom" n'est pas disponible dans toutes les versions ;-)
devilmaycry41281
Messages postés
4
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 août 2007

un source qui ne sert a rien
il ya la propriété du form "align" il suffit de la metre sur "alCustom"
cs_grandvizir
Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
10
=======1)
Pour figer très largement une fenêtre, il y a autre chose de sympa: il suffit d'interdire WM_SYSCOMMAND avec seulement 4 lignes de code. Voici un petit code sympa :

unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Controls, Forms;
type
TForm1 = class(TForm)
private
procedure FixedForm(var Msg:TWMSysCommand); message WM_SYSCOMMAND;
end;
var Form1 : TForm1;
implementation
{$R *.DFM}
procedure TForm1.FixedForm(var Msg:TWMSysCommand);
begin
Msg.Result:=-1;
end;
end.

=======2)
Conseillons le code N°28941 pour épurer les menus inutiles du popup.

=======3)
Je ne sais pas d'où tu nous sort tes constantes, mais moi dans Windows.pas, j'ai ce qui suit. Et ce n'est pas pareil !

const
MF_BYPOSITION = $400;
SC_SIZE = 61440;
SC_MOVE = 61456;
SC_MINIMIZE = 61472;
SC_MAXIMIZE = 61488;
SC_NEXTWINDOW = 61504;
SC_PREVWINDOW = 61520;
SC_CLOSE = 61536;
SC_VSCROLL = 61552;
SC_HSCROLL = 61568;
SC_MOUSEMENU = 61584;
SC_KEYMENU = 61696;
SC_ARRANGE = 61712;
SC_RESTORE = 61728;
SC_TASKLIST = 61744;
SC_SCREENSAVE = 61760;
SC_HOTKEY = 61776;
SC_DEFAULT = 61792;
SC_MONITORPOWER = 61808;
SC_CONTEXTHELP = 61824;
SC_SEPARATOR = 61455;
SC_ICON = SC_MINIMIZE;
SC_ZOOM = SC_MAXIMIZE;

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.