ADDYSHEDULE : VISUALISEUR DE PROGRAMMES

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 30 déc. 2005 à 10:04
zaimfaycal Messages postés 7 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 6 janvier 2010 - 6 janv. 2010 à 11:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35135-addyshedule-visualiseur-de-programmes

zaimfaycal Messages postés 7 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 6 janvier 2010
6 janv. 2010 à 11:14
merci Addy
mais jé pas bien compris ce que tu veux dire de "d'en garder une instance dans la propriété Tag de chaque SheduleItem" et aussi pour l'évènement FormatItem :S
est ce que vous m'expliquer
et mercii :)
cs_addy Messages postés 39 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 20 mars 2009
31 déc. 2009 à 11:35
En fait tu n'as pas vraiment besoin de modifier la structure de SheduleItem. Il suffit de créer une classe utilitaire pour stocker toute information additionnelle (Filière, Niveau, Groupe, ...) et d'en garder une instance dans la propriété Tag de chaque SheduleItem. Tu pourras ensuite exploiter ces informations dans ton gestionnaire de FormatItem. Dans tous les cas, même en gardant ton approche, c'est dans le gestionnaire de l'évènement FormatItem que tu personnalise l'apparence de tes items. J'espère que cette indication t'aidera. Allez, bonne programmation.
zaimfaycal Messages postés 7 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 6 janvier 2010
30 déc. 2009 à 13:12
Salut
Merci addy pour l’aide, mais j'ai tjrs un problème, c que pour mon projet le 'SheduleItem' dois contenir les champs suivant :

Jour as single
Heuredebut as single
HeureFin As Single
Tag As Object
Formateur As String
Annéeformation As String
Secteur As String
Filiere As String
Niveau As String
Groupe As String
Modul As String
Salle As String
Minutedebut As Double
MinuteFin As Double
J'ai refait le code du SheduleItem (j'ai pu réalisé ce code):


'Début du code

Imports System.ComponentModel


< _
ToolboxItem(False), _
DesignTimeVisible(False) _
> _
Public Class SheduleItem
Inherits Component
#Region " Champs "
Private _CODE As String
' Private m_Category As Integer
Private _Jour As Integer
Private m_SubRow As Integer
Private _Heuredebut As Single
Private _HeureFin As Single
Private _Tag As Object
Private _Formateur As String
Private _Annéeformation As String
Private _Secteur As String
Private _Filiere As String
Private _Niveau As String
Private _Groupe As String
Private _Modul As String
Private _Salle As String
Private _Minutedebut As Double
Private _MinuteFin As Double
#End Region

#Region " Constructeurs "
Public Sub New()
MyBase.New()
End Sub

Public Sub New(ByVal text As String)
MyBase.New()
_CODE = text
End Sub

Public Sub New(ByVal text As String, ByVal row As Integer, ByVal subRow As Integer, _
ByVal firstCol As Single, ByVal lastCol As Single)
MyBase.New()
_CODE = text
_Jour = row
_Heuredebut = firstCol
_HeureFin = lastCol
End Sub
#End Region

#Region " Propriétés "
< _
Category("Appearance"), _
Description("Texte qui s'affiche sur la cellule"), _
DefaultValue("") _
> _
Public Property Text() As String
Get
Return _CODE
End Get
Set(ByVal Value As String)
_CODE = Value
OnTextChanged(EventArgs.Empty)
End Set
End Property

'< _
'Category("Appearance"), _
'Description("Renvoie/Défini la catégorie à laquelle la cellule appartient"), _
'DefaultValue(0) _
'> _
'Public Property Category() As Integer
' Get
' Return m_Category
' End Get
' Set(ByVal Value As Integer)
' m_Category = Value
' OnCategoryChanged(EventArgs.Empty)
' End Set
'End Property

< _
Category("Coordonnées"), _
Description("Renvoie/Défini le numéro de ligne de la cellule"), _
DefaultValue(0) _
> _
Public Property Row() As Integer
Get
Return _Jour
End Get
Set(ByVal Value As Integer)
_Jour = Value
OnRowChanged(EventArgs.Empty)
End Set
End Property

< _
Category("Coordonnées"), _
Description("Renvoie/Défini la division de ligne dans laquelle la cellule apparaît"), _
DefaultValue(0) _
> _
Public Property SubRow() As Integer
Get
Return m_SubRow
End Get
Set(ByVal Value As Integer)
m_SubRow = Value
OnSubRowChanged(EventArgs.Empty)
End Set
End Property

