PDA

Vollständige Version anzeigen : Ini-Datei anlegen


Benedict
22.04.2001, 20:47
Hallo!
Ich hab ein Programm geschrieben in dem man verschiedene Einstellungen vornehmen kann. (Benutzername, Highscore, Hintergrundfarbe, etc.) Ich möchte diese Einstellungen in einer ini-Datei speichern um sie beim nächsten mal wieder abrufen und anzeigen zu lassen. Wie kann ich das berwerkstelligen?

Danke im Vorraus!
Benedict

Stefan Kulpa
23.04.2001, 07:03
Hallo Benedict,

probier's mal so:

<FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Option</FONT> <FONT COLOR=#000080>Explicit</FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> GetPrivateProfileString <FONT COLOR=#000080>Lib</FONT> "kernel32" <FONT COLOR=#000080>Alias</FONT> _
"GetPrivateProfileStringA" _
(<FONT COLOR=#000080>ByVal</FONT> lpApplicationName <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpKeyName <FONT COLOR=#000080>As</FONT> Any, _
<FONT COLOR=#000080>ByVal</FONT> lpDefault <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpReturnedString <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> nSize <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpFileName <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> WritePrivateProfileString <FONT COLOR=#000080>Lib</FONT> "kernel32" <FONT COLOR=#000080>Alias</FONT> _
"WritePrivateProfileStringA" _
(<FONT COLOR=#000080>ByVal</FONT> lpApplicationName <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpKeyName <FONT COLOR=#000080>As</FONT> Any, _
<FONT COLOR=#000080>ByVal</FONT> lpString <FONT COLOR=#000080>As</FONT> Any, _
<FONT COLOR=#000080>ByVal</FONT> lpFileName <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Sub</FONT> INITest()

<FONT COLOR=#000080>Dim</FONT> sMyINIFile <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT> <FONT COLOR=#008000>'// Kompletter Pfad zur INI-Datei</FONT>

<FONT COLOR=#008000>'// Programmpfad benutzen</FONT>
sMyINIFile = App.Path
<FONT COLOR=#008000>'// Der Pfad muss mit einem Backslash enden!</FONT>
<FONT COLOR=#000080>If</FONT> Right(sMyINIFile, 1) <> "\" <FONT COLOR=#000080>Then</FONT> sMyINIFile = sMyINIFile & "\"
<FONT COLOR=#008000>'// Als Beispiel wird der Projektname als Dateiname benutzt:</FONT>
sMyINIFile = sMyINIFile & App.EXEName & ".ini"

<FONT COLOR=#008000>'// Beispielwerte schreiben ...</FONT>
WriteMyIniSetting sMyINIFile, "Settings", "Benutzername", "Fritz Müller"
WriteMyIniSetting sMyINIFile, "Settings", "Highscore", "123456"
WriteMyIniSetting sMyINIFile, "Settings", "Hintergrundfarbe", "&H8000000F&"

<FONT COLOR=#008000>'// ... und wieder lesen:</FONT>
Debug.<FONT COLOR=#000080>Print</FONT> ReadMyIniSetting(sMyINIFile, "Settings", "Benutzername")
Debug.<FONT COLOR=#000080>Print</FONT> ReadMyIniSetting(sMyINIFile, "Settings", "Highscore")
Debug.<FONT COLOR=#000080>Print</FONT> ReadMyIniSetting(sMyINIFile, "Settings", "Hintergrundfarbe")

<FONT COLOR=#808080><HR></FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Function</FONT> WriteMyIniSetting(sIniFilePath <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, sSection <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
sKey <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, sValue <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Boolean</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Methode: | Schreibt einen Wert in eine INI-Datei;</FONT>
<FONT COLOR=#008000>'// | gibt es die Datei nicht, wird sie angelegt</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Parameter: | sIniFilePath = gültiger Pfad zu einer INI-Datei</FONT>
<FONT COLOR=#008000>'// | sSection = Sektionsname [...]</FONT>
<FONT COLOR=#008000>'// | sKey = Schlüsselname</FONT>
<FONT COLOR=#008000>'// | sValue = zu schreibender Wert</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Rückgabe: | True = Schreiben war erfolgreich</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#000080>On</FONT> <FONT COLOR=#000080>Error</FONT> Resume <FONT COLOR=#000080>Next</FONT>
WriteMyIniSetting = _
WritePrivateProfileString(sSection, sKey, sValue, sIniFilePath)

<FONT COLOR=#808080><HR></FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Function</FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Function</FONT> ReadMyIniSetting(sIniFilePath <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
sSection <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, sKey <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Methode: | Gibt einen Wert aus einer INI-Datei zurück</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Parameter: | sIniFilePath = gültiger Pfad zu einer INI-Datei</FONT>
<FONT COLOR=#008000>'// | sSection = Sektionsname [...]</FONT>
<FONT COLOR=#008000>'// | sKey = Schlüsselname</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Rückgabe: | Wert, sofern vorhanden</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#000080>Const</FONT> MAX_LEN <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT> = 1024
<FONT COLOR=#000080>Dim</FONT> sBuffer <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>

sBuffer = VBA.<FONT COLOR=#000080>String</FONT>(MAX_LEN, 0)
<FONT COLOR=#000080>If</FONT> GetPrivateProfileString(sSection, sKey, vbNullString, _
sBuffer, Len(sBuffer), sIniFilePath) <FONT COLOR=#000080>Then</FONT>
ReadMyIniSetting = VBA.Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Function</FONT>
<FONT COLOR=#808080></FONT>

</FONT>

HTH

Benedict
23.04.2001, 15:21
Vielen, vielen Dank Stefan ich werd's versuchen. MFG Benedict

chrissy
16.04.2002, 12:49
Hi ho,

hab geradem beim suchen diesen eintrag gefunden und er passt perfekt auf mein problem.

allerdings hab ich noch nicht genug plan von vb um zu checken wie ich der function WriteMyIniSetting werte vom typ long übergeben kann :-(

ich müsste nämlich zahlen in der .ini speichern die ich später in meinem programm wieder verwende...

kann mir jemand damit helfen?

Stefan Kulpa
16.04.2002, 13:10
<font face="Verdana" size="2">Hallo,

benutzte einfach die Methode WriteMyIniSetting und übergib einen String, wie's im Beispiel ja auch gezeigt wird:

WriteMyIniSetting sMyINIFile, "Settings", "Highscore", CStr("123456")

INI-Datei kennen eigentlich keine strenge Typentrennung, wie beispielsweise die Registry.

HTH</font>

chrissy
16.04.2002, 13:28
stimmt das funzt ja :)

hatte mal wieder zuviel vorsicht walten lassen... ;-)

