PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Interdire Agrandissement fenêtre en largeur !
Interdire Agrandissement fenêtre en largeur !
Iniciado por kick71, 29,sep. 2019 18:17 - 16 respuestas
Miembro registrado
909 mensajes
Publicado el 29,septiembre 2019 - 18:17
Bonjour à tous,

Je n'arrive pas à gérer ce cas lié à une fenêtre.
Celle-ci est redimensionnable en hauteur mais je veux pas que celle-ci le soit en largeur.

Est-ce lié aux modèle utilisé ( Gabarit Zune_style) ?
Malgré l'option "Largeur Max à initiale", en faisant un double clic sur la barre de titre, celle-ci prend tous l'écran.

Par conte en utilisant la poignée ( bas droite ) , je ne peux que l'agrandir verticalement comme initialement voulu.

Une solution à ce problème, je ne trouve pas !

Merci pour votre aide
Christian

--
Christian - kick71
Mensaje modificado, 29,septiembre 2019 - 18:19
Miembro registrado
909 mensajes
Publicado el 02,octubre 2019 - 09:04
Bonjour

Petit Up !
Personne dans mon cas ?

Merci à vous
Christian

--
Christian - kick71
Publicado el 04,octubre 2019 - 17:31
Bonjour,

Je pense que la fonction
FenTaille(<Fenêtre> , <Largeur> , <Hauteur>)

doit convenir, à placer dans l'évènement "Modification de la taille de..." de la fenêtre avec la condition de test qui va bien.
Voir la doc : https://doc.pcsoft.fr/?3038020

Alain
Publicado el 05,octubre 2019 - 08:53
Bonjour,

le bouton d'agrandissement et le double clic sur la barre de titre seront inactifs.

CONSTANTE WS_MAXIMIZEBOX = 0x00010000
nStyle est entier= GetWindowLong(Handle(MaFenêtre..Nom), GWL_STYLE)
nStyle = ETBinaire(nStyle, NONBinaire(WS_MAXIMIZEBOX))
nStyle = API("User32", "SetWindowLongW", Handle(MaFenêtre..Nom), GWL_STYLE, nStyle)
Miembro registrado
909 mensajes
Publicado el 05,octubre 2019 - 16:46
Bonjour et merci Alain

