Вниз
Скачать: 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.009 c
3-33061
alexander_ua
2003-07-17 15:54
2003.08.11
Перенос данных с Paradox в Interbase.


14-33335
Bless
2003-07-25 10:00
2003.08.11
Показать все директивы


14-33277
BIG_BROTHER
2003-07-23 19:24
2003.08.11
gif


8-33231
Njes
2003-04-16 10:10
2003.08.11
Копирование прямоугольной области в TBitmap


3-33077
Spawn
2003-07-17 19:27
2003.08.11
Сортировка




   Наверх