Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

самый простейший вопрос - свой var на основе TStrings   Найти похожие ветки 

 
malamba   (2003-08-21 14:35) [0]

Я что-то совсе поглупел:
как сделать свою переменную типа TStrings.

Я делаю
var
str: TStrings
...

str. create;
И вот здесь вылетает все. Напрочь.

Мелочь, а противно.
Как бороться?


 
stone ©   (2003-08-21 14:37) [1]

TStrings - абстрактный класс
str: TStringList;


 
Vlad ©   (2003-08-21 14:40) [2]

если уж на то пошло, то str:=TStrings.Create


 
default ©   (2003-08-21 14:46) [3]

или
var
Str: TStrings;
begin
Str := TStringList.Create
тогда только чтобы юзать "новшества" TStringList надо вып0ать приведение к этому типу


 
malamba   (2003-08-21 14:54) [4]

Я тоже был такой:

str:=TStrings.Create;

Вылетало.
Если использовать не абстрактный класс, а TStringList - я смогу передать его в какой-нибудь ComboBox?
Чем хорош TStrings:
ComboBox.Items:= str ( которая есть TStrings).

Да и вообще...


 
Digitman ©   (2003-08-21 15:05) [5]


> Чем хорош TStrings:
> ComboBox.Items:= str ( которая есть TStrings).


недопустима такая конструкция !

а вот такая

ComboBox.Items.Assign(str)

вполне допустима) ... и ни в коем случае не спрашивай - почему)


 
Reindeer Moss Eater ©   (2003-08-21 15:08) [6]

> ComboBox.Items:= str ( которая есть TStrings).
недопустима такая конструкция !


Она очень даже допустима. Потому как Items - свойство это.


 
malamba   (2003-08-21 15:14) [7]

Виноват, вылетало не на создании, а на

str.Add(Field[0].AsString);

"Чувстувую, что здесь какая-то логическая несообразность, но не могу понять где..."


 
Reindeer Moss Eater ©   (2003-08-21 15:16) [8]

str.Add(Field[0].AsString);

Str - указатель никуда не указывающий.


 
VAleksey ©   (2003-08-21 15:18) [9]


> malamba (21.08.03 15:14)

В голове.

PS
А почему опять в базах данных - то вопрос?? Какое отношение он к БД имеет???


 
malamba   (2003-08-21 15:26) [10]

А это разве не "Общие вопросы?"

Как в анекдоте : "А я что сказал?"
Ой, Модератор, я дико извиняюсь!!!! Плюсик мне, плюсик...

А Кстати, о плюсиках:
str.Add(Field[0].AsString); - как не указывающий?
Стандартная процедура записи в TString.
str создана перед этим.

Кстати, вот в чем была проблема :
var
Str: TStrings;
begin
Str := TStringList.Create

Defaul был прав - в любом случае нужно создавать под TStringList, хотя переменная и TStrings


 
Romkin ©   (2003-08-21 15:36) [11]

2Digitman как ни странно, присвоение Items напрямую вполне допустимо. По крайней мере в D6 :)

procedure TCustomCombo.SetItems(const Value: TStrings);
begin
if Assigned(FItems) then
FItems.Assign(Value)
else
FItems := Value;
end;

procedure TCustomMemo.SetLines(Value: TStrings);
begin
FLines.Assign(Value);
end;

Ну и так далее :)))


 
VAleksey ©   (2003-08-21 15:39) [12]


> Romkin © (21.08.03 15:36)

Вот этим программисты Borland и вносят сумятицу в ряды простых смертных.


 
Romkin ©   (2003-08-21 15:41) [13]

А исходники на что?!


 
default ©   (2003-08-21 15:43) [14]

он про то, что простые смертные в исходники не заглядывают, IMO


 
Reindeer Moss Eater ©   (2003-08-21 15:45) [15]

Вот этим программисты Borland и вносят сумятицу в ряды простых смертных.

