[ Xabre @ 11.12.2003. 09:43 ] @
Pre dve nedelje sam počeo da malo učim Delfi, pa mi je potrebna mala pomoć. Napravio sam neki programčić za čitanje baze, i naravno opciju za čuvanje izgleda prozora tj. DBgrid-a. Tak kod sam stavio u klasu i napravio dve funkcije za čitanje vrednosti DBgida tj. width-a i da li je ta kolona vidljiva - i to radi. Međutim problem se javio kod čitanja vrednsti iz ini-ja.
Funkcija koja snima vrednsti u ini izgleda ovako:
----------------------------------------------------
function TmojIni.SnimiIni (nKolona : integer) : integer;
var
i, rez, sir : integer;
saveIni : TIniFile;
begin
saveIni := TIniFile.Create('c:\demo\ispp.ini');
rez := Main.GetVisibleColumnsCount;

for i := 0 to rez - 1 do begin
sir := Main.DBGrid1.Columns.Items.Width;
saveIni.WriteString('Sirina kolone', 'Kolona_' + IntToStr(i), IntToStr(sir));
end;
saveIni.Free;
end;
---------------------------------------------------
A funkcija koja bi trebala da pročita, bar ona zadnja koju sam probao glasi ovako:
------------------------------------------------------
function TmojIni.UcitajIni(nKolona : integer) : integer;
var
i, rez, sir : integer;
openIni : TIniFile;
begin
openIni := TIniFile.Create('c:\demo\ispp,ini');
(*
for i := 0 to rez do begin
openIni.ReadSections(Main.DBGrid1.Columns.Items);
openIni.ReadSection('Kolona_', StrToInt(Main.DBGrid1.Columns.Items));
openIni.ReadSectionValues('Kolona_', Main.DBGrid1.Columns.Items);
end;
openIni.Free;*)
end;
--------------------------------------------------

Ima li neko ideju? :)
[ broker @ 11.12.2003. 11:25 ] @
Bice da si omasio sekciju. Koliko vidi u funkciji za upis sekcija se zove "Sirina kolone" a ti su kod ReadSection tražio sekciju sa imenom "Kolona###".

Mislim da ti ReadSection i ReadSections linije uopšte ne trebaju. a ReadSectionValues ti vraca TStringList iz koga dodatno treba da pročitaš stvarna imena kolona i pridružene im vrednosti širina.

Peđa
[ Xabre @ 11.12.2003. 11:33 ] @
Citat:
broker:
Bice da si omasio sekciju. Koliko vidi u funkciji za upis sekcija se zove "Sirina kolone" a ti su kod ReadSection tražio sekciju sa imenom "Kolona###".

Mislim da ti ReadSection i ReadSections linije uopšte ne trebaju. a ReadSectionValues ti vraca TStringList iz koga dodatno treba da pročitaš stvarna imena kolona i pridružene im vrednosti širina.

Peđa


Da, za omašenu sekciju jesi u pravu. :) Tu funkciju sam stavio čisto da bi bilo malo jasnije šta mi je potrebno, znam da je neispravna :)
Ovde reč o tome, kako da pročitam vrednosti koje su dodeljene Kolona_1, Kolona_2 .... koje se nalaze u sekciji Sirina kolone? Pretpotstavio sam da bi ReadSectionValues trebao da odradi posao, ali mi izbacuje grešku TString i TColumn.
[ broker @ 11.12.2003. 12:00 ] @
Pa rekao sam ti. ReadSectionValues vraća TStrings (TStringList) i ne možes to dodeljivati promenljivoj TColumn tipa.

Napravi promenljiv tipa TStringList pa njoj dodeli vrednost koju vrati ReadSectionValues pa onda procitaj podatke o kolonama.

Ja doduše više volim da odradim peške onako kako si počeo sa petljom i sa ReadString.

U tom slučaju u funkciji koja upisuje podatke teba da dodaš komandu da upišeš i broj kolona koje se upisao. U funkciji za čitanje prvo pročitaj broj kolona da bi znao koliko puita treba da se čita petlja a u i petlji čitaj sa

sirina := ReadString ('Sirina kolone', 'Kolona_' + IntToStr(i), '20');


Preporuka je da umesto WriteString i ReadString koristiš WriteInteger i ReadInteger jer je tako prirodnije i nemaš potrebu da dodatno vršiš konverziju tipova. Ja sam ih u primeru koristio samo zato što si tako počeo pa da te ne zbunjujem pošto je princip identičan.

Sve ovo ti lepo piše u help-u.

Da nisi pre Delphija koristio neki BASIC?
[ Xabre @ 11.12.2003. 12:11 ] @
OK, zanimljive ideje probaću ih da vidim kako bi to išlo.

BASIC? Pa ne baš, ali jesam malo učio C pre Delphija.