eddingTheStift
09.07.2002, 08:46
Bei mir funktioniert der Code nicht. Ich weiß nicht mehr was ich machen soll.

Es kommt immer die Fehlermeldung: Fehler beim Kombilieren! Argumenttyp ByRef unverträglich.

Und zwar dann wenn das Programm starte.

Stefan Kulpa
10.07.2002, 06:05
<font face="Verdana" size="2">Hallo!

Ohne genaue Beschreibung der Fehlerstelle ist das schwer zu beantworten.
Starte das Programm in der IDE mit F8 und debugge das Ganze schrittweise bis der Fehler auftaucht. Diesen Codeabschnitt kannst du dann hier reinsetzen, so dass man nachvollziehen kann, was dort passiert/passieren soll.

Gruß</font>

eddingTheStift
10.07.2002, 07:44
ich habe die Prozedur ini_Schreiben geschrieben. Wenn ich nun aus dem Form_Load diese Prozedur aufrufe er scheint die Fehlermeldung.

Dim sMyINIFile As String

sMyINIFile = App.Path

If Right(sMyINIFile, 1) <> "\" Then sMyINIFile = sMyINIFile & "\"

sMyINIFile = "Highscore.ini"

WriteMyIniSetting sMyINIFile, "0", "Name", strName0

WriteMyIniSetting sMyINIFile, "0", "Punkte", intPunkte0

Es ist dann die Varable "strName0" markiert.

Danke
Markus

Stefan Kulpa
10.07.2002, 16:03
<font face="Verdana" size="2">Bist du sicher, dass strName0 eine regulär deklarierte und gültige String-Variable ist? Die Funktion erwartet hier einen String-Wert, so dass die zweite Zeile mit der Variablen intPunkte0 wahrscheinlich auch auf die Nase fällt, sofern es sich um einen numerischen Wert handelt. Wird der Funktion ein gültiger String-Wert übergeben, kommt es zu keinem Fehler.

HTH</font>

<Tom>
20.11.2002, 09:49
Hallo, ich erstelle zur Zeit einen GIFMaker um .gif erstellen zu können! Nun will ich aber dem Benutzer die Möglichkeit geben, einen angefangenes, nicht fertiggestelltes .gif als angefangenes Projekt in meinem Programm abzuspeichern. Verschiedene Daten der einzelnen Projekte (Bilderanzahl, Bilderhöhe, Bildbreite, Projektname) speicher ich bereits in Textdateien. Zusätzlich erstellt das Programm eine INI-Datei welches die Pfade der einzelnen Textdateien enthält! Ist dies umständlich, gibt es was besseres?

Ich hoffe ich konnte mein Problem verständlich schildern!
Ich hoffe auch das jemand ein Rat weiß!

Danke
Tom

Stefan Kulpa
20.11.2002, 19:22
<font face="Verdana" size="2">Also ohne jetzt die Details zu kennen - wieso speicherst du die Pfade nicht zusammen mit den Bilddaten in diesen Textdateien? Wo man so etwas abspeichert, ist m.e. Geschmacksache. Bis zu einem gewissen Grad kann die Registry herhalten, aber das sollte sich auf allgemeine Programmeinstellungen beschränken. Ansonsten würde ich je nach Aufwand über eine Datenbank (Bsp.: Access) nachdenken. Das hat den Vorteil, dass du dir keine Gedanken über die Menge der Daten machen musst und dir ausserdem Sortier- und Suchfunktionen zur Verfügung stehen. Irgendwann wird's in Textdateien unübersichtlich ;)

HTH</font>

<Tom>
21.11.2002, 08:22
Vielen Dank!
Eine Datenbank, jedoch ist für mein Projekt zu groß. Ich lege nur wenige Projekte an.
Ich habe mich für INI-Dateien entschieden, wegen ihrer inneren Struktur und weil sie angeblich besser zu verwalten sind!
Wie müsste ich es denn machen, wenn ich nur mit Text-Dateien arbeite?
Wie ich es bisher habe, halten Sie für unklug, mit einer Haupt-INI-Dateien und ein paar Textdateien?

Stefan Kulpa
21.11.2002, 08:33
<font face="Verdana" size="2">Also wenn eine Datenbank nicht in Frage kommt, würde ich nur mit INI-Dateien arbeiten. Entweder pro Projekt = Bild eine eigene oder (sinnvoller) eine einzige INI-Datei, wobei jedem Projekt eine eindeutige ID als Section vergeben wird. Ob ein Projekt fertig ist, könnte man beispielsweise über einen Schlüssel (Key) Eintrag in der jeweiligen Section hinterlegen. Alle anderen Daten können ja auch jeweils als Schlüsselwerte hinterlegt werden. Als eindeutigen Key könnte man beispielsweise eine <a href="http://www.kulpa-online.de/tipps/visualbasic/903.htm" target="_blank">GUID</a> benutzen. Dann könnte das ganze wie folgt aussehen:</font>

<font face="Courier New" size="2">[{A7FFA6B1-0377-4A75-8CB9-B95FB5CF545A}]
Status=in Arbeit
Pfad= ...
Bilderanzahl= ...
Bilderhöhe= ...
Bildbreite= ...
Projektname= ...
usw.</font>

<font face="Verdana" size="2">HTH</font>

<Tom>
21.11.2002, 09:05
So sieht jetzt meine INI-Datei aus:

[Projekt-Tom]
Pfad=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\GifMaker-V1.2\petra
Status=In Arbeit
Anzahlbilder=3
Bildbreite=100
Bildhöhe=100
Sekunden=200
Bild1=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr1.bmp
Bild2=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr2.bmp
Bild3=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr3.bmp


Jetzt will ich zum Beispiel, das im Menü-Vorhandene Projekt, die gespeicherten Projektnamen zur Laufzeit(bei Formload) auftauchen, damit der Benutzer drauf klicken kann und ich die gespeicherten Daten aus der INI-Datei ins Programm lesen kann!?

Was sind Sie vom Beruf her?