< _
Category("Coordonnées"), _
Description("Renvoie/Défini la colonne qui délimite la cellule à gauche"), _
DefaultValue(8.0F) _
> _
Public Property FirstColumn() As Single
Get
Return _Heuredebut
End Get
Set(ByVal Value As Single)
_Heuredebut = Value
OnFirstColumnChanged(EventArgs.Empty)
End Set
End Property

< _
Category("Coordonnées"), _
Description("Renvoie/Défini la colonne qui délimite la cellule à droite"), _
DefaultValue(8.0F) _
> _
Public Property LastColumn() As Single
Get
Return _HeureFin
End Get
Set(ByVal Value As Single)
_HeureFin = Value
OnLastColumnChanged(EventArgs.Empty)
End Set
End Property

< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Tag() As Object
Get
Return _Tag
End Get
Set(ByVal Value As Object)
_Tag = Value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Formateur() As String
Get
Return _Formateur
End Get
Set(ByVal value As String)
_Formateur = value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Annéeformation() As String
Get
Return _Annéeformation
End Get
Set(ByVal value As String)
_Annéeformation = value
End Set
End Property

< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Secteur() As String
Get
Return _Secteur
End Get
Set(ByVal value As String)
_Secteur = value
End Set
End Property

< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Niveau() As String
Get
Return _Niveau
End Get
Set(ByVal value As String)
_Niveau = value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Filiere() As String
Get
Return _Filiere
End Get
Set(ByVal value As String)
_Filiere = value
End Set
End Property


< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Groupe() As String
Get
Return _Groupe
End Get
Set(ByVal value As String)
_Groupe = value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Minutedebut() As Double
Get
Return _Minutedebut
End Get
Set(ByVal value As Double)
_Minutedebut = value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property MinuteFin() As Double
Get
Return _MinuteFin
End Get
Set(ByVal value As Double)
_MinuteFin = value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Modul() As String
Get
Return _Modul
End Get
Set(ByVal value As String)
_Modul = value
End Set
End Property
< _
Category("Data"), _
Description("Donnée quelconque associée à la cellule"), _
TypeConverter("System.ComponentModel.StringConverter, System") _
> _
Public Property Salle() As String
Get
Return _Salle
End Get
Set(ByVal value As String)
_Salle = value
End Set
End Property

_
Public ReadOnly Property Width() As Single
Get
Return _HeureFin - _Heuredebut
End Get
End Property
#End Region

