![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работать с TStrings [D6, WinXP]
ТехникПТО © (2005-03-03 20:16:00)Допустим я переменной s:tStrings s:=listbox.items
и как эти итемс от туда досатвать??
P.N.P. (2005-03-03 23:42:00) [1]Да, действительно, я неправ.
Требуется освобождение памяти.
jack128 (2005-03-03 23:33:00) [2]P.N.P. © (03.03.05 23:28) [8]
Ничего подобного,
Дима сказал, что мы иничтожаем ЭКЗЕМПЛЯР объекта, а не переменную, в которорй хранится указатель на этот экземпляр..
P.N.P. (2005-03-03 23:28:00) [3]>Дмитрий Мыльников (03.03.05 23:21) [7]
>ОБЯЗАТЕЛЬНО УДАЛЯЕМ
Ничего подобного, локальные переменные уничтожаются автоматом
при завершении процедуры.
См. хелп:
Each time a procedure or function is called, it allocates a set of local variables; on exit, the local variables are disposed of. Compiler optimization may eliminate variables earlier
Дмитрий Мыльников (2005-03-03 23:21:00) [4]В принципе можно и не делать копию списка строк через создание экземпляра TStringList и последующим вызовом assign.
То есть код
var
S: TStrings
str1: string;
begin
...
S := ListBox.Items;
...
str1 := S[I];
будет вполне рабочий. Главное, чтобы пока мы используем S, содержимое ListBox не менялось и сама форма не удалялась.
Если же гарантии сохранности ListBox или его содержимого нет, то следует использовать что-то типа:
var
S: TStringList;
str1: string;
begin
...
S: = TStringList.Create;
try
...
S.Assigned(ListBox.Items);
...
str1 := S[i]; //используем содержимое списка
...
finally
S.Free; //после того как попользовались ОБЯЗАТЕЛЬНО УДАЛЯЕМ
//ЭКЗЕМПЛЯР КЛАССА !!!
end;
...
end;
Да, поскольку свойство Strings[Index:integer]:string у TStrings объявлено как default, то его можно опускать.
Кстати, в принципе допустим и такой код
var
S: TString;
str1: string;
begin
...
S: = TStringList.Create;
try
... //и далее предыдущий пример.
То есть, переменную можно объявить класса-предка от той, которую реально создадим, если это, конечно, нужно.
Anatoly Podgoretsky (2005-03-03 20:34:00) [5]Count
ТехникПТО (2005-03-03 20:32:00) [6]
> var
> s:Tstrings;
> begin
> s:=TstringList.Create;
> s.assign(ListBox.Items);
> showmessage(s[0]);
> end;
а как узнать сколько всего индексов?
P.N.P. (2005-03-03 20:23:00) [7]var
s:Tstrings;
begin
s:=TstringList.Create;
s.assign(ListBox.Items);
showmessage(s[0]);
end;
Anatoly Podgoretsky (2005-03-03 20:21:00) [8]По индексу
TUser (2005-03-03 20:21:00) [9]
> s:tStrings
TStringList
.Strings[i] == [i]
Checist [root] (2005-03-03 20:21:00) [10]А если s[i], где i- индекс итема