Gambas France BETA


Pas de compte ? Incription

Problème d'échelle.

1
AuteurMessages
Foromus#1 Posté le 7/12/2014 à 08:54:23
Bonjour à tous,

Le problème n'est pas nouveau et a déjà été abordé. Je viens d'installer la version 14.04 de xubuntu, et le problème se pose vraiment. J'explique :
Sur ma machine de bureau, celle où je travaille, la résolution est de 1680 X 1050.
Sur mon portable, qui ne sert que très peu, la résolution est de 1440 X 900.
Déjà, le fait d'élaborer un projet sur la machine de bureau pour le faire tourner sur le portable demande une certaine gymnastique... Problèmes de droits probablement, le passage par un fichier zip, censé contourner ledit problème, ne donne pas de résultat probant. Mais ça, j'arrive à contourner.
L'actuel souci est maintenant l'affichage devenu insupportable. Jusqu'à présent, avec la version 12.04, les choses restaient à peu près présentables, ce n'est plus le cas avec la 14.04 : beaucoup trop dilaté. Quand il s'agit d'un projet en fenêtre moyenne, les choses s'ajustent tant bien que mal, rien ne va plus en mode fenêtre max (et pas plus en plein écran, cela va sans dire).
En ce qui concerne le truc qui me gêne, à la conception, j'avais prévu de diviser la surface active en deux panels, lesquels étaient ajustés, par calcul, à la taille de l'écran, gambas ayant les outils pour trouver ces valeurs. Après, je dispose tout le matériel nécessaire et adéquat sur ces deux panels, et vogue la galère, ça marchait à peu près.
Maintenant, je suis incapable de dire quelle était la résolution sur mon portable du temps de la 12.04, et je n'ai pas envie de la ré-installer pour voir.
Pour l'instant, je n'ai pas d'autre solution que de redimensionner tout mes contrôles sur le projet destiné au portable, et franchement, vu le nombre, ça me soucie un peu. Et donc je me dis qu'il doit assurément y avoir une solution plus simple, et je suppose que les férus qui sévissent sur ce site me donneront la solution aussi simple qu'efficace qui me satisfera très largement !

Merci de votre aide.
Reivillo#2 Posté le 7/12/2014 à 10:34:57
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonjour Foromus.

Je suppose que tu as Testé:
avec les Propriétés < Arrangement, AutoResize, et + si affinité... > de ta Form, et de ses Objets.

Reivillo.
Note: La Définition sous 12.04, n'était-elle pas de 1024x768
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Foromus#3 Posté le 7/12/2014 à 11:33:57
Bonjour Reivillo,

Ben non, je n'ai rien testé du tout... Sniff, j'ai honte....
Non, en fait, et vu que les applis étaient là avant (sur une autre partition, naturellement), j'ai bêtement lancé, sans chercher plus loin. Va falloir que je regarde ça de plus près, mais en clair, et si je comprends un peu, il faudra que je repasse par l'ide pour mettre sur le portable ce que j'ai fait sur le bureau. Mon idée allait un peu plus loin, en réalité, je me disais que, puisqu'il y une option "Package installation", il m'apparaissait comme certainement possible de faire quelque chose qui s'adapte à chaque machine - enfin, dans la mesure des places disponibles. Mais comme je n'ai aucune idée des tenants et aboutissants des commandes ci-dessus hautement suggérées, il est clair que je parle dans le vide.
Je vais voir ça plus tard, pour l'instant, il faut envisager l'apéro...
Merci du conseil.
Foromus#4 Posté le 12/12/2014 à 20:38:27
Bonjour,

