Se connecter avec
S'enregistrer | Connectez-vous

VB6 Griser un calendrier (Enabled)

Dernière réponse : dans Programmation

Bonjour à tous,
J'ai un formulaire qui me sert à la fois d'édition et de visualisation de données personnelles (Nom, prénom, adresse, date de naissance...). Pour la date de naissance, j'ai un calendrier dans lequel on choisit le mois et l'année, puis on clique sur le jour.

Dans le cas d'une édition, toutes les textbox et le calendrier sont accessibles (Enabled = True). Mais dans le cas d'une visualisation, toutes les textbox sont grisées, inaccessibles (Enabled = False). Par contre le calendrier, lui, n'a pas de propriété Enabled.

Y a t'il tout de même un moyen pour le griser ?

Merci.

Autres pages sur : vb6 griser calendrier enabled

Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Il n'y a rien qui m'énerve plus qu'un bout de programme mal fichu. Or ce calendrier pourtant made by Crosoft n'exporte pas sa propriété Enabled. Quelle honte !

De plus, les contrôles n'exportent pas non plus leur handle, avec lequel il serait facile d'appliquer les API standards. Pas grave, on va le trouver quand même, ce handle :pfff: 

  1. ' // Apprendre les API à VB
  2. Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Long, ByVal fEnable As Long) As Long
  3. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hwnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
  4.  
  5. Private Sub Command1_Click()
  6. Dim hWnd As Long
  7.  
  8. ' // Je vais le trouver quand même ton handle !
  9. hWnd = FindWindowEx(Me.hWnd, 0, "CalendarWndClass", vbNullString)
  10.  
  11. ' // Voilà, je t'ai eu !
  12. If EnableWindow(hWnd, False) <> 0 Then EnableWindow hWnd, True
  13. End Sub


-------------------------------------

@Beber : Ça marche, mais c'est vraiment capilotracté ! En plus, si plusieurs contrôles de classe CalendarWndClass existe sur la même feuille, il y a risque de confusion. Le VB, c'est vraiment pas un langage joli, joli !!!! :/ 

Je crois te l'avoir déjà dit, utilise un DTPicker ;) 
Expert Programmation

Salut,

