vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Farbwert aus .ini für neue Form 
Autor: Erwin1
Datum: 16.11.17 22:29

Hallo,
ich habe eine Form erstellt, in der Farbeinstellungen getätigt werden können und diese in einer .ini gespeichert werden. Nun möchte ich in einer neuen Form diese Farbeinstellung benutzen. Aber irgendwie gelingt mir das nicht.
' Speichern der Farbe
 
Dim Hintergrundfarbe As Integer = Bdbackground.BackColor.ToArgb
 
        Dim SavedHintergrundfarbe As Integer = CInt(Hintergrundfarbe)
        ColorDialog1.Color = Color.FromArgb(SavedHintergrundfarbe)
        WritePrivateProfileString("Einsellung", "Hintergrundfarbe", _
          Hintergrundfarbe, ".\Einstellung.ini")
und so wollte ich laden
Dim Hintergrundfarbe As Integer = PnAnzeige.BackColor.ToArgb
                Dim LoadedHintergrundfarbe As Integer = CInt(Hintergrundfarbe)
        PnAnzeige.BackColor = Color.FromArgb(LoadedHintergrundfarbe)
        GetPrivateProfileString("Einstellung", "Hintergrundfarbe", _
          Hintergrundfarbe, ".\Einstellung.ini")
Könnte mir da bitte jemand helfen?

Beitrag wurde zuletzt am 16.11.17 um 22:34:41 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Franki
Datum: 17.11.17 00:33

Hallo,

auf den ersten Blick: Einsellung <> Einstellung
Ist ds fehlende t per Copy Paste verloren gegangen oder hast du den Code abgetippt? Schau mal nach vielleicht ist das schon der Fehler.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Manfred X
Datum: 17.11.17 06:04

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Erwin1
Datum: 17.11.17 19:03

Hallo und Danke schon mal.
@ Frank, das ist leider nur beim abtippen passiert, aber gut beobachtet.

@ Manfred, sorry das ich Dich schon wieder belästigen muss, aber vielleicht bin ich auch zu blind oder dumm.
Die API Einbindung hatte ich so, wie Du Sie geschrieben hast. In meiner .ini steht als Beispiel
[Einstellung]
 
Hintergrundfarbe=-128
für die zufällig gewählte Farbe aus dem ColorDialog ( ein helles Gelb). Diese kann sich auch ändern mit der Einstellung und wird dann auch in der .ini verändert.

Jetzt soll in einer neuen Form, in der ein Panel ist, diese Hintergrundfarbe als BackColor genommen werden.

Danke

Beitrag wurde zuletzt am 17.11.17 um 19:12:29 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Manfred X
Datum: 17.11.17 22:45

Hallo!

Am einfachsten wäre es, Du öffnest in VB-IDE die Form
Projekt -> Einstellungen -> Anwendung und sorgst dafür,
daß Haken gesetzt sind bei
- Anwendungsframework aktivieren
- My.Settings beim Herunterfahren speichern

Dann öffnest Du die Form
Projekt -> Einstellungen -> Einstellungen
Dort gibst Du in der Liste in der Spalte "Name" Panel_BackColor ein,
in der Spalte "Typ" wählst Du Color und in der Spalte "Wert"
legst Du einen Startwert fest. Als "Bereich" Nutzer.
Diese Eigenschaft kann überall in Deinem Projekt-Code durch
My.Settings.Panel_BackColor gelesen oder gesetzt werden.
Beim Beenden des Programms wird der aktuelle Wert automatisch
gespeichert.

Die Farbgebung in Formularen muß einen hinreichenden Kontrast
zwischen Vorder- und Hintergrund aufweisen. Beliebig auswählbare
Farben sollte man deshalb nicht benutzen.
Gewöhnlich werden Systemfarben verwendet z.B. "SystemColors.Window".
Der ColorDialog bietet dafür keine direkte Auswahl - eventuell
dort Systemfarben als "CustomColors" vorgeben (vgl mein Beispiel).

Ich würde ein eigenes Formular erstellen, wo der Nutzer aus
vorgegebenen Paaren von geeigneten Vorder- und Hintergrundfarben
ein Paar auswählen kann.

Für den Zugriff auf die Ini-Datei kannst Du dem Projekt eine Klasse
namens "IniAccess" hinzufügen.
Dort trägst Du die oben von mir angegebenen Api-DLLImporte und die
Hilfsfunktionen ein - mit den Schlüsselworten "Public Shared",
also z.B.
 Public Shared 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
Du kannst danach überall im Projekt durch
IniAccess.SetColorToIni(...) bzw. IniAccess.GetColorFromIni(...)
auf die Ini-Datei Farbschlüssel zugreifen.

Ergänze in dieser Klasse noch entsprechende Hilfs-Routinen
für andere Schlüssel-Typen:
SetStringToIni, GetStringFromIni
oder
SetNumberToIni, GetNumberFromIni (mit CDEC-Konvertierung).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Erwin1
Datum: 18.11.17 16:30

Hallo Manfred,
mit einem Farbpaar komme ich nicht hin, da der Benutzer in den Einstellungen fünf verschiedene Farben für verschieden Panele wählen können soll.
Ich bin jetzt zu mindestens schon mal so weit, das er im Hintergrund etwas machen möchte, aber wahrscheinlich noch nicht ganz mit der Farbe hinkommt. Es wird mir nur ein weißer Hintergrund mit zwei roten diagonalen Strichen angezeigt. Deshalb denke ich, das ich dem Ziel schon sehr nahe bin. Der Code sieht jetzt so aus, natürlich sind die API-Einbindungen vorangestellt.
Dim keyvalue As New System.Text.StringBuilder(10000)
        Dim defaultcolor, inicolor As Color
        Dim IniFilename As String = _
        IO.Path.Combine( _
        My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, _
        ".\Einstellung.ini")
        'Schlüssel für Ini
        Dim section As String = "Farbeinstellung"
        Dim keyname As String = "Hintergrundfarbe"
        defaultcolor = Color.FromArgb(CStr(keyvalue.ToString))
 
        If GetColorFromIni(IniFilename, section, keyname, defaultcolor) Then
 
        End If
 
        PnAnzeige.BackColor = inicolor
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Manfred X
Datum: 19.11.17 06:48