Rien n'est résolu, je viens de faire quelques essais, tout va de travers.
Un truc simple :
J'ai une form
Dessus, j'ai un panel
Sur ce panel, un bouton à droite, à peu près en haut, l'autre à peu près en bas, aux mêmes .X , soit.
Quand je lance, j'ai le bouton du bas qui arrive vers le milieu droit de l'écran, celui du haut reste à sa place.
Après, en cherchant un peu, j'arriverai à les mettre l'un en dessous de l'autre, mais ce que je veux, c'est que quand je vais transposer ça sur mon portable, que je retrouve les deux boutons sensiblement aux mêmes places, à tout le moins, qu'ils restent visibles. Parce que, sur le portable, c'est encore plus décalé.
J'ai tenté les containers avec les flèches, ça n'a rien donné de probant, d'autant que je n'ai rien compris de leur utilité, puisqu'il y a de l'horizontal et du vertical.
Puis-je trouver un bon tuto Gambas pour m'y mettre sérieusement ?...
Reivillo#5 Posté le 12/12/2014 à 22:00:32
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonsoir Foromus.

N'aurais-tu pas dès fois, une autre Form ( cachée ,
ou Autres Contrôle ...)
Peux-tu nous Provoquer cela, dans un Nouveau Projet,
et nous donner le Lien, pour que l'on Puisse Tester.


Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
didier18#6 Posté le 13/12/2014 à 00:20:09
Bonsoir Foromus et Reivillo
Les contrôles sont-ils placés par [cliquer/glisser] sur le form ou par code ?
En tout état de cause tu devrai pouvoir ajuster l'emplacement du bouton par rapport à son conteneur...
1
2
3
WITH label1
.Move(5, FMain.H - 50, 680, 24) 'on place et redimensionne
END WITH

Dans cet exemple on place ET redimensionne un label par rapport au form 'FMain'.
Naturellement ce code est à placer dans une sub Form_resize().
Cela oblige aussi à revoir l'emplacement de tous tes contrôles...
Bon courage . ;)

Foromus#7 Posté le 13/12/2014 à 08:46:03
Bonjour à tous,