Stefan Kulpa
21.11.2002, 12:47
<font face="Verdana" size="2">Nachfolgend ein Beispiel; dabei habe ich eine INI-Datei mit folgenden Sections erstellt:
</font>
<font color="#0000FF"><font face="Courier New" size="2">[Projekt-Tom01]
...
[Projekt-Tom02]
...
[Projekt-Tom03]
...</font></font>
<font face="Verdana" size="2">Das Auslesen aller Sektionen geht am einfachsten mittels API:</font>

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
<span class="REM">'// --------------------------------------------------------------------------</span>
<span class="REM">'// Dieser API-Call wird eigentlich nicht mehr unterstützt, allerdings</span>
<span class="REM">'// funktioniert er noch ;-)</span>
<span class="REM">'// --------------------------------------------------------------------------</span>
<span class="REM">'// DWORD GetPrivateProfileSectionNames(</span>
<span class="REM">'// LPTSTR lpszReturnBuffer, // return buffer</span>
<span class="REM">'// DWORD nSize, // size of return buffer</span>
<span class="REM">'// LPCTSTR lpFileName // initialization file name</span>
<span class="REM">'// );</span>
<span class="REM">'// --------------------------------------------------------------------------</span>
<span class="TOKEN">Private</span> <span class="TOKEN">Declare</span> <span class="TOKEN">Function</span> GetPrivateProfileSectionNames <span class="TOKEN">Lib</span> "kernel32" <span class="TOKEN">Alias</span> _
"GetPrivateProfileSectionNamesA" _
(<span class="TOKEN">ByVal</span> lpszReturnBuffer <span class="TOKEN">As</span> String, _
<span class="TOKEN">ByVal</span> nSize <span class="TOKEN">As</span> Long, _
<span class="TOKEN">ByVal</span> lpFileName <span class="TOKEN">As</span> <span class="TOKEN">String</span>) <span class="TOKEN">As</span> <span class="TOKEN">Long</span>

<span class="TOKEN">Private Sub</span> Form_Load()

<span class="TOKEN">Dim</span> sINIFile <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> sBuffer <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> asSections() <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> lResult <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> lCounter <span class="TOKEN">As</span> <span class="TOKEN">Long</span>

sINIFile = "C:\WINDOWS\Temp\MySettings.ini"
<span class="REM">'// Rückgabepuffer dimensionieren</span>
sBuffer = <span class="TOKEN">String</span>(FileLen(sINIFile), 0)
<span class="REM">'// API-Funktion aufrufen</span>
lResult = GetPrivateProfileSectionNames(sBuffer, Len(sBuffer), sINIFile)
<span class="REM">'// lResult entspricht der Länge des Rückgabestrings im Stringpuffer, daher:</span>
<span class="TOKEN">If</span> lResult > 0 <span class="TOKEN">Then</span>
sBuffer = Left(sBuffer, lResult)
<span class="TOKEN">Else</span>
MsgBox "INI-Datei konnte nicht gelesen werden!"
<span class="TOKEN">Exit Sub</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="REM">'// Die Einträge sind jeweils mit Chr(0) voneinander getrennt; daher:</span>
asSections = Split(sBuffer, vbNullChar)
<span class="REM">'// Die einzelnen Einträge in einen Menü anzeigen</span>
<span class="TOKEN">For</span> lResult = <span class="TOKEN">LBound</span>(asSections) <span class="TOKEN">To</span> <span class="TOKEN">UBound</span>(asSections)
<span class="TOKEN">If</span> Len(asSections(lResult)) > 0 <span class="TOKEN">Then</span>
lCounter = lCounter + 1
<span class="TOKEN">If</span> lCounter = 1 <span class="TOKEN">Then</span>
<span class="REM"> '// Ein Menüeintrag mnuProjekte mit Index 0 gibt es bereits -</span>
<span class="REM"> '// dieser befindet sich eingedrückt unterhalb eines Hauptmenü-Eintrags</span>
mnuProjekte(lCounter - 1).Caption = asSections(lCounter - 1)
<span class="TOKEN">Else</span>
<span class="REM"> '// Dynamisch neuen Menüeintrag erzeugen</span>
Load mnuProjekte(lCounter - 1)
mnuProjekte(lCounter - 1).Caption = asSections(lCounter - 1)
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span>

<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>

<span class="TOKEN">Private Sub</span> mnuProjekte_Click(Index <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>)

MsgBox "Es wurde das Projekt " & mnuProjekte(Index).Caption & " gewählt!"

<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>

<font face="Verdana" size="2">HTH

P.S.: Meine Brötchen verdiene ich als sog. DV-Koordinator bei einer privaten Krankenversicherung ...</font>

<Tom>
21.11.2002, 14:12
Das glaub ich ja gar nicht! Du bist ein Genie! Es funktioniert! Jedoch liest er nur den ersten Buchstaben des Projektnamens in den Menü!

Find ich Klasse!
Danke

<Tom>
22.11.2002, 08:18
Hallo, nochmal danke für alles bisherige!
dennoch bekomm ich es nicht gebacken, den gesamten Projektnamen auszulesen, sondern nur 1 Buchstabe! Ich komm nicht drauf warum!

