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