Quel contrôle utilises-tu ?
J'en connais trois :
  • MonthView (MSCOMCT2.OCX)
  • DTPicker (MSCOMCT2.OCX)
  • Calendar (MSCAL.OCX)

    Comme seul Calendar semble poser problème, je suppose que c'est lui qui t'embête. Je t'invite d'abord à reconsidérer ton choix de contrôle. Personnellement, DTPicker est mon préféré.

    Cela dit, je n'ai pas le droit de t'imposer mes choix. Or donc, Calendar est un contrôle pour choisir une date, pas pour l'afficher. Donc voici une alternative, encore et toujours proposée sous forme de fichier FRM à charger dans un projet temporaire :
    1. VERSION 5.00
    2. Object = "{8E27C92E-1264-101C-8A2F-040224009C02}#7.0#0"; "mscal.OCX"
    3. Begin VB.Form Form1
    4. Caption = "Form1"
    5. ClientHeight = 8415
    6. ClientLeft = 60
    7. ClientTop = 345
    8. ClientWidth = 4695
    9. LinkTopic = "Form1"
    10. ScaleHeight = 8415
    11. ScaleWidth = 4695
    12. StartUpPosition = 3 'Windows Default
    13. Begin VB.Frame Frame2
    14. BackColor = &H000000A0&
    15. BorderStyle = 0 'None
    16. ForeColor = &H00A00000&
    17. Height = 3615
    18. Left = 120
    19. TabIndex = 4
    20. Top = 4680
    21. Width = 4455
    22. Begin VB.TextBox Text2
    23. Enabled = 0 'False
    24. Height = 375
    25. Left = 120
    26. TabIndex = 6
    27. Text = "Text1"
    28. Top = 120
    29. Visible = 0 'False
    30. Width = 2535
    31. End
    32. Begin MSACAL.Calendar Calendar2
    33. Height = 3375
    34. Left = 120
    35. TabIndex = 5
    36. Top = 120
    37. Width = 4215
    38. _Version = 524288
    39. _ExtentX = 7435
    40. _ExtentY = 5953
    41. _StockProps = 1
    42. BackColor = -2147483633
    43. Year = 2010
    44. Month = 8
    45. Day = 17
    46. DayLength = 1
    47. MonthLength = 2
    48. DayFontColor = 0
    49. FirstDay = 1
    50. GridCellEffect = 1
    51. GridFontColor = 160
    52. GridLinesColor = -2147483632
    53. ShowDateSelectors= -1 'True
    54. ShowDays = -1 'True
    55. ShowHorizontalGrid= -1 'True
    56. ShowTitle = -1 'True
    57. ShowVerticalGrid= -1 'True
    58. TitleFontColor = 160
    59. ValueIsNull = 0 'False
    60. BeginProperty DayFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
    61. Name = "Arial"
    62. Size = 8.25
    63. Charset = 0
    64. Weight = 700
    65. Underline = 0 'False
    66. Italic = 0 'False
    67. Strikethrough = 0 'False
    68. EndProperty
    69. BeginProperty GridFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
    70. Name = "Arial"
    71. Size = 8.25
    72. Charset = 0
    73. Weight = 400
    74. Underline = 0 'False
    75. Italic = 0 'False
    76. Strikethrough = 0 'False
    77. EndProperty
    78. BeginProperty TitleFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
    79. Name = "Arial"
    80. Size = 12
    81. Charset = 0
    82. Weight = 700
    83. Underline = 0 'False
    84. Italic = 0 'False
    85. Strikethrough = 0 'False
    86. EndProperty
    87. End
    88. End
    89. Begin VB.CheckBox Check2
    90. Caption = "Le contrôle Calendar 2 est rendu invisible et remplacé"
    91. ForeColor = &H000000A0&
    92. Height = 255
    93. Left = 120
    94. TabIndex = 3
    95. Top = 4320
    96. Value = 1 'Checked
    97. Width = 4455
    98. End
    99. Begin VB.CheckBox Check1
    100. Caption = "Le contrôle Calendar 1 est activé par son conteneur"
    101. ForeColor = &H00A00000&
    102. Height = 255
    103. Left = 120
    104. TabIndex = 2
    105. Top = 120
    106. Value = 1 'Checked
    107. Width = 4455
    108. End
    109. Begin VB.Frame Frame1
    110. BackColor = &H00A00000&
    111. BorderStyle = 0 'None
    112. ForeColor = &H00A00000&
    113. Height = 3615
    114. Left = 120
    115. TabIndex = 0
    116. Top = 480
    117. Width = 4455
    118. Begin MSACAL.Calendar Calendar1
    119. Height = 3375
    120. Left = 120
    121. TabIndex = 1
    122. Top = 120
    123. Width = 4215
    124. _Version = 524288
    125. _ExtentX = 7435
    126. _ExtentY = 5953
    127. _StockProps = 1
    128. BackColor = -2147483633
    129. Year = 2010
    130. Month = 8
    131. Day = 17
    132. DayLength = 1
    133. MonthLength = 2
    134. DayFontColor = 0
    135. FirstDay = 1
    136. GridCellEffect = 1
    137. GridFontColor = 10485760
    138. GridLinesColor = -2147483632
    139. ShowDateSelectors= -1 'True
    140. ShowDays = -1 'True
    141. ShowHorizontalGrid= -1 'True
    142. ShowTitle = -1 'True
    143. ShowVerticalGrid= -1 'True
    144. TitleFontColor = 10485760
    145. ValueIsNull = 0 'False
    146. BeginProperty DayFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
    147. Name = "Arial"
    148. Size = 8.25
    149. Charset = 0
    150. Weight = 700
    151. Underline = 0 'False
    152. Italic = 0 'False
    153. Strikethrough = 0 'False
    154. EndProperty
    155. BeginProperty GridFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
    156. Name = "Arial"
    157. Size = 8.25
    158. Charset = 0
    159. Weight = 400
    160. Underline = 0 'False
    161. Italic = 0 'False
    162. Strikethrough = 0 'False
    163. EndProperty
    164. BeginProperty TitleFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
    165. Name = "Arial"
    166. Size = 12
    167. Charset = 0
    168. Weight = 700
    169. Underline = 0 'False
    170. Italic = 0 'False
    171. Strikethrough = 0 'False
    172. EndProperty
    173. End
    174. End
    175. Begin VB.Line Line2
    176. BorderColor = &H80000014&
    177. X1 = 120
    178. X2 = 4560
    179. Y1 = 4215
    180. Y2 = 4215
    181. End
    182. Begin VB.Line Line1
    183. BorderColor = &H80000010&
    184. X1 = 120
    185. X2 = 4560
    186. Y1 = 4200
    187. Y2 = 4200
    188. End
    189. End
    190. Attribute VB_Name = "Form1"
    191. Attribute VB_GlobalNameSpace = False
    192. Attribute VB_Creatable = False
    193. Attribute VB_PredeclaredId = True
    194. Attribute VB_Exposed = False
    195. Private Sub Calendar2_Click()
    196. Text2.Text = Format(Calendar2.Value, "dddd d mmmm yyyy")
    197. End Sub
    198.  
    199. Private Sub Check1_Click()
    200. Frame1.Enabled = Check1.Value <> 0
    201. End Sub
    202.  
    203. Private Sub Check2_Click()
    204. Text2.Visible = Check2.Value = 0
    205. Calendar2.Visible = Check2.Value <> 0
    206. End Sub
    207.  
    208. Private Sub Form_Load()
    209. Calendar2_Click
    210. End Sub
    Expert Programmation

    >>> Pourtant c'est un certain Zeb qui m'avait aiguillé sur le Calendar. Si je le retrouve celui-là... :D  :D  :D 
    Qu'avais-tu demandé ? Un calendrier, ou un contrôle pour saisir les dates ? :o  [:patch]

    Quelle solution as-tu choisi ?

    Je crois que j'avais demandé :
    Citation :
    Autre chose : dans VB 2010, il y a un calendrier dans lequel on peut choisir une date (ex pour une date de naissance). On peut faire ça dans VB 6.0 ?
    :whistle:  :whistle: 

    Finalement j'ai choisi le DTPicker. Le dénommé Zeb m'a ré-aiguillé sur ce contrôle. Ouf !!!
    Au passage, je le trouve mieux que le Calendar, et ça prend moins de place.

    Merci.
    Expert Programmation

    Ah oui, ça y est, je me rappelle... En fait, et rien que pour .... les beaux yeux de ta fiancée :D  je me suis réinstallé un VB6 afin de t'aider plus efficacement (authentique). Ça me permet de me souvenir avec plus d'assurance le nom des contrôles. Pour info, je n'avais pas encore refait cette install et je t'en parlais de mémoire.

    ;) 
    Lassé par la pub ? Créez un compte