Erstelle eine neue Klasse namens "IniAccess".
Public Class IniAccess
  <System.Runtime.InteropServices.DllImport("kernel32.dll", _
  SetLastError:=True)> _
  Private Shared Function GetPrivateProfileString _
              '...... ergänzen
  End Function
 
   <System.Runtime.InteropServices.DllImport("kernel32.dll", _
    SetLastError:=True)> _
   Private Shared Function WritePrivateProfileString _
             '.......
   End Function
 
 
   Private Shared _IniFilename As String
 
   Public Shared Property IniFileName() As String
        Set(value As String)
            If Not IO.File.Exists(value) Then
                Throw New ArgumentException("Datei nicht vorhanden")
            End If
            _IniFilename = value
        End Set
        Get
            Return _Inifilename
        End Get
   End Property
 
 
   Private Shared Function CheckIniParams(section As String, _
        Keyname As String) As Boolean
 
        If Not IO.File.Exists(_IniFilename) Then Return False
        If Not (IO.Path.GetExtension(_IniFilename).ToLower) = ".ini" Then _
          Return False
        If String.IsNullOrWhiteSpace(section) Then Return False
        If String.IsNullOrWhiteSpace(Keyname) Then Return False
        Return True
   End Function
 
 
    Public Shared Function SetStringToIni(Section As String, Keyname As String,
                                          StringToIni As String) As Boolean
 
        If Not CheckIniParams(Section, Keyname) Then Return False
 
        Dim result As Integer = WritePrivateProfileString _
                (Section, Keyname, StringToIni, _IniFilename)
 
        Return result > 0
 
    End Function
 
 
    Public Shared Function GetStringFromIni _
                            (ByVal Section As String, keyname As String,
                             ByRef StringFromIni As String, _
                Optional ByVal DefaultString As String = "leer") As Boolean
 
        Dim defstring As String
        If String.IsNullOrWhiteSpace(DefaultString) Then
            defstring = "leer"
        Else
            defstring = DefaultString
        End If
        StringFromIni = defstring
 
        If Not CheckIniParams(Section, keyname) Then Return False
 
        Dim keyvalue As New System.Text.StringBuilder(1024)
 
        Dim result As Integer = GetPrivateProfileString _
            (Section, keyname, defstring, keyvalue, _
             keyvalue.Capacity, _IniFilename)
        If result = 0 Then
            Return False
        Else
            StringFromIni = keyvalue.ToString
            Return True
        End If
    End Function
 
 
    Public Shared Function SetColorToIni _
                     (Section As String, Keyname As String, _
                      ColorToSet As System.Drawing.Color) As Boolean
 
        If Not CheckIniParams(Section, Keyname) Then Return False
 
        Dim keyvalue As String = ColorToSet.ToArgb.ToString()
 
        Return SetStringToIni(Section, Keyname, keyvalue)
    End Function
 
 
    Public Shared Function GetColorFromIni _
                   (Section As String, Keyname As String,
                    ByRef ColorFromIni As System.Drawing.Color, _
           Optional ByVal Defaultcolor As Color = Nothing) As Boolean
 
        ColorFromIni = Defaultcolor
        If Not CheckIniParams(Section, Keyname) Then Return False
 
        Dim defcolor As String
        If Defaultcolor = Nothing Then
            defcolor = Color.White.ToArgb.ToString
        Else
            defcolor = Defaultcolor.ToArgb.ToString
        End If
 
        Dim keyvalue As String = ""
        If GetStringFromIni(Section, Keyname, keyvalue, defcolor) Then
            Try
                ColorFromIni = Color.FromArgb(CInt(keyvalue.ToString))
            Catch
                Return False
            End Try
            Return True
        Else
            Return False
        End If
    End Function
End Class
Im Load-Eventhandler des Starformulars weist Du den Pfad der Ini-Datei
auf diese Klasse zu:
Dim IniFilename As String = _ IO.Path.Combine _
(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, _
"Einstellungen.ini")
 
IniAccess.IniFileName = IniFilename
Überall in Deinem Projekt ist es möglich zuzuweisen und abzufragen:
'Zuweisung:
 
Dim section As String = "Farbeinstellungen"
Dim keyname As String = "Hintergrundfarbe"
 
Dim Usercolor as Color
'ggf. zunächst Dialogabfrage der Farbe (UserColor)
'dann:
IniAccess.SetColorToIni(section, keyname, usercolor)
 
'Abfrage:
'optional kann eine DefaultColor vorgegeben werden
Dim IniColor as Color
IniAccess.GetColorFromIni(section, keyname, inicolor)
PbAnzeige.BackColor = inicolor
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Farbwert aus .ini für neue Form 
Autor: Erwin1
Datum: 20.11.17 10:26

Hallo Manfred,
Danke für Deine aufgewendete Zeit und das ausführliche Skript. Aber leider bekomme ich es so nicht am laufen. Nach weiterer intensiver Suche habe ich im Netz die Lösung meines Problem's gefunden. Wen es interessiert, kann hier nachschauen : https://www.vb-paradise.de/index.php/Thread/51730-Farben-laden-aus-Ini/

Noch mal vielen Dank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel