Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

самый простейший вопрос - свой 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
1-10765
olecorp
2003-08-24 13:50
2003.09.04
Как послать приложению русские буквы ?


14-10914
Without Any ...
2003-08-17 21:56
2003.09.04
О том, что не приветствуется на этом фомуме


3-10617
Alexy
2003-08-13 12:09
2003.09.04
Пропадают записи в таблицах


3-10578
Алексей Петухов
2003-08-14 09:01
2003.09.04
TDBGrid


1-10690
snake1977
2003-08-25 11:47
2003.09.04
TEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский