Bij een stukje VB-code voor de zgn. Kleurenmixer (bekend uit diverse lesboeken) loop ik tegen het volgende probleem aan.
Als ik het programma voor het eerst run, dan werkt het goed. Aan de hand van de gemaakte "kleurenmix" worden de RGB waardes gekopieerd als tekst naar het clipoard.
Als ik dezelfde handeling nog een keer doe, blijven de oude waarden op het clipboard staan. M.a.w: de nieuwe waarden worden blijkbaar niet meer gekopieerd.
Als workaround heb ik een command toegevoegd die eerst het clipboard leeg maakt. Als je deze gebruikt en daarna dan kleurenwaardes kopieert, komen ze weer wel op het clipboard. Waarom werkt het programma alleen als het clipbord leeg is? De bedoeling van deze les was juist om de melding te krijgen dat er al iets stond op het clipboard.
Zie de code (ook als bijlage):
Private Sub Form_Load()
Dim intT As Integer
'initialisaties
lblRood.BackColor = RGB(255, 0, 0)
lblGroen.BackColor = RGB(0, 255, 0)
lblBlauw.BackColor = RGB(0, 0, 255)
For intT = 0 To 2
vslKleur(intT).Value = 125
Next intT
End Sub
Private Sub mnuExit_Click()
Unload Me
End Sub
Private Sub mnuKopieer_Click()
'Aanvulling programma om te controleren
'of klembord leeg is voordat er iets naar
'toe wordt gekopieerd
'Declaratie lokale variabelen
Dim strInfo As String
Dim strTitel As String
Dim intIconEnKnop As Integer
'Staat er iets op het klembord ?
intIconEnKnop = vbCritical Or vbOKCancel
strTitel = "Pas Op !"
With Clipboard
If .GetFormat(vbCFText) Then
strInfo = " tekst "
ElseIf .GetFormat(vbCFBitmap) Then
strInfo = " een Bitmap "
ElseIf .GetFormat(vbCFMetafile) Then
strInfo = " een Metafile "
ElseIf .GetFormat(vbCFDIB) Then
strInfo = " een device independent Bitmap "
ElseIf .GetFormat(vbCFPalette) Then
strInfo = " een kleurenpalet "
ElseIf .GetFormat(vbCFLink) Then
strInfo = " een DDE informatie "
Else
strInfo = ""
End If
End With
'Staat er iets op het klembord dan boodschap geven
If strInfo <> "" Then
If MsgBox("Er staat" & strInfo & "op het klembord," & _
"vervangen?", intIconEnKnop, Titel) <> vbOK Then
Exit Sub
End If
End If
'RGB functie naar klembord
Clipboard.SetText "RGB(" & CStr(vslKleur(0).Value) & "," & _
CStr(vslKleur(1).Value) & "," & CStr(vslKleur(2).Value) & ")"
End Sub
Private Sub mnuOver_Click()
'Declaratie lokale variabelen
Dim strInfo As String
strInfo = "Dit programma maakt onderdeel uit van" & vbCrLf & vbCrLf
strInfo = strInfo & "Progammer's Delight versie 6" & vbCrLf & vbCrLf
strInfo = strInfo & "Copyright 2002, IPAA Service" & vbCrLf
MsgBox strInfo, vbInformation, "PD! Kleurenmixer"
End Sub
Private Sub mnuWerking_Click()
'Declaratie lokale variabelen
Dim Info As String, Titel As String
Info = "Meng de gewenste kleur" & vbCrLf
Info = Info & "en klik op Kopieer." & vbCrLf
Info = Info & "Ga naar uw Visual Basic-programma" & vbCrLf
Info = Info & "en plak de RGB-functie in uw code" & vbCrLf
MsgBox Info, vbInformation, "PD! Kleurenmixer"
End Sub
Private Sub vslKleur_Change(Index As Integer)
'handel aanpassingen in één van de schuiven af
lblMixer.BackColor = RGB(vslKleur(0).Value, vslKleur(1).Value, vslKleur(2).Value)
lblRood = Format((vslKleur(0).Value / 2.55), "0.0") & "%"
lblGroen = Format((vslKleur(1).Value / 2.55), "0.0") & "%"
lblBlauw = Format((vslKleur(2).Value / 2.55), "0.0") & "%"
End Sub
Groet,
JHBekijk bijlage KleurenMixer.rar
Als ik het programma voor het eerst run, dan werkt het goed. Aan de hand van de gemaakte "kleurenmix" worden de RGB waardes gekopieerd als tekst naar het clipoard.
Als ik dezelfde handeling nog een keer doe, blijven de oude waarden op het clipboard staan. M.a.w: de nieuwe waarden worden blijkbaar niet meer gekopieerd.
Als workaround heb ik een command toegevoegd die eerst het clipboard leeg maakt. Als je deze gebruikt en daarna dan kleurenwaardes kopieert, komen ze weer wel op het clipboard. Waarom werkt het programma alleen als het clipbord leeg is? De bedoeling van deze les was juist om de melding te krijgen dat er al iets stond op het clipboard.
Zie de code (ook als bijlage):
Private Sub Form_Load()
Dim intT As Integer
'initialisaties
lblRood.BackColor = RGB(255, 0, 0)
lblGroen.BackColor = RGB(0, 255, 0)
lblBlauw.BackColor = RGB(0, 0, 255)
For intT = 0 To 2
vslKleur(intT).Value = 125
Next intT
End Sub
Private Sub mnuExit_Click()
Unload Me
End Sub
Private Sub mnuKopieer_Click()
'Aanvulling programma om te controleren
'of klembord leeg is voordat er iets naar
'toe wordt gekopieerd
'Declaratie lokale variabelen
Dim strInfo As String
Dim strTitel As String
Dim intIconEnKnop As Integer
'Staat er iets op het klembord ?
intIconEnKnop = vbCritical Or vbOKCancel
strTitel = "Pas Op !"
With Clipboard
If .GetFormat(vbCFText) Then
strInfo = " tekst "
ElseIf .GetFormat(vbCFBitmap) Then
strInfo = " een Bitmap "
ElseIf .GetFormat(vbCFMetafile) Then
strInfo = " een Metafile "
ElseIf .GetFormat(vbCFDIB) Then
strInfo = " een device independent Bitmap "
ElseIf .GetFormat(vbCFPalette) Then
strInfo = " een kleurenpalet "
ElseIf .GetFormat(vbCFLink) Then
strInfo = " een DDE informatie "
Else
strInfo = ""
End If
End With
'Staat er iets op het klembord dan boodschap geven
If strInfo <> "" Then
If MsgBox("Er staat" & strInfo & "op het klembord," & _
"vervangen?", intIconEnKnop, Titel) <> vbOK Then
Exit Sub
End If
End If
'RGB functie naar klembord
Clipboard.SetText "RGB(" & CStr(vslKleur(0).Value) & "," & _
CStr(vslKleur(1).Value) & "," & CStr(vslKleur(2).Value) & ")"
End Sub
Private Sub mnuOver_Click()
'Declaratie lokale variabelen
Dim strInfo As String
strInfo = "Dit programma maakt onderdeel uit van" & vbCrLf & vbCrLf
strInfo = strInfo & "Progammer's Delight versie 6" & vbCrLf & vbCrLf
strInfo = strInfo & "Copyright 2002, IPAA Service" & vbCrLf
MsgBox strInfo, vbInformation, "PD! Kleurenmixer"
End Sub
Private Sub mnuWerking_Click()
'Declaratie lokale variabelen
Dim Info As String, Titel As String
Info = "Meng de gewenste kleur" & vbCrLf
Info = Info & "en klik op Kopieer." & vbCrLf
Info = Info & "Ga naar uw Visual Basic-programma" & vbCrLf
Info = Info & "en plak de RGB-functie in uw code" & vbCrLf
MsgBox Info, vbInformation, "PD! Kleurenmixer"
End Sub
Private Sub vslKleur_Change(Index As Integer)
'handel aanpassingen in één van de schuiven af
lblMixer.BackColor = RGB(vslKleur(0).Value, vslKleur(1).Value, vslKleur(2).Value)
lblRood = Format((vslKleur(0).Value / 2.55), "0.0") & "%"
lblGroen = Format((vslKleur(1).Value / 2.55), "0.0") & "%"
lblBlauw = Format((vslKleur(2).Value / 2.55), "0.0") & "%"
End Sub
Groet,
JHBekijk bijlage KleurenMixer.rar