Naturellement, je peux montrer mon élémentaire projet ici, enfin sur la forge, je suppose.
Pour les contrôles, et d'après ce que je sais, ils sont tous, sans exception, positionnés (X et Y), par rapport au container, donc, le souci n'est pas là. Après, j'ai essayé, sur un projet réel, de mettre la Form à AutoResize. Comme je l'ai dit en entrée, j'ai souvent pour habitude de placer mes contrôles sur un panel, ce qui est bien pratique pour les monter ou les cacher. Bien entendu et dans ce cas, le contrôles sont bien positionnées, à partir du coin supérieur gauche du panel, pas de la feuille ou d'un autre support.
Bon, maintenant, je me pose la question autrement. Quand j'installe une application quelconque, peu importe que je l'installe par la Logithèque ou par Synaptic, ou par la console, elle se colle à mes écrans, quelques soient les définitions. J'en déduis donc que les programmes peuvent s'adapter et s'adaptent ! Quand j'utilise un traitement de texte, par exemple, il colle à plein l'écran, dans la mesure où je travaille dans cette taille, et quelque soit l'écran. Naturellement, si je travaille en fenêtre réduite, il y aura un affichage tronqué, mais là n'est pas mon souci.
Au fond, je rêve d'une fonction qui me donnerait une échelle instantanée, et je m'explique : dans certaines applications, prenons un traitement de texte comme Writer par exemple, si j'importe une image, elle s'affiche comme elle peut, mais je dispose de poignées, et la mets à la taille souhaitée sans autre forme d'embarras. Et tous les éléments de l'image sont dilatés ou rétrécis sans que je ne m'en préoccupe. L'idéal serait donc que, disposant d'une feuille qui va prendre les dimensions de l'écran à l'ouverture, ajuste, en conséquence les éléments qui sont posés dessus. Et je me dis que ce ne doit pas être impossible puisque tous les logiciels que j'utilise se comportent de cette manière (je n'ai pas remarqué les exceptions, il doit y en avoir...).
Voilà, j'espère avoir été plus clair dans mes explications, et si besoin est de mettre mes essais à dispo, dites-moi, où je dois les envoyer.
Merci de votre collaboration.

Edit à propos de la dernière réponse :
Certes, je peux redimensionner et déplacer un contrôle comme indiqué. Mais, supposons, comme dans l'exemple, qu'il s'agisse d'un Label, il est clair que la police ne va pas suivre, en conséquence, j'aurai un affichage, soit trop grand, soit trop petit.
didier18#8 Posté le 13/12/2014 à 16:41:58

Un petit exemple vaut mieux qu'un long discours (quoi que)...
Dans un nouveau projet, sur le 'Form' déposer 1 Button et 1 Label (peut importe leur dimension et leur emplacement).
Copier et coller le code dans 'Fmain.class(*)'.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
' Gambas class file

PRIVATE Hauteurcontrol AS INTEGER
PRIVATE Largeurcontrol AS INTEGER

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
ME.Center 'pour moi (comme on est dans le sub Form_open on agit sur le Form)
END

PUBLIC SUB Form_Resize()
IF ME.W < 200 THEN ME.W = 200 'largeur minimale du form
IF ME.H < 250 THEN ME.H = 250 'hauteur minimale du form

Hauteurcontrol = 35 'sera attribué à la hauteur du Button1
Largeurcontrol = 84 'sera attribué à la largeur du Button1
WITH Button1
.Caption = ("Quitter") 'on écrit sur le bouton
.Move(FMain.W - Largeurcontrol - 20, FMain.H - Hauteurcontrol - 20, Largeurcontrol, Hauteurcontrol) 'position initiale du bouton...
END WITH

Hauteurcontrol = 24 'sera attribué à la hauteur du label1
WITH Label1
.Alignment = 2
.Border = Border.Plain
.Caption = ("Cliquer sur ce bouton ") & "===>"
END WITH
Largeurcontrol = Len(Label1.Caption) * Label1.Font.Size 'sera attribué à la largeur du label1
Label1.Move(FMain.W - Button1.W - 20 - Largeurcontrol - 10, FMain.H - Hauteurcontrol - 20, Largeurcontrol, Hauteurcontrol) 'position initiale du label1...

END

PUBLIC SUB Button1_Click()
ME.Close
END


Nous allons utiliser 2 variables 'integer'. Leur nom est suffisamment explicite ('Hauteurcontrol' servira à définir la hauteur du contrôle et 'Largeurcontrol' sa largeur).
- Dans la sub 'Form_Open(), on commence par centrer le formulaire dans l 'écran...

- Dans la sub 'Form_Resize(), cette sub intervient après le 'Form_Open' et est activée à chaque fois que l'utilisateur modifie la taille de la fenêtre.
On créé (ce que j'appel des taquets de sécurité) par 2 conditions.
If Me.W < 200 Then Me.W = 200
If Me.H < 250 Then Me.H = 250
Si la largeur (W) du Form est inférieur à 200 alors elle est de 200
Si la hauteur (H) du Form est inférieur à 250 alors elle est de 250
Les 2 conditions ne sont là que pour une question de lisibilité du code et pour que l'utilisateur ne puisse pas descendre à des valeurs trop faible.
Il est clair que l'on pourrait mettre tout ça sur 1 seule condition...

On défini ensuite la hauteur et largeur du bouton...
On y écrit quelque chose dessus (Quitter)
Et on le déplace :
horizontalement soit la largeur de la Form (Fmain.W) moins la largeur du contrôle Button1 (Largeurcontrol) moins une distance du bord droit que j'ai mis arbitrairement à 20
Verticalement soit hauteur du Form (Fmain.H) moins la hauteur du Button1 (Hauteurcontrol) moins la distance par rapport au bas du Form que j'ai mis arbitrairement à 20
Et on indique la largeur et hauteur du Button1

On modifie Hauteurcontrol = 24 ce sera la hauteur du Label1.
Pour Label 1 on déclare que le texte sera aligné à droite, qu'il y aura une bordure et ce que l'on écrit dans le Label1.
On défini ensuite la largeur du Label1...
Soit le nombre de caractères du label (Len(Label1.Caption)) multiplié par la taille de la police (* Label1.Font.Size)
Puis on déplace le Label1 :
horizontalement soit largeur du Form moins largeur du Button moins distance du bord droit que j'ai mis arbitrairement à 20 moins largeur du label moins distance du bord gauche du bouton que j'ai mis arbitrairement à 10 (FMain.W - Button1.W - 20 - Largeurcontrol – 10)
Verticalement soit hauteur du Form (Fmain.H) moins la hauteur du Label1 (Hauteurcontrol) moins la distance par rapport au bas du Form que j'ai mis arbitrairement à 20
Et on indique la largeur et hauteur du Label1.
A présent lorsque l'on exécute le programme, si on 'resize' la fenêtre manuellement, le bouton et le label seront toujours 'stationnés' au même endroit (relatif) par rapport à la fenêtre.
Évidement si on demande un affichage plein écran cela fonctionne également !
Au fond, je rêve d'une fonction qui me donnerait une échelle instantanée

Inutile de calculer la taille du formulaire, gambas le fait pour nous.
On doit pouvoir réduire la taille de la police par rapport à son contenant (label ou button etc.), un truc du style si la taille du contenant est inférieur à xx alors la 'font' sera de yy
Tout ceci n'est que pour l'exemple, un bouton 'Quitter' ça ne fait pas très 'pro', je trouve plus élégant de passer par le menu Fichier/Quitter (et puis l'éditeur de menu est tellement facile à utiliser que l'on aurai bien tort de s'en priver).

Pardon pour la 'tartine', mais ce n'est pas toujours facile d'expliquer un bout de code simplement.

Bonne soirée.

Foromus#9 Posté le 14/12/2014 à 10:18:12
Bonjour à tous,

Merci Didier pour ces renseignements.
Bon, et sans prétentions, je pense que ça, je sais faire, à peu près. Seule chose que je n'ai pas expérimentée, c'est la mise à l'échelle de la police, soit dans une txtbox, soit un label, autrement, les autres commandes, j'utilise, plus ou moins, selon besoins.
Comme expliqué, ce qui m'intéresse, c'est au lancement, en affichage max (ou plein écran éventuellement), après, les choses ne sont plus redimensionnées.
Si je dois calculer tous les emplacements au départ, je dois dire que je vais avoir de quoi occuper mes longues soirées d'hiver. En effet, et sur le projet qui me pose quelques soucis d'affichage, j'ai eu la curiosité de compter : il comporte 14 formulaires, lesquels supportent environ 380 contrôles. Et même si je dois calculer les positionnements des 3/4, ça va m'occuper un certain temps, c'est pourquoi j'aspirais à une solution plus simple partant du principe atrocement réducteur que le droit à la paresse existe en chacun de nous, même à des degrés divers.
Je pense que je vais opter pour une approche très légèrement différente.
En fait, j'ai un panel sur lequel sont pratiquement posés tous mes contrôles, et seulement sur la partie droite de la fenêtre. J'envisage de poser sur ce panel 2 autres sous-panels, l'un en haut, l'autre en bas, lesquels seront ajustés à l'ouverture. Les contrôles du milieu resteront où ils sont, je devrai donc m'arranger pour qu'il n'y ait point de chevauchée, pas forcément fantastique du reste... Les "espaces d'adaptation" pourraient ainsi être mieux répartis pour donner un ensemble cohérent. Et ça ne me ferait que 2 panels à positionner, au lieu de tous les contrôles.
Cette disposition a été adoptée parce que la majeure partie de l'écran est réservée à l'affichage de pictures, aussi, sont redimensionnement est automatique. Le panel de droite est le "tableau de commande", et par souci d'esthétique, il est judicieux qu'il montre une hauteur égale à la picture affichée, sinon, il suffirait de le concevoir plus petit et ça collerait n'importe où. D'où mon souhait de le voir changer facilement de taille, en fonction de la machine utilisée. Cela dit, c'est juste pour le plaisir de faire, mes réalisations n'ont pas vocation à être diffusées de par le vaste monde - ni même au voisin, c'est juste pour le plaisir de programmer, de "réaliser quelque chose", réaliser des choses, créer, étant pour moi et à mon sens, le vrai but de la vie, aussi modestes fussent-elles.
Pour répondre à l'allusion qui dit qu'un bouton "Quitter", ça ne fait pas "pro", je suis entièrement d'accord. Cela dit, ça tombe bien, c'est aussi en accord avec ma conception : n'étant qu'un amateur sans grandes compétences, je ne suis pas "pro", et donc, je ne fais pas de trucs "pro". Quand aux menus, j'ai horreur, je n'ai pratiquement jamais utilisé, et je ne suis probablement pas le seul, il suffit de voir toutes les applications proposées qui disposent de barres d'outils, alors que c'est doublon par rapport au menu, pour se rendre compte que les menus sont loin de faire le consensus universel. Je pense que c'est bien utile pour aller chercher des fonctions qui ne servent que très occasionnellement, par contre, en ce qui concerne les commandes requises à tout bout de champ, un bouton donne un confort qui n'a jamais été égalé. Aller dans le menu pour trouver la commande Quitter demande 2 clics, le bouton un seul : à tenir en compte dans le cas d'une sortie "en urgence"... Par ailleurs, aller dans un menu, puis un sous-menu, et parfois dans un sous-sous-menu, demande une certaine gymnastique, et pour peu qu'une saleté occupe la souris, et qu'elle dérape, tout fout le camp, et il faut tout reprendre... Bon mais ça, c'est l'affaire de chacun je pense.
De tout ceci, j'en conclus qu'il n'y a pas de solution simple - et je m'en doutais un peu, je vais revoir mon truc et tester différentes approches, voire une refonte de mon projet.
Merci pour tous ces renseignements qui m'ont bien éclairés.
gambix#10 Posté le 15/12/2014 à 19:02:26
Faire simple !Et si tu m'envoyais ton projet que j'y regarde un peu ?

Je ne veux jamais rien voir dans ce foutu event_resize sauf dernier recours !!! Gambas a suffisement d'outi pour s'en passer ...
d'ailleur je ne suis même pas sur que l'ide ne l'utilise une seule fois !

Moins de texte dans une signature c'est agrandir son espace.
Foromus#11 Posté le 18/12/2014 à 08:50:21
Bonjour Gambix (et les autres....),

Merci pour votre proposition, mais il faut quand même que je cherche un peu tout seul ! Et vous avez plein de choses à faire, un peu plus intéressantes...
Pour l'instant, je me battais avec une histoire de pleine page / maxi, ça semble résolu.
Pour les espacements, et concrètement, je ne vois pas comment faire, à part calculer les contrôles.Y. La solution retenue pour l'heure consiste à coller ça dans une boucle Do Loop, jusqu'à ce que le contrôle du bas soit à la bonne place. Je vais voir ça prochainement.
A expérimenter, donc....
Merci !
gambix#12 Posté le 18/12/2014 à 14:09:33
Faire simple !Former les nouveaux fait aussi partie de mes attributions.

Alors placer un bouton et un label sur un formulaire.


TU met un HBox sur ton formulaire
Dans celui-ci tu met un label et a sa droite un textbox

maintenant les propriété

Form :

->Arrangement : Vertical

hBox :
-> Autoresize = true

Label :
-> autoresize = true

TextBox :

-> Expand = true



ALlez amintenant on va jouer un peux :)

Ajoute un Panel au formulaire sous le box

Panel :
-> Expand = true
-> BackColor = disons gris foncé

Puis ajoute un autre Panel toujour au formulaire :
-> height = 20
-> Arrangement = Horizontal
-> border = sunken

Dans ce dernier ajoute un panel
-> expand = true

Puis a sa droite ajoute un bouton:
-> Text = "quitter"
-> autoresize = true



Maintenant joue avec le formulaire, taille réduction etc.
Ensuite teste les propriété pour comprendre what do what. Pour mieux comprendre tu peux aussi assigner des couleurs différentes a chaque objets.

Je n'ai pas pris le temps de corriger mes fautes... dsl


Moins de texte dans une signature c'est agrandir son espace.
Jack#13 Posté le 18/12/2014 à 18:08:43
Gambix qui s'excuse de ne pas corriger ses fautes ?
Tu vas mal finir 2014 mon gaillard :no:
Pour un code démocratique nationalisons Gambas.
gambix#14 Posté le 18/12/2014 à 21:44:31
Faire simple !On véra ... disait le porc
Moins de texte dans une signature c'est agrandir son espace.
1