[TUT] VB08 ini-Datei

06/04/2010 19:30 P-a-i-n#1
da viele hier mit systemsettings arbeiten zeig ich euch mal wie er ganz fix eine
ini macht
ich erkläre nur die funktionen hänge aber ein fertiges projekt mit dran zum runterladen
wo farben oder auch die formgröße geändert werden kann u.s.w sollte sich mal ein anfänger wenn anschauen das ist ohne hartgecodeten pfad also nicht C:\bla\bla\bla

es würde nicht die xml gehen sieht besser aus aber bei so was steckt weit mehr arbeit drin

also die api auf rufe sind einfach

Code:
   
    Private Declare Function SchreibeIni Lib "kernel32" _
      Alias "WritePrivateProfileStringA" ( _
      ByVal lpApplicationName As String, _
      ByVal lpKeyName As String, _
      ByVal lpString As String, _
      ByVal lpFileName As String) As Long
lpApplicationName = das ist der name des abschnittes in der ini
lpKeyName = der schlüsselname der den gespeicherten wert tragen soll
lpString = von hier kommen der wert für die ini dies kann eine textbox oder sonstiges sein
lpFileName = hier das ist der pfad zur ini

würde im programm so aussehen
Code:
SchreibeIni("Textbox1", "Text", TextBox1.Text, "C:\Test.ini")
dise würde sich in der ini so wieder finden

[Textbox1]
Text=

dahinter hätte der textgestanden der sich in der textbox befindet
das ganze geht mit bilder aus der picturebox,checkboxen,comboboxen

zu der listbox will ich noch was sagen da ist das schreiben der werte und das lesen der ini nicht so leicht da musse man noch einiges dazuschreiben

beim laden brauch man etwas mehr und eine extra funktion die danach kommt
Code:
  Private Declare Function leseIni Lib "kernel32" _
      Alias "GetPrivateProfileStringA" ( _
      ByVal lpApplicationName As String, _
      ByVal lpKeyName As String, _
      ByVal lpDefault As String, _
      ByVal lpReturnedString As String, _
      ByVal nSize As Long, _
      ByVal lpFileName As String) As Long ' lesen der ini


lpApplicationName = oben erklärt
lpKeyName = oben erklärt
lpDefault = hier kann ein wert zurückgegeben werden wenn nichts in der ini steht also sowas wie man im formload auch bestimmen kann
lpReturnedString = das ist der Buffer für die rückgabe werte bei lagen zeilen sollte der ausreichend gefüllt werden
nSize = hier erstellt man die puttergröße in bytes
lpFileName = oben erklärt

vllt denken manche jetzt ohgott wenn ihr mal gegoogelt habt nach ini tut die sind meist extrem riesig und sehr kompliziert aber hier kürzen wir das ganze jetzt extrem ab

Code:
Public Function LeseUndSchreibeIni(ByVal Gruppe As String, ByVal Schlüssel As String, ByVal Voreinstellung As String, ByVal Pfad As String) As String

        Dim strTemp As String = Space(1024), lLength As Integer '
        lLength = leseIni(Gruppe, Schlüssel, Voreinstellung, strTemp, strTemp.Length, Pfad)

        Return (strTemp.Substring(0, lLength))
    End Function

hier lesen wir erstmal die ini datein ein füllen den Buffer mit dieser Methode
machen wir eigentlich nur folgendes man extrahiert eine teilzeichenkette deren position und länge übergeben wird aus einer zeichenkette

wieso macht man das weil man ja strings,boolsche werte übergeben will und integer

eingelesen wird dann alles so

Code:
 TextBox1.Text = LeseUndSchreibeIni("Textbox1", "Text", "", "C:\Test.ini")
die 2 gänsefüsschen ohne inhalten wär der rückgabe wert wenn nichts in der ini steht brauch man aber in der regel selten das ist mehr was für anwedungen wie in w32 wo man keine formanwedung hat :)

so damit ist das tut fertig ich hab mal zum spass gesucht wie sowas in vb6 mal ausgesehen hat

[Only registered and activated users can see links. Click Here To Register...]

ich denke es ist sehr kurz und verständlich es macht seine arbeit und ist nur für kleine wörter da in die ini sollt ihr keine romane schreiben das ist dann schon mehr was für textdatein
so ich hefte mal noch ein projekt von mir ran
was dadrin ist auch eine ini und paar andere dinge
- abfragen ob die ini schon erstellt ist weil sonst gibt es anwedungscrash ;)
- selected case in comboboxen für hintergrundfarben und größen
- oder wer nicht klarkommt kann auch reinschauen

ist ein vollständiges projekt für VB08/10

das ist emhr was für anfänger selected case ist eine bessere form des if else ;) bei sowas
06/04/2010 19:40 Cholik#2
Nettes Tutorial, meine Anmerkung wäre nur :

Wenn man .NET wählt, wieso nimmt man dann nicht gleich XML statt INI ?
Zumal .NET da direkt bequeme, einfache Klassen zur Verfügung stellt die einem das Lesen, Schreiben usw einer XML erleichtern.
06/04/2010 19:49 P-a-i-n#3
Np soll ich ein xml tut machen das ist aber um einiges umfang reicher da die knotenpunkte viel schwerer sind aber ich wollte erst ein tut ini vs xml machen das wär überladen gewesen aber ich für XML auch eins machen ini geht schneller aber xml ist eleganter und hat den vorteil das man eine XML auch z.B base64 verschlüsseln kann :)
06/04/2010 19:57 Jay Niize#4
sehr nett gemacht ;)

#Added to List

wenn du es dort nicht haben willst -> PN
06/05/2010 02:00 Demon-777#5
Also ich benutze immer XML da es viel einfacher für mich ist.
Ein Beispiel:

Code:
Module Module1

    Sub Main()

        ' XML file example.

        Dim xml As XDocument = <?xml version="1.0" encoding="utf-8"?>
                               <example>
                                   <simpleString>Hello World!</simpleString>
                                   <simpleInteger>1</simpleInteger>
                                   <simpleDouble>1.545</simpleDouble>
                                   <simpleBool>True</simpleBool>
                               </example>

        ' Read out our xml data.

        Dim myString =
            xml.<example>.<simpleString>.Value

        Dim myInteger =
            CInt(xml.<example>.<simpleInteger>.Value)

        Dim myDouble =
            CDbl(xml.<example>.<simpleDouble>.Value)

        Dim myBoolean =
            CBool(xml.<example>.<simpleBool>.Value)

        ' Show data to user.

        Console.WriteLine("Simple string = " + myString)
        Console.WriteLine("Simple integer = " + myInteger.ToString)
        Console.WriteLine("Simple double = " + myDouble.ToString)
        Console.WriteLine("Simple boolean = " + myBoolean.ToString)

        Console.ReadKey()

    End Sub

End Module