Dodanie zmiennej do nazwy pliku INI.

0

Witam. Posiadam 2 zmienne.

Zmienna1: string;
INI: TINIFILE

Chcę zapisać do pliku INI dane używając:

INI := TINIFile.Create(ExtractFilePath(Application.ExeName) +zmienna1+ 'users.ini');

Niestety wywala mi błąd: [Error] Unit3.pas(99): Incompatible types: 'TComponent' and 'String'

Podejrzewam że błąd polega na tym że chcę zmienna STRING przypisać do TINIFILE czyli chyba tak jakbym chciał string do integer.

Więc czy można użyć zmiennej do zapisania nazwy pliku INI tym sposobem ? Czy trzeba zrobić to inaczej ?

Pozdrawiam

1

Kod, który podałeś jest prawidłowy. Pod Delphi 7 kompiluje się ok. Za pewne masz coś pomieszane z typami. Ty nie przypisujesz IniFile stringa. Tylko w konstruktorze tego obiektu nakazujesz wczytywanie/zapis pliku ini do katalogu w którym jest Twój exek + JakasZmiennaTypuStringCoNieWiemyCoZawiera + 'users.ini'. Ponieważ domyślnie pliki ini zapisują się i odczytują z katalogu Windowsa. Tak pliki ini zostały stworzone jeszcze od wczesnych Windowsów, gdzie podkatalog w stylu %APPDATA% nie istniał.

Ewentualnie, jeżeli takie problemy sprawia Ci banalne ogarnięcie podstaw VCL. To nie wiem, zrób to pod WinAPI. Ja od dawna już porzuciłem używanie klasy TIniFile. Wszystko co najważniejsze mogą zrobić poniżesze metody:

procedure IniFileWriteString(FileName, Section, Ident, Value : string);
begin
  WritePrivateProfileString(PChar(Section), PChar(Ident), PChar(Value), PChar(FileName));
end;

function IniFileReadString(FileName : string;
  const Section, Ident, Default : string) : string;
var
  Buffer : array[0..2047] of Char;
begin
  SetString(Result, Buffer, GetPrivateProfileString(PChar(Section),
    PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer), PChar(FileName)));
end;

procedure IniFileEraseSection(FileName : string; const Section : string);
begin
  WritePrivateProfileString(PChar(Section), nil, nil, PChar(FileName));
end;

procedure IniFileDeleteKey(FileName : string; const Section, Ident : string);
begin
  WritePrivateProfileString(PChar(Section), PChar(Ident), nil, PChar(FileName));
end;
1

Jaki to niby kompilator? Podaj nazwę i wersję, bo kod jeżeli rzeczywiście jest taki jak podałeś to jest poprawny i powinien się kompilować.

0

Tak jak napisał @kAzek. Jedyne co przychodzi mi do głowy, to to, że PO module IniFiles masz w sekcji uses coś, co zawiera inną deklaracje klasy TIniFile. Być może coś samodzielnie próbowałeś stworzyć i stąd takie zamieszanie oraz komunikat błędu.

0

Odpaliłem od nowa komputer i problem zniknął. Być może jakieś błędy były wcześniej. Ogólnie ciągle mi się coś psuje w tym Delphi 7.

Olesio: Nawet nie próbowałem VCL, ale w najbliższym czasie się nauczę skoro mówisz że ułatwia pracę. Słyszałem właśnie że INI wyszło już z mody. I w tej bibliotece jest komponent zawierający zapisywanie czy jak to jest ?

0

Nie wiem o jakiej bibliotece piszesz. W module IniFiles jest klasa do obsługi. Tak, wiadomo INI są przestarzałe, ale do zapisu kilku prostych ustawień, po co angażować rozwiązania typu XML. Które jak dla mnie mają jeszcze taką wadę, że w łatwy sposób nie wciele ich do programu w czystym WinAPI.

1 użytkowników online, w tym zalogowanych: 0, gości: 1