Тем, что используют парадигму свойств?


 
Карелин Артем ©   (2003-08-21 15:48) [16]

>>присвоение Items напрямую вполне допустимо
Только при освобождении Str освободится и ComboBox.Items!!
Да и функция вообще-то есть стандартная с таким именем.


 
Digitman ©   (2003-08-21 15:49) [17]


> Romkin


> Reindeer Moss Eater


приношу извинения.

действительно - допустима.

каюсь, поленился посмотреть в stdctrls.pas, почему-то показалось (по аналогии с некоторыми иными классами), что Items просто фиксирует ссылку, а не вызывает тот же Assign()


 
Reindeer Moss Eater ©   (2003-08-21 15:53) [18]

Карелин Артем © (21.08.03 15:48) [16]
>>присвоение Items напрямую вполне допустимо
Только при освобождении Str освободится и ComboBox.Items!!

С чего бы это вдруг ему освободиться?


 
Карелин Артем ©   (2003-08-22 10:51) [19]

Reindeer Moss Eater © (21.08.03 15:53)
Запускаем:
procedure TForm1.Button1Click(Sender: TObject);
var ss: TStrings;
begin
ss:=TStrings.Create;
ss:=ComboBox1.Items;
ss.Free;
end;

При попытке раскрытия комбобокса получаем AV!!


 
Юрий Федоров ©   (2003-08-22 10:58) [20]

>>Карелин Артем © (22.08.03 10:51) [19]
Ну уж отлюбой глупости механизм get\set для св-в защитить не может :-)
Мало того, что грохнул поле ComboBox1.Items (и это при живом-то объекте!), так еще и утечку памяти дропустил :-)


 
Reindeer Moss Eater ©   (2003-08-22 11:03) [21]

Карелин Артем ©
У автора вопроса случай похожий, но совершенно иной.
У него TStrings - это свойство класса. Именно это обстоятельство не приведет к убиению.


 
Карелин Артем ©   (2003-08-22 11:05) [22]

Юрий Федоров © (22.08.03 10:58)
Это к тому, что без Assign не обойтись. Ну а в случае такого кода и try ... finally не даст положительного эффекта.


 
Юрий Федоров ©   (2003-08-22 11:09) [23]

>>Карелин Артем © (22.08.03 11:05) [22]
А как ты себе представляешь Assign для св-ва TStrings на чтение ?
На запись все понятно(так и сделано), а при чтении придется копию объекта создавать - в результате внешний код превратится в настоящий бардак - после каждого обращения к св-ву придется вызывать деструктор :-)


 
Song ©   (2003-08-22 18:34) [24]

Использование TStrings допустимо только на ссылке т.е.:

Function SomeFunc(Str: TStrings);
Begin
...
End;

SomeFunc(CheckListBox1.Items); например,

но недопустимо в тех операциях где ожидается создание экземпляра класса и/или его использование.


 
malamba   (2003-08-22 18:50) [25]

Автора, автора!!

ComboBox.Items.Assign(Str);
ComboBox.ItemIndex:=0;
Работает-с.

Но вот что не ндравится - задал вопрос о коллекциях его на месте расстрелляли. Да-с, господа, прямо на моих глазах...

Так вот я о чем:
Есть список элементов. Каждый элемент имеет свой подсписочек.
В чем все это лучше держать?

Вроде бы нашел, что коллекция лучше - меньше кода, все уже встроено.

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



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

Текущий архив: 2003.09.04;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.036 c
7-10991
SergeyI
2003-06-21 12:24
2003.09.04
работа с реестром


3-10558
SJ-79
2003-08-11 19:33
2003.09.04
Перенос данных из таблицы ворда в базу данных парадокс


7-11012
AdMiRaL
2003-06-22 20:54
2003.09.04
Faili


1-10670
Lina
2003-08-21 08:58
2003.09.04
Image


1-10788
Makhanev A.S.
2003-08-22 08:16
2003.09.04
Как убрать scrollbar ы?