visual basic 1997

Transcription

visual basic 1997
VISUAL BASIC
1997
>Affichage
Centrer du texte à l’intérieur un formulaire
>Comment :en appelant la fonction Drafflexto de l'API
Il n'est pas aisé de centrer du texte dans un formulaire. Car les dimensions de ce dernier pourront être changées par
l'utilisateur. Fort heureusement, la fonction DrawTexto de I'API de Visual Basic 4 à 6 contient des paramètres qui vous
permettent d'intervenir sur cette présentation. Dans notre exemple, le texte sera centré et automatiquement coupé
entre les mots s'il est trop long pour tenir sur une seule ligne. Cette fonction permet d'obtenir un afficha
ge lisible dans tous les cas. Pour en bénéficier, lancez un nouveau projet exécutable et, dans le bas du formulaire
Form 1, placez un contrôle de type [command]. Conservez les noms donnés par défaut. Ouvrez ensuite la page de
code par le menu Affichage/Code et tapez le listing cicontre. Exécutez alors le programme par la touche <175>.
Cliquez sur le bouton [cornmand 1 ]. Le texte s'affichera toujours en haut et au centre du formulaire, quelle que soit la
taille de celui-ci. S'il est trop étroit, la phrase sera automatiquement coupée.
Private Declare Function DrawTeXt Lib "user32" Alias
"DrawTextA"
(ByVal hdc As Long, ByVal IpStr As String, ByVal nCount AS
Long, IpRect As RECT, ByVal wFormat As Long) As Long
Private Const DT CENTER = &H1
Private Const DT WORDBREAK &H10
Private Type RECT
Left As Long
Top As Long
Right AS Long
Bottom AS Long
End Type
Private Sub Command 1_Clicko
Dim ISuccess AS Long
Dim sPrintTeXt AS String
Dim MyRect As RECT
Forml.Font.Size = 12
Forml.ScaleMode = vbPixels
MyRect.Left = 0
MyRect.Right = Form 1. ScaleWidth
MyRect.Top = 20
MyRect.Bottom = 60
sPrintText = "Ce texte est toujours centr6"
ISUCCeSS = DraWTeXt(Forml.hdc, sPrintText,
Len(sPrintText), MyRect, DT CENTER Or DT WORDBREAK)
End Sub
Rendre tous les contrôles visibles
>si un contrôle tel q’un TextBox n'apparaît pas sur le formulaire pendant la phase de création, il se peut que les
valeurs de ses propriétés Left et Top soient mauvaises. Pour le vérifier, commencez par ouvrir la fenêtre des
Propriétés, puis sélectionnez le contrôle dans la liste déroulante du haut. Pour finir, assurezvous que les valeurs de
Left et Top ne sont pas négatives ou ne placent pas le contrôle hors du formulaire.
>Échange de données
Manipuler un tableau Excel
> Comment: en créant un objet. Il est relativement simple, à partir de Visual Basic 5 ou 6, d'agir sur le contenu d'une
feuille de calcul Excel. Ainsi dans l'exemple suivant, une liste de dix nombres aléatoires va s'inscrire dans une feuille
de calcul nommée feuill. Pour cela, créez avec Visual Basic un nouveau projet de type EXE standard. Placez-y un
contrôle de type Command. Ouvrez la page de code et tapez le listing ci-dessous. Lancez l'exécution du programme
par <F5>, puis cliquez sur [command 1 ]. Uapplication Excel s'ouvrira automatiquement avec une feuille de calcul
contenant une ligne de dix nombres aléatoires. Pour que ce programme fonctionne, il faut bien entendu qu'Excel soit
installé sur votre ordinateur.
option Explicit
Private Sub Commandl_Clicko
Dim 0 AS object
Dim i As Integer
Dim iNumbers(l To 10) As Integer
For i = LBound(iN umbers) To LIBound(i Numbers)
iNumbers(i) = Int(Rnd * 100) + 10
Next i
Set o = CreateObj . ect(oexcel.applicatiom)
o.Visible = True
o.Workbooks.Add
o.sheets(((feuill>>).Range(<(Al:Jl~>).Value = Numbers
End Sub
> Recherche
Atteindre directement une donnée dans un contrôle
> comment: en utilisant la méthode Ensurevisible.
Les contrôles de type ListView ou TreeView, de Visual Basic 5 et 6 ne peuvent pas afficher la totalité des données
lorsqu'elles sont trop nombreuses. Dans ce cas, une barre de défilement verticale apparaît et permet d'atteindre la
donnée voulue. Si le volume de ces données est trop important, il est plus simple d'atteindre l'une d'elles par le biais
d'un programme plutôt que par la barre de défilement. En effet, il existe pour cela une méthode nommée
EnsureVisible. Le listing ci-contre indique comment procéder. Lancez un nouvel exécutable et, sur le formulaire créé
par défaut, placez un contrôle de type ListView. Si celuici est absent de la barre d'outils, déroulez le menu
Projet/Composants et cochez l'option [Microsoft Windows Common Controls 5.0] (ou 6.0 suivant votre version de
Visual Basic). Ouvrez ensuite la page de code par le menu Affichage/Code et saisissez le listing. Lancez l'exécution du
programme par <175>, puis cliquez sur le formulaire. Dans la fenêtre qui apparaît, tapez le numéro de la donnée que
vous voulez visualiser. Validez par [ok]. La donnée recherchée s'affiche alors directement dans le contrôle.
option Explicit
Private Sub Form_Clicko Dim i AS Integer i = CInt(InputBoX$("Entrez le num6ro de la donn6e:"))
ListViewl.Listitems(i).EnsureVisible End Sub
Private Sub ForM-Loado Dim Iv As Listitem Dim i AS Integer For i = 1 To 75 Set Iv = ListViewl.Listltems.Add(, ,
"Donn6e " & i) Next i End Sub
VB Script : Effacer le contenu dune fenêtre MS-DOS
> EXISte-t-il un équivalent de la commande CLS pour effacer le contenu d'une fenêtre DOS avec Windows
Scripting HoSt?
En fait Windows Scripting Host ne sert pas à exécuter des commandes sous DOS. Néanmoins, vous pouvez utiliser la
méthode Run de l'objet WSHShell avec Coinmand.com. Pour cela, ouvrez le Bloc-notes et recopiez le listing ci-dessous. Enregistrez-le sous Essai.vbs. Si vous souhaitez enchaîner plusieurs commandes, regroupezles dans un fichier
Batch, puis lancez ce dernier par Run et Command.com. A la place de C:\Windows\Command.com, vous pouvez
aussi exploiter la variable d'environnement %COMSPEC%. Pour que la fenêtre DOS se ferme automatiquement, remplacez /K par /C.
>Animation : Faire défiler des informations dans une zone
Comment: en affichant les lettres du texte une par une.
Vous serez sûr de retenir l'attention des visiteurs de votre site Web si vous leur proposez quelques animations. Dans
notre exemple, nous allons voir comment il est possible d'écrire un texte lettre par lettre à l'intérieur d'un rectangle.
C'est un effet assez spectaculaire qui est très souvent utilisé. Recopiez le listing cicontre dans le Bloc-notes et
sauvegardez-le sous le nom de defil.htm. Prenez bien garde, si le texte est assez long comme c'est le cas ici, de ne
pas aller à la ligne en appuyant sur la touche <Entrée>. Une telle action provoquerait une erreur dans JavaScript. Vous
devez donc laisser le texte passer automatiquement à la ligne. Cliquez deux fois sur son nom pour le lancer dans votre
navigateur. Vous pouvez modifier la vitesse d'affichage en changeant la valeur de la variable Delai.
<HTML> <HEAD> <SCRIPT> var msg= Il est des circonstances où l'homme, si perspicace qu'il soit, se doit
d'obtempérer à des raisons qui bien qu'aléatoires, n'en conservent pas moins un caractère intrinsèque et absolu." var i
= 0 var delai=80 function clefilO 1 var longueur= msg.length document. form 1.zonetxt.va lue= document
:forml.zonetxt.value + msg.charAt(i) 1++ var timelD= SetTimeout("defil()",delai) if (i >= longueur)
iclearTiMeoUt(t!MeID)j 1 </SCRIPT> </HEAD> <BODY> <BODY onLoad= "defil()"> <FORM NAME="forml">
<TEXTAREA ROWS=5 COLS=40 WRAP="virtual" name="zonetxt"> </TEXTAREA> </FORM></BODY></HTML>
Sélection Modifier les entrées dans une liste
Comment: en appelant l'instruction optiono.
Les entrées de la liste <SELECT> sont fixées dès l'écriture de la page. Mais on peut les modifier dynamiquement à
l'aide d'un script. Pour cela, recopiez le listing
ci-dessous dans le Blocnotes et lancez-le dans votre navigateur. La liste affiche le menu d'un restaurant. En cliquant
sur [menu végétarien], certains plats seront remplacés. Le bouton [menu normal] rétablira les valeurs par défaut. a
<HTML><BODY> <FORM NAME = "repas"> <SCRIPT> function normalffl document.repas.menu.options[l]= new
Option("Assiette de charcuterie") d ocu ment. repas. menu. options[2]= new Option("Steak grillé") )function
vegetarieno( document. repas. menu. options[ 1 l= new Option("Assiette de crudités") doc u ment. repas. men
u.optionS[2]= new Option("Gratin de courgettes") 1 </SCRIPT> <SELECT NAME ="menu"> <OPTION> Salade
verte<OPTION> Charcuterie <OPTION> Steak<OPTION> Pommes vapeur </SELECT> <INPUT TYPE="button"
VALUE="Menu normal" ONCLICK=" normal()">
<INPUT TYPE="button" VALUE="Menu végétarien"
i
ONCLICK= "végétarieno">
</FORM></BODY></HTML>
Présentation : incliner plusieurs lignes de texte
comment: en appelant les méthodes de FAN Win32.
Il est possible d'incliner des lignes de texte dans de nombreux contrôles comme les PictureBox ou les formulaires. Il
faut, pour cela, faire appel aux méthodes CreateFonto et CreateFontlndirecto de l'API de Windows. Le programme
présenté ici commence par la définition de ces deux fonctions, puis crée une structure de type Logfont. La fin du
programme montre comment revenir à une présentation normale. Pour l'illustrer, créez un nouveau projet exécutable,
puis placez un bouton de commande [command 1 ] et un PictureBox Picture 1 sur le formulaire. Ouvrez la page de
code et saisissez le listing ci-contre. Lancez ensuite le programme en appuyant sur la touche <175>, puis cliquez sur
[commandl] pour voir apparaître les lignes de texte. Vous pouvez facilement modifier l'angle d'inclinaison en changeant la valeur de la propriété font. IfEscapement dans le listing. Cette valeur doit être exprimée en dixièmes de
degres. Indiquez, par exemple, 450 si vous désirez obtenir une inclinaison de 45'. Attention: pour certaines polices de
petites dimensions, l'inclinaison de textes peut produire un affichage de mauvaise qualité (effets d'escalier
notamment).
Private Declare Function CreateFontindirect Lib "gdi32"
Alias
1. CreateFontindirectA" (IpLogFont As LOGFONT) As Long Private Declare Function SelectObject Lib 'gdi37 (ByVal
hdc As Long, ByVai hObject As Long) As Long Private Declare Function Deleteobject Lib 'gdi37 (ByVal
hObject As Long) As Long Private Const LF-FACESIZE = 32
Private Type LOGFONT
IfHeight As Long: ifWidth As Long
IfEscapement As Long: IfOrientation As Long
IfWeight As Long: IfItalic As Byte
IfUnderline AS Byte: IfStrikeOUt AS Byte
IfCharSet As Byte: IfoutPrecision As Byte
IfClipPrecision AS Byte: IfQuality As Byte
IfPitchAndFamily As Byte: IfFaceName As String *LFFACESIZE
End Type
Sub Commandi-ClickO Dim font As LOGFONT Dim prevFont As Long, hFont As Long, ret AS Long Const FONTSIZE
= 10 'Modifier ici la valeur de l'angle forit.IfEscapement = 600 fOnt.IfFaceName = "Arial" & Chrffl) font.IfHeight =
(FONTSIZE * -20) / Screen.-rwipsPerPixelY hFont = CreateFontlndirect(font) prevFont = SelectObject(Picturel.hdc,
hFont) Picturel.CurrentX = Picturel.Left + Picturel.Width / 2 Picturel.CurrentY = Picturel.ScaleHeight / 2 Picturel.Print
"Texte incliné" ret = Selectobject(Picturel.hdc, prevFont) ret ~ DeleteObject(hFont) Picturel.CurrentY =
Picturel.ScaleHeight / 2 Picturel.Print "Texte normal" End Sub
Simplifier les calculs horaires
>La base sexagésimale que nous utilisons pour le décompte du temps n'est pas très simple à manipuler. Fort
heureusement, Visual Basic met à notre disposition des fonctions capables d'effectuer les calculs et les
conversions automatiquement. Pour savoir, par exemple, quel jour et quelle heure il sera dans 8 500 minutes, il suff it
d'écrire. nouvDate = Now + TimeSerial (0, 8500, 0). La fonction TimeSerial() convertit le nombre d'heures, de
minutes et de secondes indiqué en arguments et l'ajoute à la date actuelle donnée par Now.
interactivité : Placer des points actifs sur une image
Comment:en insérant quelques contrôles image.
Il peut être intéressant de placer des points dynainiques sur une image afin de rendre votre programme beaucoup plus
attrayant. Cela consiste à ouvrir une petite bulle d'aide lorsque le curseur de la souris survole des zones déterminées
de l'image. Vous pouvez, par exemple, afficher une carte de l'Europe muette et indiquer de cette manière le nom de
chaque capitale lorsque l'utilisateur positionne le curseur au-dessus. Pour cela, créez un nouveau projet exécutable et
placez un contrôle Imagel occupant toute la surface du formulaire. Cliquez sur le bouton placé à droite du champ
Picture de sa tenêtre de Propriétés, et donnez le nom et le chemin de la carte devant être affichée. Positionnez ensuite
de petits contrôles Image sur chaque ville de la carte. Enfin, dans chacun de ces contrôles Image2, Image3, etc.,
spécifiez le nom de la ville auquel il correspond dans le champ ToolTipText de la fenêtre de Propriétés. Notez qu'il est
préférable que tous les fichiers image de votre projet se situent dans un même dossier.
>interface Cacher des écrans accessibles par un sésame
Comment: en analysant une combinaison de touches du clavier. Nombre de programmes utilisent des écrans cachés. Le but n'est pas seulement ludique, il peut vous permettre, par exemple, de prouver que vous être bien l'auteur
du programme si vous êtes le seul à les connaître. Pour en créer, lancez un nouveau projet exécutable, activez Projet/
Ajouter un module de classe, et saisissez la première partie du listing cicontre. Puis cliquez sur le formulaire, ouvrez la
page de code par le menu Affichage/Code, et saisissez la deuxième partie du listing dans cette nouvelle fenêtre.
Lancez l'exécution par <175>. Pressez alors successivement les touches <X>, <Y> et <Z> (en majuscules ou en
minuscules) pour ouvrir la fenêtre de dialogue.
Première partie à saisir dans le module de classe
Private code As String * 3
Property Let cd(touche As Integer)
Select Case touche
Case vbKevX: code = Mid(code, 2) & X'
Case vbKeyY: code = Mid(code, 2) & "Y"
Case vbKeVZ: code = Mid(code, 2) & 7'
Case Else: code
End Select
If code = WZ" Then MsgBox "Ecran cache"
End Property
Deuxième partie à saisir dans la page de code
Dim test AS New Class11
Sub Form-loadO
Me.KeyPreview = True
End Sub
Sub Form_KeyDown(CodeTouche As Integer, Shift AS
Integer)
test.cd = CodeTouche
End Sub
Visual Basic : illustrer des contrôles
L’objectif : transformer des images en bouton.
Un des contrôles Visual Basic les plus utilisés est sans conteste le bouton. Malheureusement, par défaut, ce contrôle
ne possède que deux états : enfoncé et relâché. De plus, il n'est pas possible de changer son apparence . Pourquoi ne
pas plu tot employer un contrôle image pour simuler un bouton ? Voici comment y parvenir. Insérez un contrôle
d'image sur un formulaire et appelez-le MonBouton. Il suffit, lors de chaque clic sur le contrôle de substituer l'image
qu'il affiche à une autre. Pour simuler l'enfoncement, par exemple, créez deux images: une de taille normale et une
légèrement réduite. Lorsqu'un clic est détecté, l'image à l'écran est remplacée par l'autre. N'oubliez pas, lors du
chargement de votre formulaire, d'initialiser la propriété d'image du contrôle (Picture) avec le nom du premier fichier
d'image à afficher. Il ne vous reste plus qu'à saisir le listing cidessous pour que le contrôle d'image se comporte
comme un bouton. Les fichiers image l.bmp et image2.bmp sont deux fichiers graphiques qui serviront à distinguer les
deux états du bouton. Choisissez les images avec suffisamment d'attention pour que l'état du bouton soit toujours
explicite.
Sub Form Load 0
MonBouton.Picture =
'Boutonl.bmip''
End Sub
Sub MonBouton Click 0
Static Etat AS integer
If Etat Then
MonBouton.Picture =
"Boutoni.bmp"
Else
MonSouton. Picture =
"Bouton2.lbmp"
End if
Etat = Not Etat
End Sub
- Janvier 1997