Cogu zaman gelistirdigimiz program icin gerekli olan parametrelerin kaydedilmesi gerekir.Kisisellestirilebilir programlarda bu durum daha cok karsimiza cikar.
Ornek olarak kullaniciya textbox arkaplan rengini degistirebilme kolayligi sagladiniz.Peki kullanici bu ozelligi sectiginde bu deger nereye yazilacak? Database ? Hayir, database gerektirmeyen bir yazilim gelistirdiginizi dusunursek (or:muhendislik programi) sadece kullanicinin sectigi textbox arkaplan rengini saklamak icin bir database kullanilmasi dogru olmayacaktir.Peki Text dosyalari? Evet mevcut olarak cogu programci parametrelerin saklanmasi icin textbox kullanmaktadir.Fakat textbox kullanimi tam verimlilik saglamayacaktir.
Nedeni ise textbox'a yazilacak yeni bir deger icin 2.bir gecici dosya acilip mevcut degerlerin 2. dosyaya aktarilmasi bu arada yeni degerin 2. dosyaya islenmesi ve son olarak 1.orjinal dosyanin silinip 2.gecici dosyanin isminin degistirilmesi cok parametre tuttugunuz bir programda yavas kalacaktir.
Ini dosyalarinin yapisi
--------------------------------------------------------------------------------
Ini dosyalari Section(Bolum) , Parametre isimleri ve degerlerinden olusur.Ornek vermek gerekirse;
[Form1">
Genislik=3800
Yukseklik=4000
Burada "[">" icinde yazili olan "Form1" bolum ismi, "Genislik" parametre ismi ve "="'den sonra olan bolumler ise degerlerdir.
Dogal olarak su soruyu soracaksiniz , Ini dosyalarida ayni sekilde text dosyalarina benzer , parametre okuma/yazma isleminde hizi arttirmak icin ne tur bir yontem kullanacagiz?
Parametre okuma/yazma islemi icin API kullanacagiz.Api kullanimi yazilacak bir kod'dan daha hizli sonuc verecektir.
Kullanilacak API'ler
- Kod:
-
GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
GetPrivateProfileInt Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal nDefault As Long, _
ByVal lpFileName As String) As Long
WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Long
ReadStringFromIni - Ini dosyasinin istenen kismindan string degisken turundeki parametre bilgisinin okunmasi
- Kod:
-
Public Function ReadStringFromIni(strIniFile As String, strSection As String, _
strVariable As String, _
strDefault As String) As String
- Kod:
-
Dim strValue As String ' Okunan değer
Dim lValueLenght As Long ' Okunan değerin uzunluğu
'Okunacak değer için 255 karakterlik yer ayrılıyor
strValue = Space(255)
'INI dosyasından okuma ;
lValueLenght = GetPrivateProfileString(strSection, strVariable, strDefault, _
strValue, 255, strIniFile)
'Değer uzunluğuna göre kendisi için ayrılan yerden alınıyor
strValue = Left(strValue, lValueLenght)
'Fonksiyona değer olarak atanıyor.
ReadStringFromIni = strValue
End Function
ReadIntFromIni - Ini dosyasinin istenen kismindan integer degisken turundeki parametre bilgisinin okunmasi
Public Function ReadIntFromIni(strIniFile As String, strSection As String, _
strVariable As String) As Long
'*****************************************************************
'Amac : Programın ini dosyasında istenen kısmından belirtilen
' değişkenin değerini alır. Değişken türü integer dir.
'Giris : Ini dosyasının yeri ve adi, ini dosyasında okunacak
' kisim ini dosyasında okunacak değişken
' strIniFile : Ini dosyasının yeri ve adi
' strSection : Okunacak değişkenin ini dosyasında bulunduğu
' kısım
' strVariable : Okunacak değişkenin adı
'Cikis : Okunan değişkenin değeri
'*****************************************************************
- Kod:
-
Dim lValue As Long ' Okunan değer
'INI dosyasından okuma; eğer değişken bulunamazsa değer olarak -1 döndürülüyor
lValue = GetPrivateProfileInt(strSection, strVariable, -1, strIniFile)
'Fonksiyona değer atanıyor
'Eğer değer okunamadıysa;
If lValue = -1 Then
ReadIntFromIni = -1
'Okunduysa;
Else
ReadIntFromIni = lValue
End If
End Function
WriteToIni - Ini dosyasinin istenen kismina integer veya string degisken turundeki parametre bilgisinin yazilmasi
Public Function WriteToIni(strIniFile As String, strSection As String, _
strVariable As String, strValue As String) As Boolean
'*****************************************************************
'Amac : Programın ini dosyasında istenen kısmından belirtilen
' değişkene belirtilen verilen değeri yazar.
' Yazdırılacak değerin string yada sayı olmas önemli değil.
' Yazdırılacak değer sayı olsa bile string gibi yazdırılıyor.
' Ancak okunurken sayı okunur gibi okunması gerek.
'Giris : Ini dosyasının yeri ve adi, ini dosyasında yazılcak kısım,
' ini dosyasında yazılacak değişken, değişkene yazılacak
' değer
' strIniFile : Ini dosyasının yeri ve adi
' strSection : Yazdırılacak değişkenin ini dosyasında
' bulunduğu kısım
' strVariable : Yazdırılacak değişkenin adı
' strValue : Yazılacak değer
'Cikis : True/False (Başarılı/Başarısız)
'*****************************************************************
- Kod:
-
Dim lReturn As Long 'api fonksiyonun dönüş değeri (1:Başarılı, 0:Başarısız)
'INI dosyasına yazma
lReturn = WritePrivateProfileString(strSection, strVariable, _
strValue, strIniFile)
'Yazma işlemini başarılı olup olmadığı kontrol edilerek fonksiyona atanıyor.
'Başarısız ise;
If lReturn = 0 Then
WriteToIni = False
'Başarılı ise;
Else
WriteToIni = True
End If
End Function