Help! I need somebody!

Stefan Kulpa
22.11.2002, 08:36
<font face="Verdana" size="2">Also mein Beispiel oben funktioniert - vielleicht postest du mal den Inhalt deiner INI-Datei und die Funktion, wie du drauf zugreifst; ansonsten wird's schwer, den Fehler zu finden...

Gruß</font>

<Tom>
22.11.2002, 08:44
[Petra]
Pfad=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\GifMaker-V1.2\petra
Status=In Arbeit
Anzahlbilder=3
Bildbreite=100
Bildhöhe=100
Sekunden=200
Bild1=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr1.bmp
Bild2=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr2.bmp
Bild3=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr3.bmp
[Tommy]
Pfad=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\GifMaker-V1.2\ficken
Status=In Arbeit
Anzahlbilder=5
Bildbreite=100
Bildhöhe=100
Sekunden=500
Bild1=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr1.bmp
Bild2=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr2.bmp
Bild3=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr3.bmp
Bild4=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr4.bmp
Bild5=C:\Dokumente und Einstellungen\walters\Desktop\GifMaker\Numbers\nr5.bmp

sINIFile = App.Path & "\" & App.EXEName & ".ini"
sBuffer = CStr(FileLen(sINIFile))
lResult = GetPrivateProfileSectionNames(sBuffer, Len(sBuffer), sINIFile)


If lResult > 0 Then
sBuffer = Left(sBuffer, lResult)
Else
MsgBox "INI-Datei konnte nicht gelesen werden!"
Exit Sub
End If


asSections = Split(sBuffer, vbNullChar)

For lResult = LBound(asSections) To UBound(asSections)
If Len(asSections(lResult)) > 0 Then
lCounter = lCounter + 1
If lCounter = 1 Then
mnuLaden(lCounter - 1).Caption = asSections(lCounter - 1)
Else
Load mnuLaden(lCounter - 1)
mnuLaden(lCounter - 1).Caption = asSections(lCounter - 1)
End If
End If
Next

End Sub

Stefan Kulpa
22.11.2002, 10:04
<font face="Verdana" size="2">Statt</font>

<font face="Courier New" size="2">sBuffer = CStr(FileLen(sINIFile))</font>

<font face="Verdana" size="2">solltest du mal</font>

<font face="Courier New" size="2">sBuffer = String(FileLen(sINIFile), 0)</font>

<font face="Verdana" size="2">probieren (siehe auch mein Beispiel).

Gruß</font>

<Tom>
25.11.2002, 10:57
sobald ich es so versuche:

sBuffer = String(FileLen(sINIFile, 0))

bringt das programm eine Fehlermeldung:
Projekt oder Bibliothek nicht gefunden!!
Wieso?

Falls ich zu viele Fragen stell, bitte Bescheid geben!

Stefan Kulpa
25.11.2002, 11:07
Siehst du hier den Unterschied ?

sBuffer = String(FileLen(sINIFile), 0)
sBuffer = String(FileLen(sINIFile, 0))

Gruß

<Tom>
25.11.2002, 11:14
habs selber hingekriegt....
hatte unter Verweise eine falsche Bibliothek drin... sodass er immer 'String' angemeckert hat!

danke

<Tom>
27.11.2002, 11:36
hi, guten Tag!
Nun, nach 3 Tage voller Verzweiflung, traue ich mich doch dich zu fragen.
Wie kann ich aus der INI-Datei die Daten: Bilderanzahl, Bildhöhe, Bildbreite und die Pfade auslesen? Den Projektnamen krieg ich raus, sonst nix! Du hast mit einem 'asSections' gearbeitet; wie geht man damit um?

danke für deine Hilfe!!

Stefan Kulpa
27.11.2002, 16:25
<font face="Verdana" size="2">Das geht entweder mittels API (wie auch den Projektnamen) oder mittels WSH - da das bisherige Beispiel auf API basiert, hier auch der "Rest" als API-Lösung. Auf dieser <a href="http://www.kulpa-online.de/tipps/visualbasic/registry.htm" target="_blank">Seite</a> findest du die entsprechenden Routinen, um mittels API u.a. Werte in eine INI-Datei zu schreiben und wieder auszulesen. Kopiere einfach die Inhalte aus den Tipps 6.9 und 6.11 in ein Modul und schon stehen dir die Funktionen zur Verfügung (die Module kannst du auch jeweils downloaden).

Gruß</font>