Вниз
Скачать: CL | DM;

TStrings и TListView   Найти похожие ветки 

← →
Lt   (2003-07-29 11:04) [0]

День добрый. Помогите разобраться. Почему не работает код:

var
I: Byte;
fIni: TIniFile;
St: TStrings;
begin
fIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + "DWGbase.ini");
if fIni.SectionExists("порядок сортировки") then
begin
St := TStrings.Create;
fIni.ReadSection("порядок сортировки", St);
for I := 0 to St.Count - 1 do
ListView2.Items[I].Caption := St.Strings[I];
St.Free;
end;
fIni.Free;
end;


← →
Hint ©   (2003-07-29 11:08) [1]

TStrings абстрактный класс. Используйте TStringList


← →
HolACost   (2003-07-29 11:11) [2]

Вопрос интересный - что не работает?


← →
Zergling ©   (2003-07-29 11:19) [3]

if fIni.SectionExists("порядок сортировки") then
begin
// Он у тебя в if и не заходит вовсе. Отсюда следует ...
end;


← →
Lt   (2003-07-29 11:21) [4]

А не работает - ругается на абстрактный класс


← →
Zergling ©   (2003-07-29 11:25) [5]

fIni.SectionExists("порядок сортировки") возвращает false


← →
Zergling ©   (2003-07-29 11:40) [6]

Извеняйте за предыдущие посты. У меня там опечатка была.
Вот так у меня работает. Пробуй.

procedure TForm1.Button2Click(Sender: TObject);
var
I: Byte;
fIni: TIniFile;
St: TStringList;
begin
St := TStringList.Create;
fIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + "DWGbase.ini");
if fIni.SectionExists("порядок сортировки") then Caption := "Да";
fIni.ReadSection("порядок сортировки", St);
begin
fIni.ReadSection("порядок сортировки", St);
for I := 0 to St.Count - 1 do
ListView2.Items[I].Caption := St.Strings[I];
St.Free;
end;
fIni.Free;
end;


← →
Юрий Зотов ©   (2003-07-29 11:50) [7]

А еще лучше использовать try-finally. Причем дважды.


← →
mrcat ©   (2003-07-29 11:53) [8]

Lt (29.07.03 11:04)

Для начала было бы неплохо определить задачу, т.к. смысл Вашего кода вызывает сомнение: ну зачем пользователю знать, какие секции содержит ini-файл?


← →
VMcL ©   (2003-07-29 11:54) [9]

>Zergling © (29.07.03 11:40)

Отличный пример того... как не надо делать.


← →
Юрий Зотов ©   (2003-07-29 12:11) [10]

Да о чем спор-то? В вопросе дан нормальный код, только надо убрать абстрактный класс, лишнюю переменную, лишнюю строку и дважды добавить try-finally, вот и все.


const
Section = "порядок сортировки"; // Чтобы без дублей
var
i: integer; // Здесь integer лучше, чем byte
St: TStrings;
begin
with TIniFile.Create(ExtractFilePath(ParamStr(0)) + "DWGbase.ini") do
try
if SectionExists(Section) then
begin
St := TStringList.Create;
try
ReadSection(Section, St);
for i := 0 to St.Count - 1 do
ListView2.Items[i].Caption := St[i]
finally
St.Free
end
end
finally
Free
end
end;


← →
AbrosimovA ©   (2003-07-29 12:13) [11]

Лучше так:

var
I: Byte;
fIni: TIniFile;

begin
fIni := TIniFile.Create(ExtractFilePath(ParamStr(0))+
"DWGbase.ini");
if fIni.SectionExists("порядок сортировки") then
fIni.ReadSection("порядок сортировки", ListBox1.Items);
fIni.Free;
end;


← →
Zergling ©   (2003-07-29 12:18) [12]

VMcL © (29.07.03 11:54)
Я и не стремился особо попралять код от Lt
Фактически я ему немного подправил егоже переменную St
Сей пост у тебя созрел скорее всего после поста Юрия Зотова


← →
AbrosimovA ©   (2003-07-29 12:20) [13]

I: Byte в моем примере не нужен


← →
Alexsum   (2003-07-29 12:27) [14]

а я бы попробовал поменять
St := TStrings.Create;
на
St := TStringList.Create;



← →
VMcL ©   (2003-07-29 12:32) [15]

>Zergling © (29.07.03 12:18)

procedure TForm1.Button1Click(Sender: TObject);
var
I: byte;
fIni: TIniFile;
St: TStringList;
begin
St := TStringList.Create;
fIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + "DWGbase.ini");
if fIni.SectionExists("порядок сортировки") then Caption := "Да";
fIni.ReadSection("порядок сортировки", St);
begin
fIni.ReadSection("порядок сортировки", St);
for I := 0 to St.Count - 1 do
ListView2.Items[I].Caption := St.Strings[I];
St.Free;
end;
fIni.Free;
end;


+ Юрий Зотов © (29.07.03 11:50)


← →
Lt   (2003-07-29 12:51) [16]

Закавыка для меня была именно в использовании абстрактного класса. Всем списибо. Особенно Zergling и Hint за ответ на вопрос, Юрию Зотову за оптимизацию кода, АбросимовОй :) за подзатыльник - видимо перейду от ListView к ListBox.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.011 c
8-33228
Antipich
2003-04-17 14:24
2003.08.11
Печать


1-33208
CanBlow
2003-07-28 18:27
2003.08.11
TThread


9-33038
Rotate3f
2003-02-11 11:05
2003.08.11
Динамические лайтмапы


1-33141
Otter
2003-07-28 03:34
2003.08.11
Как присвоить подпрограмму????


1-33108
crash_rider
2003-07-29 21:23
2003.08.11
Преобразование Pointer а Array в Плагине Winamp?




   Наверх