J'avais déjà essayé.
.
Avec le code Fentaille, lors d'un double click sur le bandeau du menu ( supérieur ) , la fenêtre prend la taille max de l'écran.
Et encore plus embêtant, avec le code plus moyen de revenir en mode normal :-( reste en plein écran !
J'y comprend plus rien.
Christian






--
Christian - kick71
Mensaje modificado, 05,octubre 2019 - 16:47
Miembro registrado
356 mensajes
Publicado el 06,octubre 2019 - 16:23
Bonjour Christian

Je te confirme que le code d'Alain dans la partie "A chaque changement de taille" marche bien et correspond à ce que tu veux faire.
Pour être plus précis le code à utiliser :
SI FenTaille("") = TailleMaxi ALORS
FenTaille("",FnTstMax..LargeurMax,FnTstMax..HauteurMax)
FIN

Ou dans mon exemple "FnTstMax" est le nom de ma fenêtre de test.
Et surtout ne pas oublier le test de taille maxi.

Bien évidement il faut pour ce code initialiser les largeur et hauteur max dans la description de la fenêtre, ou alors mettre des variables ou des constantes dans le code.
Et aucun effet comme tu l'évoque.

Tiens nous au courant.

--
Francis MOREL
http://www.SoftProtect.fr
Miembro registrado
909 mensajes
Publicado el 07,octubre 2019 - 08:52
Bonjour et merci Francis et christian,

J'ai déjà essayé la syntaxe que j'avais normalement déjà transcrite :
SI FenTaille(FEN_produits) = TailleMaxi ALORS
FenTaille(FEN_produits,FEN_produits..LargeurMax,FEN_produits..HauteurMax)
FIN
//FenTaille(MoiMême , 1171 , 657) Largeur et hauteur max


Lors du debug, 1171 et 657 c'est bon ( Cf copie ecran )

Réaction similaire, double clic sur barre, je me retrouve en max !
Je vais essayé le code de christian dans la matinée.

Ci-joint la Desc de la fenêtre concernée "Fen_Produits"




Ci-joint trace en debug, une seule condition, mais pour l'explication j'ai fait deux copies pour chq variable




--
Christian - kick71
Mensaje modificado, 07,octubre 2019 - 08:54
Miembro registrado
909 mensajes
Publicado el 07,octubre 2019 - 09:06
Christian,

Merci pour ta présentation de solution avec API. ( je suis bien 32 bits )
Je ne suis pas un grand habitué des utilisations API, et j'ai des erreurs dans le code ( En rouge) :





--
Christian - kick71
Miembro registrado
909 mensajes
Publicado el 07,octubre 2019 - 11:31
Bon j'ai avancé un peu avec les API mais un problème reste sans réponse, avec le peu de connaissance que j'ai sur les appels API !
CONSTANTE WS_MAXIMIZEBOX = 0x00010000
lehwnd est un entier = Handle(FEN_produits..Nom)
nStyle est entier= API("user32","GetWindowLongA",lehwnd, GWL_STYLE)
nStyle = ETBinaire(nStyle, NONBinaire(WS_MAXIMIZEBOX))
nStyle = API("user32", "SetWindowLongW", lehwnd, GWL_STYLE, nStyle)


GWL_STYLE est inconnu malgré ma déclaration externe : EXTERNE "WinConst.wl" dans l'initialisation projet ou fenêtre !

Une petite aide ??
Merci

--
Christian - kick71
Miembro registrado
909 mensajes
Publicado el 07,octubre 2019 - 13:35
Re re Bonjour,

J'ai réglé le pb de la variable locale GWL_STYLE par un ancien post de Francis ( merci à lui ;) ).
Plus d'erreur de compilation, mais le résultat à mon grand désarroi est le même :(

A défaut du résultat attendu, j'ai "fouiné" l'utilisation et la syntaxe des API :merci:
C'est fou ce truc !!

Christian

--
Christian - kick71
Miembro registrado
310 mensajes
Publicado el 07,octubre 2019 - 15:38
Bonjour,
Le problème provient du gabarit utilisé : Zune style ne fait pas appel aux boutons systemes (maximize/iconise) mais un superchamp PSCOFT,
Le plus simple est de changer de gabarit...

Bon dev !
Miembro registrado
909 mensajes
Publicado el 07,octubre 2019 - 16:30
C'est vraiment la B-------- !!
Tout mon projet est sur ce gabarit, et le changer met un bazar sur tous les bouton, libéllés, position image etc ...
Pfff la galère.

--
Christian - kick71
Publicado el 07,octubre 2019 - 18:04
Bonsoir,
Je confirme, le problème vient bien du style "zune".
Il suffit de supprimer le bouton BTN_SYS_MAXIMISER
ou
modifier le code de ce bouton : passer l'Action prédéfinie. (Bascule Maximer / Restaurer:) à aucune.
------------------------------------------------------------------------
Le code ci-dessous par contre fonctionne parfaitement avec des fenêtres sans le superchamp.

CONSTANTE
WS_MAXIMIZEBOX = 0x00010000
GWL_STYLE = -16
FIN
nHwnd est un entier = Handle(MaFenêtre..Nom)
nStyle est entier= API("user32","GetWindowLongW", nhwnd, GWL_STYLE)
nStyle = ETBinaire(nStyle, NONBinaire(WS_MAXIMIZEBOX))
nStyle = API("user32", "SetWindowLongW", nhwnd, GWL_STYLE, nStyle)
Miembro registrado
909 mensajes
Publicado el 07,octubre 2019 - 19:18
Merci à tous,
Du taf donc en prévision }:(

Je vais revoir cela ce soir ...
Bonne soirée à tous et merci

Christian

--
Christian - kick71
Publicado el 08,octubre 2019 - 09:04
Bonjour

Essayez de mettre ceci dans l'événement 'Modification de la taille de <NomFenêtre> :
MaFenêtre..Largeur = Min(MaFenêtre..Largeur,MaFenêtre..LargeurMax)

N'oubliez pas de paramétrer la largeur max dans la description de votre fenêtre.

Bon dev.

Laurent M.
Miembro registrado
310 mensajes
Publicado el 08,octubre 2019 - 10:32
Une petite combine pour contourner le probleme du zune style (si vous avez bien défini une largeurMax dans le descriptif de la fenêtre) :

dans le code de modification de la taille de fenetre :

SI MoiMême..Largeur>MoiMême..LargeurMax ALORS
MoiMême..AffichageActif=Faux

Maximise(MoiMême)

MoiMême..Largeur=MoiMême..LargeurMax
MoiMême..AffichageActif=Vrai

FIN


bon dev.
Mensaje modificado, 08,octubre 2019 - 10:38
Miembro registrado
909 mensajes
Publicado el 08,octubre 2019 - 18:13
Bonsoir Trust ME ....

Presque bon, mais alors bonjour les ancrages des boutons , images etc ...
Tout est à la ramasse malgré le bon ancrage !
Je vais faire comme suivant et cela fonctionne, mais je dois reprendre toutes les fenêtres !! :










--
Christian - kick71