Hallo!
Settings programmiert man nicht selbst (Anwendungs-Framework):
IDE: Eigenschaftenfenster -> Applicationsettings -> PropertyBinding ->
BackColor -> New
Ini-Variante:
Die API-Einbindung in VB:
<System.Runtime.InteropServices.DllImport("kernel32.dll", _
SetLastError:=True)> _
Private Shared Function GetPrivateProfileString(ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As _
System.Text.StringBuilder, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
End Function
<System.Runtime.InteropServices.DllImport("kernel32.dll", _
SetLastError:=True)> _
Private Shared Function WritePrivateProfileString(ByVal lpAppName As _
String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Integer
End Function Einige Hilfsfunktionen für Farb-Schlüssel:
Public Function IniColorDialog(ByVal DefaultColor As Color, _
ByRef UserColor As Color) As Boolean
'Weitere Details: http://www.vbarchiv.net/tipps/details.php?id=2241
Using colordia As New System.Windows.Forms.ColorDialog
Dim dc As Integer
With DefaultColor
dc = Microsoft.VisualBasic.Information.RGB(.R, .G, .B)
End With
With colordia
.CustomColors() = {dc}
.Color = DefaultColor
.SolidColorOnly = True
If .ShowDialog = Windows.Forms.DialogResult.Cancel Then
UserColor = Nothing
Return False
Else
UserColor = .Color
Return True
End If
End With
End Using
End Function
Private Function CheckIniParams(ByVal IniFile As String, _
section As String, Keyname As String) As Boolean
If Not IO.File.Exists(IniFile) Then Return False
If Not (IO.Path.GetExtension(IniFile).ToLower) = ".ini" Then Return _
False
If String.IsNullOrWhiteSpace(section) Then Return False
If String.IsNullOrWhiteSpace(Keyname) Then Return False
Return True
End Function
Private Function SetColorToIni(IniFile As String, _
Section As String, Keyname As String, _
ColorToSet As System.Drawing.Color) As Boolean
If Not CheckIniParams(IniFile, Section, Keyname) Then Return False
Dim keyvalue As String = ColorToSet.ToArgb.ToString()
Dim result As Integer = WritePrivateProfileString _
(Section, Keyname, keyvalue, IniFile)
Return result > 0
End Function
Private Function GetColorFromIni(ByVal IniFile As String,
Section As String, Keyname As String,
ByRef ColorFromIni As System.Drawing.Color) As Boolean
If Not CheckIniParams(IniFile, Section, Keyname) Then Return False
Dim keyvalue As New System.Text.StringBuilder(100)
Dim defaultcolor As String = Color.White.ToArgb.ToString
Dim result As Integer = GetPrivateProfileString _
(Section, Keyname, defaultcolor, keyvalue, keyvalue.Capacity, _
IniFile)
ColorFromIni = Color.FromArgb(CInt(keyvalue.ToString))
Return True
End Function Anwendungsbeispiel:
'Angemessener Pfad der Ini-Datei
Dim IniFilename As String = _
IO.Path.Combine( _
My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, _
"Einstellungen.ini")
'Schlüssel für Ini
Dim section As String = "Farbeinstellungen"
Dim keyname As String = "Hintergrundfarbe"
'Ini-Datei ggf. erstellen und einrichten
If Not IO.File.Exists(IniFilename) Then
Using sw As IO.StreamWriter = IO.File.CreateText(IniFilename)
sw.WriteLine("[" & section & "]")
sw.WriteLine(keyname & "=" & Me.BackColor.ToArgb.ToString)
End Using
End If
Dim defaultcolor, usercolor, inicolor As Color
GetColorFromIni(IniFilename, section, keyname, defaultcolor)
If IniColorDialog(defaultcolor, usercolor) Then
'Schlüsselwert (Farbe) eintragen
If Not SetColorToIni(IniFilename, section, keyname, usercolor) Then
MsgBox("Farbe kann nicht eingetragen werden")
Else
'Schlüsselwert (Farbe) lesen
If Not GetColorFromIni(IniFilename, section, keyname, inicolor) Then
MsgBox("Farbe kann nicht gelesen werden")
Else
Me.BackColor = inicolor
End If
End If
End If
Beitrag wurde zuletzt am 17.11.17 um 06:11:08 editiert. |