charret2002
Messages postés4Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 1 décembre 2006
-
29 nov. 2006 à 15:09
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
1 déc. 2006 à 17:03
Bonjour.
Je travaille dans une boîte ou nous faisons des fours électriques industriels (je viens d'arriver). Sûr ces fours, nous avons un PC qui permet de tout paramètrer. Pour le moment, nous affichons tous cela sur des écrans CRT de 1600x1200 pixels. Nous aimerions passer à des écrans LCD et également prendre des résolutions plus faibles ce qui fait que je dois développer ou trouver un composant qui adaptera automatiquement la résolution des ActiveX et des exécutables déjà programmer.
Suite à cela, j'ai fait des recherches pour trouver un logiciel qui fait cela mais je n'ai pas trouver beaucoup de chose et ce que j'ai trouvé ne fonctionne pas sur notre projet. Maintenant mon but est de créer un ActiveX qui pourra transformer ses composants. J'ai donc fait un ActiveX mais je ne vois pas comment faire pour qu'il puisse voir les composants qui sont situé dans la même Form que mon ActiveX.
Je suis obligé de faire comme cela car il ne veulent pas avoir à modifier le logiciel de base qui est vraiment énorme. De plus je ne connais pas encore super bien Visual Basic ayant fait mes classes avec du Java et les technologies Web (non Microsoft)...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 29 nov. 2006 à 15:45
Ami,
Celà te coûtera beaucoup moins cher (et à ton entreprise également) d'acheter un ocx déjà fait. Il en existe quelques-uns sur le marché (pour un prix oscillant entre une trentaine et une centaine d'euros, selon les performances obtenues)....
Je t'en parle en parfaite connaissance de cause, crois-moi... (j'ai longtemps vendu Octopus.ocx - jmfien - , aujourd'hui dépassé mais dont je me suis engagé à ne céder ni les droits ni le source. Désolé).
charret2002
Messages postés4Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 1 décembre 2006 29 nov. 2006 à 15:54
Je vais essayer ta solution DARKSIDIOUS. Je redonnerais des nouvelles mais j'aurais surement d'autre question vu mon peu connaissance en visual basic.
jmfmarques, je ne peux pas vraiment acheter quelque chose vu que sa ne fonctionne pas totalement et que dans la boîte ou je suis, ils voudraient pouvoir modifier complètement ce que j'ai codé... De plus tous les logiciel que j'ai trouvé ne fonctionnent pas totalement avec le programme que j'ai. Pour finir c'est un travail de dîplome donc voilà...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 29 nov. 2006 à 18:42
Bon...
Quelques mots, alors, pour que tu t'y prépares bien...
Dans la bouclu suggérée par DARKSIDIOUS, intéresse-toi également (et je dirais principalement) au type de chaque contrôle
If typeof oControl is..... then...
Car tous les contrôles ne se gèrent pas toujours de la même façon
Commence à t'intéresser de très près à la retaille des polices de caractères (ce sera une difficulté importante). Vois par exemple ceci :
Private Sub Command1_Click()
Label1.FontSize = 10 ' ceci est ce que tu as décidé
MsgBox Label1.FontSize ' ceci est ce qu'en fait VB : 9,75
Label1.FontSize = Label1.FontSize * 1.1 ' donc 11 dans ton esprit pour retailler
MsgBox Label1.FontSize ' ceci est ce qu'en fait VB : est resté à 9,75
Label1.FontSize = Label1.FontSize * 1.5 ' donc 15 dans ton esprit
MsgBox Label1.FontSize ' ceci est ce qu'en fait VB : 13,75
End Sub
Ce sera un bon début de découverte des difficultés à attendre
Autres problèmes non moins importants : de nombreuses dimensions sont fixées par SystèmeMetrics de Windows (police des menus, dimensions des flèches des ascenseurs, largeur minimum de certains contrôles, etc...). Or, ton redimensionnement ne viendra pas changer ces valeurs....
Gaffe également au traitement de tout ce qui est graphique (il va falloir penser à tous les cas de figure...)
Prépare-toi, si tu prends ce chemin, à un gros labeur.
Reste évidemment la solution de facilité : modifier la résolution de l'écran client et la restituer in fine, ce qui est largement possible mais que ton entreprise n'acceptera pas pour diverses raisons, y compris si tu prends toutes les précautions pour un rétablissement par un RunOnce en cas d'interruption brutale de ton appli.
Voilà tout ce que je peux te dire à ce stade.
Si tu avances sur ce chemin et que tu te heurtes à une difficulté isolée et bien précisée, il me sera possible de t'orienter un peu, mais pas de donner la solution/code exacte.
Bon courage
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 29 nov. 2006 à 20:51
"...modifier la résolution de l'écran client et la restituer in fine, ce qui est largement possible..."
Pas si possible que ça.
Résolution du logiciel : 1600x1200
Résolution souhaitée : ??? mais plus faible sur un écran LCD. 1280x1204 sur un 17", 1024x768 sur un 15"
Ces écrans là ne seront pas forcément (et même certainement) pas capable de supporter la résolution native du logiciel de 1600x1200.
Si dans l'autre sens (résolution du soft < à celle de l'écran) ta solution, jmfmarques, est envisageable. Dans le cas présent elle ne l'est pas. Et même elle peut se réléver dangereuse pour le matériel. Si les lcd accèptes sans trop de problèmes les surrésolutions en affichant un message d'erreur, il en va pas de même pour des crt. Il y a un risque non négligeable de griller l'écran voire de faire imploser le tube (j'ai testé )
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 29 nov. 2006 à 21:09
Hé ! Hé !
Bonsoir Casy...
Voilà une bonne raison de plus (parmi d'autres) de ne pas toucher sans réfléchir à la résolution de l'écran "client"...
Pour notre ami, maintenant (et bien qu'il aura quelques difficultés à saisir le rapport avec son problème... sauf s'il prend le temps de lire très soigneusement...) :
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 29 nov. 2006 à 21:38
Ah.... (j'oubliais... pour Casy uniquement) :
Ce n'est pas une mauvaise chose que d'utiliser le "flag" CDS_TEST pour le paramètre dwFlags (le 2ème) de la fonction ChangeDisplaySettings de la librairie user32. Celà permet de décider en connaissance de cause et d'éviter bien des déboires.
Une fois la "chose" vérifiée, ma foi, on utilise à nouveau la fonction pour un "changement" dynamique ...
charret2002
Messages postés4Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 1 décembre 2006 30 nov. 2006 à 08:17
Merci beaucoup tous le monde...
jmfmarques je te remercie pour tout et je vais essayer. Pour les différences entre les contrôle j'y avais pensé sa risque d'être long comme travail. Je vous ferais part de mes résultats.
charret2002
Messages postés4Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 1 décembre 2006 1 déc. 2006 à 16:40
Nous voici à la fin de la semaine et il me semble que j'ai fait de l'avance... Je ne suis de loin pas doué en Visual Basic mais voilà ce que j'ai fait et sa à l'air de fonctionner plus ou moins bien... Encore quelques évolution à faire et c'est bon. Dites moi ce que vous en pensez
Option Explicit
Dim ratioHauteur As Double
Dim ratioLargeur As Double
Private Sub UserControl_Resize()
'Mode Utilisateur et pas graphic designer
If Ambient.UserMode Then
Dim hauteur As Integer
Dim largeur As Integer
Dim controlIndex As Integer
'Sert à trouver la résolution de l'écran
hauteur = Screen.Height / Screen.TwipsPerPixelX
largeur = Screen.Width / Screen.TwipsPerPixelY
'Viendra modifier et se fera par rapport à la résolution de l'écran
ratioLargeur = 1280 / 1600
ratioHauteur = 1024 / 1200
'Test tous les control dans une fenêtre
For controlIndex = 0 To UserControl.ParentControls.Count - 1
'Lorsque qu'une erreur arrive, on exécute pas les instructions
On Error GoTo finBoucle
With UserControl.ParentControls.Item(controlIndex)
'Transforme les lignes
If TypeOf UserControl.ParentControls.Item(controlIndex) Is Line Then
.X1 = .X1 * ratioLargeur
.X2 = .X2 * ratioLargeur
.Y1 = .Y1 * ratioHauteur
.Y2 = .Y2 * ratioHauteur
'Tranforme le reste grâce à la gestion d'erreur
Else
Call RedimComposant(UserControl.ParentControls.Item(controlIndex))
Call RedimTexte(UserControl.ParentControls.Item(controlIndex))
Call RedimImage(UserControl.ParentControls.Item(controlIndex))
End If
End With
finBoucle:
Next
End If
End Sub
Private Sub RedimComposant(composant As Control)
'Lorsque qu'une erreur arrive, on exécute pas les instructions
On Error GoTo finFonctionComposant
'Redimensionnement du composant
composant.Top = composant.Top * ratioHauteur
composant.Width = composant.Width * ratioLargeur
composant.Height = composant.Height * ratioHauteur
composant.Left = composant.Left * ratioLargeur
finFonctionComposant:
End Sub
'Je ne doit pas modifier totalement les fonts. Juste pour que sa marche en 1280*1024 Sinon j'aurai de gros soucis mais c'est faisable (fonctionnait en partie)
Private Sub RedimTexte(composant As Control)
'Lorsque qu'une erreur arrive, on exécute pas les instructions
On Error GoTo finFonctionTexte
Dim tailleTexte As Double
Dim dblFSize As Double
'Redimensionnement de la police
dblFSize = CDbl(composant.Font.Size) * ratioHauteur
composant.Font.Size = CLng(dblFSize)
finFonctionTexte:
End Sub
'Ne fonctionne pas encore
Private Sub RedimImage(composant As Control)
On Error GoTo finFonctionImage
composant.Picture.Height = composant.Picture.Height * ratioHauteur
composant.Picture.Width = composant.Picture.Width * ratioLargeur
finFonctionImage:
End Sub
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 1 déc. 2006 à 16:46
remplace ta boucle for par un for each : bien plus rapide, et cà t'évite de faire :
With UserControl.ParentControls.Item(controlIndex) qui lui aussi va prend du temps pour rien !
Donc ca donnerai :
Dim ctlControl As Control
For each ctlControl in UserControl.ParentControls
'Lorsque qu'une erreur arrive, on exécute pas les instructions
On Error GoTo finBoucle
'Transforme les lignes
If TypeOf ctlControl Is Line Then
ctlControl.X1 = ctlControl.X1 * ratioLargeur
ctlControl.X2 = ctlControl.X2 * ratioLargeur
ctlControl.Y1 = ctlControl.Y1 * ratioHauteur
ctlControl.Y2 = ctlControl.Y2 * ratioHauteur
'Tranforme le reste grâce à la gestion d'erreur
Else
Call RedimComposant(ctlControl)
Call RedimTexte(ctlControl)
Call RedimImage(ctlControl)
End If
finBoucle:
Next
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 1 déc. 2006 à 17:03
Je vois que tu a pris le chemin...
C'est bien (je n'ai pas essayé mais vois que c'est pour l'instant bon en matière de redimensionnemen) des contrôles.... mais pas tous !)
Essaye avec des scrollbars, par exemple (dans les 2 sens, à savoir vers résolution plus haute et vers résolution plus basse... ou mieux : avec un controle data...) et constates....
Le redimensionnement des textes (fonts) ne peut se résoudre que très approximativement de cette façon (pas de problèmes réels avec des textboxes, mais quid des labels et boutons de commande ?). Une simple application de coeffocient correcteur ne sera acceptable (et pas toujours) que si, à la fois, tu as laissé de la marge (contrôles plus larges que nécessaire) et que tu as choisi la police la plus "élastique" possible (genre Tahoma). Je te rappelle à ce sujet que tu ne peux distribuer des polices avec ton application, sauf si elles ne sont pas proégées par des droits ou que tu as obtenu l'autorisation expresse de le faire). Mais même ainsi (avec des polices "élastiques") la seule application d'un coefficient conduira à des "occupations" différentes des contrôles par le texte qu'ils contiennent...
On en viendra après (seulement après ) aux PictureBoxes et contrôles image... (où de nombreuses considérations devront également être prises en compte)