#Region " Evènements "
Public Event TextChanged(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnTextChanged(ByVal e As EventArgs)
RaiseEvent TextChanged(Me, e)
End Sub

Public Event CategoryChanged(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnCategoryChanged(ByVal e As EventArgs)
RaiseEvent CategoryChanged(Me, e)
End Sub

Public Event RowChanged(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnRowChanged(ByVal e As EventArgs)
RaiseEvent RowChanged(Me, e)
End Sub

Public Event SubRowChanged(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnSubRowChanged(ByVal e As EventArgs)
RaiseEvent SubRowChanged(Me, e)
End Sub

Public Event FirstColumnChanged(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnFirstColumnChanged(ByVal e As EventArgs)
RaiseEvent FirstColumnChanged(Me, e)
End Sub

Public Event LastColumnChanged(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnLastColumnChanged(ByVal e As EventArgs)
RaiseEvent LastColumnChanged(Me, e)
End Sub
#End Region

End Class


'Fin du code


mais ça marche pas
je me demande est ce que vous pouvez m'aider
et mercii
cs_addy Messages postés 39 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 20 mars 2009
16 déc. 2009 à 14:50
Bien sûr qu'il est possible de stocker les données sur n'importe quel support. Si tu as une BDD avec une table pour le planning, il suffit de charger le contenu de cette dans un DataSet (un bon tuto sur VB.Net t'expliquera comment). Pour le reste, c'est presque sans changement.
zaimfaycal Messages postés 7 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 6 janvier 2010
14 déc. 2009 à 17:37
merciii, mais j'ai constaté que les donnée se stock sur un fichier xml ,est ce que c'est possible de les stocké dans une base de donné SQL SERVER :D et comment si c’est possible :p
Et désolé pour le dérangement
cs_addy Messages postés 39 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 20 mars 2009
14 déc. 2009 à 10:13
Le contrôle lui-même est écrit en VB.Net. Seule la démo est en C#. Du reste, tu peux utiliser SharpDevelop pour traduire automatiquement un code C# en VB.Net. N'oublie pas de jeter un coup d'œil sur www.developpez.com; tu y trouveras certainement un bon manuel pour débuter en VB.Net. Bonne programmation.
zaimfaycal Messages postés 7 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 6 janvier 2010
13 déc. 2009 à 14:08
Salut
Merci Addy beaucoup pour cette source

Mais pour mois je travaille sur un projet de gestion des emplois du temps pour un établissement scolaire et je ne maîtrise que le langage visuel basic .net alors je me demande si il y un support qui explique comment travaillé avec ce magnifique contrôle pour que je puisse traduire ce code en vb.net et merci d'avance

pour la note c' est 10/10 et même plus :)
cs_addy Messages postés 39 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 20 mars 2009
18 mai 2009 à 10:53
Dans cette approche, tu supposes que l'élément du planning qui se trouve à la position e.Index appartient également à la ligne dont on veut connaître le libellé. Dans cet ordre d'idée, on pourrait tout simplement formuler l'algorithme comme ceci:

If e.Index < Items.Count Then
e.Text = Items(e.Index).Text
Else
e.Text = "Ligne " & e.Index
End If

Par contre, dans la grande majorité des cas, cette assertion ne sera pas vraie. Donc le mieux c'est de rechercher le premier élément de la ligne dont on veut définir le libellé:

e.Text = "Ligne " & e.Index
For Each item As SheduleItem In Items
If item.Row = e.Index then
e.Text = item.Text
Exit For
End If
Next

J'espère que ceci apporte de l'eau à ton moulin :)
jsiAngers Messages postés 7 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 28 avril 2009
17 mai 2009 à 16:00
Bonjour,

Merci pour cette source.

Elle m'est très utile.

Je suis en train de faire quelques améliorations :
Exemple : pour permettre la mise en place d'un libellé automatique pour la ligne
Protected Overridable Sub OnQueryRowHeader(ByVal e As HeaderEventArgs)
'*** Modification JSI du 17/05/09
'Recherche l'item correspondant à la ligne appelée
Dim i As Integer
Dim item As New SheduleItem
item.Text = "Ligne" & e.Index

For i = 0 To Items.Count - 1
If i = e.Index Then
item = Items(i)
End If
Next
e.Text = item.Text '"Ligne" & e.Index
RaiseEvent QueryRowHeader(Me, e)
End Sub
cs_addy Messages postés 39 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 20 mars 2009
16 sept. 2008 à 09:51
Salut Casy,
ta note a été prise en compte et des commentaires seront ajoutés dans la prochaine mise à jour de la source (dans le démo surtout).
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 sept. 2008 à 19:15
Zut, je suis pas sur que ma note ait été prise en compte, donc je la remet
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 sept. 2008 à 19:13
Merci pour cette source.

Il manque un peu de commentaire dans le code, mais j'ai réussi à comprendre le principal.

Je suis en train de l'adapter pour un dev pour un client. Elle va me permettre d'afficher un planning de chaine de production

J'étais parti, au départ sur des composants "pro" tels que ceux de ComponentOne ou DevXperience. Mais plutot que de payer cher des composants qui ne correspondent pas tout à fait à ce que je veux et je ne maitrise pas au niveau adaptation, cette source a le mérite d'être simple et au moins je maitrise toute l'adaptabilité possible.

Modifs prévues :
- Ajout d'un entête pour les divisions de lignes
- Report des propriétés couleur, style, ... sur les items plutôt que sur le contrôle parent
- Ajout (si j'y arrive) de la gestion Drag&Drop des items
- et plein d'autres choses si j'ai le temps.

Je n'aurais jamais eu l'idée de partir sur cette piste pour développer une source de ce genre alors que finalement c'est relativement simple.

Merci pour ton aide ;)

9/10 pour l'absence de commentaires dans le code
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
11 avril 2007 à 09:01
Salut,

Merci beaucoup pour cette source dont je m'inspire grandement pour faire mon propre contôle planning.
Je la trouve très bien écrite, malgré le manque de commentaires sur certaines fonctions.
10/10 !!
ienien51 Messages postés 1 Date d'inscription lundi 16 février 2004 Statut Membre Dernière intervention 10 février 2006
10 févr. 2006 à 15:06
Bonjour,

Je ne suis pas trés experimenté, mais j'aimerais fortement pouvoir utiliser AddyShedule. Est-il possible d'avoir un exemple d'utilisation?

Merci d'avance
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
30 déc. 2005 à 10:04
Bravo pour ta source. Pour que ta démo fonctionne du premier coup, je te conseille de changer le chemin de sortie en .\ au lieu de bin\Debug
Rejoignez-nous