begin process at 2012 02 16 12:49:37
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Optimisation du code

 > RESIZE SANS DOULEUR

RESIZE SANS DOULEUR


 Information sur le tutoriel

 Description

Elaborer la méthode Resize d'une forme contenant 255 controles (plus, si on compte les instances de chaque controle d'un array de controle.

Tutorial

Quelle douleur que de devoir mettre sur pied la méthode <form>.Resize pour une forme le moindrement complexe.

J'ai mis au point cette approche lorsque j'ai du élaborer le Resize d'une forme contenant des tabs contenant eux-même d'autres controles dont certains étaient redimensionnés et d'autres seulement déplacés tout azimuth. Plus de 400 controles (en comptant les instances de chaque controle des arrays de controles.)

Mettez tout d'abord le ScaleMode de la forme à Pixel: vous aurez ainsi des nombre pas trop gros.

Premiere étape: parcourir la forme au complet et noter les dimensions suivantes de tout les controles dans une table:

<nomParent>    Left, Top, Height, Width
<nonControle>    Left, Top, Height, Width

Vous vour rendrez la vie facile si vous progressez du Parent au controles contenus et ainsi de suite.

Deuxièmement: griser les cases qui ne changeront pas de dimension en vous referant à vos spécifications pour cette forme.

Pour un controle collé en haut de la forme (ou d'un 'Frame' ou d'un Tab'), Left et Top ne varieront pas.
Pour un controle qui ne sera pas redimensionné, Height et Width Top ne varieront pas.
Evidemment, si toute la ligne d'un controle est grisée, aucune opération n'est nécessaire (Ca ne m'est pas encore arrivé.)

Troisièmement, il faut faire quelques calculs selon la méthode ci-dessous, à mettre dans la même table.

Les commentaires ci-dessous sont traduits de la forme ou j'ai implementé cette méthode et expliquent le détail des calculs.

' Pour les controles redimensionnés -------------------------------------------------
'
' Le 'Rembourage' représente l'espace total libre dans le parent pour un certain controle.
' Ce rembourrage ne varie pas lors des Resize et c'est la clef de l'opération
' Le Parent est l'objet contenant le controle.
'
' 'Rembourage'.Largeur = <Parent>.Width - control.Left - control.Width
' 'Rembourage'.Hauteur = <Parent>.Height- control.Top - control.Height
'
' Pour fixer la Largeur (Width) au 'runtime', on renverse la fonction
' control.Width = Parent.Width - control.Left - 'Rembourage'.Largeur
' De même pour la hauteur.
'
' Le 'Rembourage' est obtenu comme constante pour un controle dans les deux directions, hauteur et largeur, par simple soustraction.
' kW = <Parent>.Width  - control.Width
' kH = <Parent>.Height - control.Height
'
' Pour les controles déplacés sans redimensionnement --------------------------------
'
' kMoveW =  <Parent>.Width  -  control.Left  'dimension design time
' kMoveH  = <Parent>.Height  -  control.Top  'dimension design time
'
' -----------------------------------------------------------------------------------
' Pour un controle à la fois déplacé (kMoveW, kMoveH) et redimensionné  (kW, kH), le code complet serait:
'
' <ControlName>.Move (<Parent>.Width - kMoveW), (<Parent>.Height - kMoveH),
'                   (<Parent>.Width - kW),(<Parent>.Height - kH)
' -----------------------------------------------------------------------------------


Comme example, un fragment de code du 'Resize' du Tab 'Main'
Notez que les dimensions du tab on été mises dans des variables (pctTabW = largeur, pctTabH = hauteur)
Les nombres purs sont des dimensions 'design time' du controle qui ne varient pas.
Comme on ne peut laisser des espaces vide and le 'Move', ceux-ci servent a remplir l'appel de fonction.
' -----------------------------------------------------------------------------------
' Main tab
' -----------------------------------------------------------------------------------

' kW = 7925, kH = N/A
<textBox>.Move 5790, 165, lng_pctTabW - 7925, 360

' kMoveW = 2030, kMoveH = N/A
<CheckBox1>(0).Move (lng_pctTabW - 2030)
<CheckBox2)(0).Move (lng_pctTabW - 2030)
<CommandButton>.Move (lng_pctTabW - 2030)

' Ces trois derniers sont seulement déplacés horizontalement d'ou un seul chiffre.

' kW= 5825, kH = 1080

<SSTab1>.Move 5790, 1005, lng_pctTabW - 5825, lng_pctTabH - 1080

' kW= 135 kH = 480
<RichTextBox>.Move 60, 50, (<SSTab1>.Width - 135), (<SSTab1>.Height - 480)

RESULTATS

Une forme contenant presque 255 controles (plus, si on compte les instances des arrays de controls) qui redimensonnent presque sans erreurs au premier essai (temps de debug: 15 minutes).


Commentaires

Commentaire de HackerASTL le 03/04/2008 00:48:11

7/10

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,094 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales