Soyez le premier à donner votre avis sur cette source.
Vue 7 126 fois - Téléchargée 1 606 fois
' ' horloge (form1) : vbNet 10 Option Explicit On Public Class Form1 Dim t As Integer Dim ri Dim alarme(3) As Boolean Dim Halarme(3) As String Dim alternat As Boolean Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer Me.Left = 10 Me.Top = 10 Timer1.Enabled = False Timer1.Interval = 1000 Timer1.Enabled = True For i = 0 To 59 If i < 24 Then ComboBox1.Items.Add(Format(i, "00")) ComboBox4.Items.Add(Format(i, "00")) ComboBox7.Items.Add(Format(i, "00")) ComboBox10.Items.Add(Format(i, "00")) End If ComboBox2.Items.Add(Format(i, "00")) ComboBox3.Items.Add(Format(i, "00")) ComboBox5.Items.Add(Format(i, "00")) ComboBox6.Items.Add(Format(i, "00")) ComboBox8.Items.Add(Format(i, "00")) ComboBox9.Items.Add(Format(i, "00")) ComboBox11.Items.Add(Format(i, "00")) ComboBox12.Items.Add(Format(i, "00")) Next ComboBox1.SelectedIndex = 0 ComboBox2.SelectedIndex = 0 ComboBox3.SelectedIndex = 0 ComboBox4.SelectedIndex = 0 ComboBox5.SelectedIndex = 0 ComboBox6.SelectedIndex = 0 ComboBox7.SelectedIndex = 0 ComboBox8.SelectedIndex = 0 ComboBox9.SelectedIndex = 0 ComboBox10.SelectedIndex = Now.Hour ComboBox11.SelectedIndex = Now.Minute ComboBox12.SelectedIndex = Now.Second Label1.BackColor = Color.FromArgb(225, 225, 225) Label2.BackColor = Color.FromArgb(225, 225, 225) Label3.BackColor = Color.FromArgb(225, 225, 225) End Sub Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick t = Mid(TimeOfDay, 1, 1) ' hh:mn:ss Call quelleImage() PictureBox1.Image = ri t = Mid(TimeOfDay, 2, 1) Call quelleImage() PictureBox2.Image = ri t = Mid(TimeOfDay, 4, 1) Call quelleImage() PictureBox3.Image = ri t = Mid(TimeOfDay, 5, 1) Call quelleImage() PictureBox4.Image = ri t = Mid(TimeOfDay, 7, 1) Call quelleImage() PictureBox5.Image = ri t = Mid(TimeOfDay, 8, 1) Call quelleImage() PictureBox6.Image = ri ' alternat = Not alternat If alarme(1) = True Then If TimeOfDay >= CDate(Halarme(1)) Then If alternat = True Then Label1.BackColor = Color.FromArgb(225, 225, 225) If alternat = False Then Label1.BackColor = Color.FromArgb(255, 0, 0) End If End If If alarme(2) = True Then If TimeOfDay >= CDate(Halarme(2)) Then If alternat = True Then Label2.BackColor = Color.FromArgb(225, 225, 225) If alternat = False Then Label2.BackColor = Color.FromArgb(255, 0, 0) End If End If If alarme(3) = True Then If TimeOfDay >= CDate(Halarme(3)) Then If alternat = True Then Label3.BackColor = Color.FromArgb(225, 225, 225) If alternat = False Then Label3.BackColor = Color.FromArgb(255, 0, 0) End If End If End Sub Sub quelleImage() Select Case t Case 0 : ri = My.Resources._0 Case 1 : ri = My.Resources._1 Case 2 : ri = My.Resources._2 Case 3 : ri = My.Resources._3 Case 4 : ri = My.Resources._4 Case 5 : ri = My.Resources._5 Case 6 : ri = My.Resources._6 Case 7 : ri = My.Resources._7 Case 8 : ri = My.Resources._8 Case 9 : ri = My.Resources._9 End Select End Sub Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click alarme(1) = False Label1.BackColor = Color.FromArgb(225, 225, 225) Label1.Text = "Alarme à l'arrêt" End Sub Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click alarme(2) = False Label2.BackColor = Color.FromArgb(225, 225, 225) Label2.Text = "Alarme à l'arrêt" End Sub Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click alarme(3) = False Label3.BackColor = Color.FromArgb(225, 225, 225) Label3.Text = "Alarme à l'arrêt" End Sub Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Halarme(1) = Format(ComboBox1.SelectedIndex, "00") & ":" & Format(ComboBox2.SelectedIndex, "00") & ":" & Format(ComboBox3.SelectedIndex, "00") Label1.Text = "Alarme = " & CDate(Halarme(1)) alarme(1) = True End Sub Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Halarme(2) = Format(ComboBox4.SelectedIndex, "00") & ":" & Format(ComboBox5.SelectedIndex, "00") & ":" & Format(ComboBox6.SelectedIndex, "00") Label2.Text = "Alarme = " & CDate(Halarme(2)) alarme(2) = True End Sub Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click Halarme(3) = Format(ComboBox7.SelectedIndex, "00") & ":" & Format(ComboBox8.SelectedIndex, "00") & ":" & Format(ComboBox9.SelectedIndex, "00") Label3.Text = "Alarme = " & CDate(Halarme(3)) alarme(3) = True End Sub Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click Try TimeOfDay = New Date(Now.Year, Now.Month, Now.Day, ComboBox10.SelectedIndex, ComboBox11.SelectedIndex, ComboBox12.SelectedIndex) Catch ex As Exception MsgBox(Err.Number & vbLf & vbLf & Err.Description, vbExclamation) End Try End Sub End Class
15 oct. 2011 à 23:16
MsgBox(Err.Number & vbLf & vbLf & Err.Description, vbExclamation)
Fais plutot :
MessageBox.Show(ex.ToString)
Tu aura plus d'information.
Concernant les noms des contrôles, certes, mais c'est souvent plus clair.
Surtout quand tu cherches à comprendre une source.
15 oct. 2011 à 20:53
Pour l'affichage avec erreur, oui, mais je n'utilise pas error, c'est juste de l'affichage, en fait c'est simple, tout ce qui tourne en vb6 et n'est pas plus performant à l'oeil, je le mets en vb6.
Cordialement, marche pas ce forum, je perd souvent le curseur !
Joe
15 oct. 2011 à 20:29
Pour information, je suis développeur pro, donc certains conseils sont directement issus de ce monde.
Le nommage des contrôles permet aussi d'éviter de chercher à chaque fois que l'on ajoute une ligne "Quel est le contrôle qui contient l'information désirée ?"
Par exemple, TxtHeureAlarme1 est plus facilement logiquement utilisable que TextBox12.
C'est une règle qui est indispensable dans les projets de tailles modérée et plus, et c'est une habitude essentielle à prendre.
MsgBox, mid, ... sont des fonctions issues de VB6, conservées pour compatibilité, mais sont à éviter quand il y a des alternatives plus respectables et plus logiques dans les classes standards du framework. Par exemple, Mid index les caractère sur une base 1 alors que partout dans le framework on est en base 0, l'utiliser, revient à faire en permanence une gymnastique intellectuelle, fatiguante et source d'erreur.
Certes, tu n'utilises pas On Error, mais tu utilises Err :
# Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
# Try
# TimeOfDay = New Date(Now.Year, Now.Month, Now.Day, ComboBox10.SelectedIndex, ComboBox11.SelectedIndex, ComboBox12.SelectedIndex)
# Catch ex As Exception
# MsgBox(Err.Number & vbLf & vbLf & Err.Description, vbExclamation)
# End Try
# End Sub
Utilises plutôt l'objet Exception fourni par le Catch.
Concernant la collection et la structure, faire cela pourra te permettre, sans réclamer beaucoup de code, de pouvoir changer le nombre d'alarme disponible.
Concernant la RAM, vouloir l'économiser à l'excès, c'est vrai que ce n'est pas utile, mais ne pas la gaspiller inutilement est quand même respectable, bons nombre d'ordinateur n'ont pas forcément 4Go de RAM.
Je n'ai pas fait de remarque sur l'usage du Timer.
Tous les processeurs (je parle des PC) actuellement, utilisent les Timers à foison, donc ce n'est pas un de plus qui va les déranger.
15 oct. 2011 à 19:58
Je ne nomme jamais les contrôles car si on se passe le code, ça pénalise trop la personne qui doit donner un nom à chaque contrôle, il est mieux d'indiquer simplement dans la procédure ce que fait le contrôle, ce qui ici a été omis car on comprend ce que ça fait, c'est en somme marqué sur le bouton, suffit de venir de la feuille au code.
Option explicit on, est activé, le reste n'a pas d'importance.
MsgBox est un héritage vb6, c'est au choix.
Mid fonctionne très bien.
L'importe de MS, le paramétrage, ça regarde celui qui va l'installer ensuite...
Je n'ai pas utilisé error ou on error !
La structure que j'utilise est une structure VB qui fonctionne, c'est suffisant, on peut en effet mettre une variable à deux entrées i(x,y), c'est au choix, ou trois variables i, j, k, vu le faible nombre ça n'a pas à être discuté.
Pour le select case, j'utilise au maximum les directives VB, et surtout B (de Basic) dans le code.
Concernant la RAM, elle est passé de 64 ko à 4 Go et maintenant davantage en 64 bits, il est ridicule de tenter de faire une économie de bouts de chandelles avec si peu de place prise, on s'en préoccupe si réellement une grande place mémoire est prise.
Concernant le Timer et le temps processeur, là c'est certain que le processeur n'aime pas les Timer, mais bon, c'est nécessaire dans le code, à moins de faire une boucle avec des goto, ce qui reviendrait sans doute au même, voire pire, donc on n'y peut rien c'est comme ça !
Cordialement.
Joe.
15 oct. 2011 à 18:34
Je pense qu'il faut que tu apprenne les règles de présentations basiques :
- Nommer ses contrôles de manière adaptée, Button6 fait quoi ?
- Activer Option Strict et Option Explicit
- MsgBox doit être évité, on lui préfère MessageBox.Show(...)
- Mid doit être remplacé par MaChaine.SubString(...)
- Retirer l'import automatique de Microsoft.VisualBasic (Propriétés du projet, Références).
- Ne pas utiliser Err ou On Error, utilises un Try/Catch et l'objet d'Exception qui est retourné.
Ensuite, concernant le code :
- Le code :
# Dim alarme(3) As Boolean
# Dim Halarme(3) As String
Me fait penser qu'une structure contenant un Booléen et un Date remplacerait avantageusement ces 2 tableaux.
Tu peux aussi regarder du coté de List(Of ...) pour gérer autant d'alarmes que désirer.
# Sub quelleImage()
# Select Case t
# Case 0 : ri = My.Resources._0
# Case 1 : ri = My.Resources._1
# Case 2 : ri = My.Resources._2
# Case 3 : ri = My.Resources._3
# Case 4 : ri = My.Resources._4
# Case 5 : ri = My.Resources._5
# Case 6 : ri = My.Resources._6
# Case 7 : ri = My.Resources._7
# Case 8 : ri = My.Resources._8
# Case 9 : ri = My.Resources._9
# End Select
# End Sub
Peut être ramplacée par un Dictionary(Of ...), cela limitera la conso mémoire et simplifiera ton code.
Réponds déjà à ces quelques remarques, on verra pour la suite.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.