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

Вниз

Почему не работает?   Найти похожие ветки 

 
Noname2   (2003-01-14 19:10) [0]

var
q: Tstrings;
begin
q.add("qqqqqqq");
end;

какието ощибки...
подскажите как сделать переменную типа Tstrings и заполнять ее


 
Skier   (2003-01-14 19:12) [1]

>Noname2

> какието ощибки...

Куча !

var
q: Tstrings;
begin
q := TStringList.Create;
try
q.add("qqqqqqq");
finally
FreeAndNil(q)
end; //try
end;



 
UltraFreak   (2003-01-14 19:14) [2]

Не уверен, но попробуй:

var
q:tstrings;
begin
q:=tstrings.create;
q.add("aaa");
q.add("bbb");
q.add("ccc");
q.free;
end;

Или что-то в этом роде...


 
Skier   (2003-01-14 19:15) [3]

>UltraFreak
Похоже на шутку...:)


 
Noname2   (2003-01-14 19:25) [4]

> Skier ©
а можно как-то сделать, чтобы переменная Tstrings надолго хранила информацию, а не только в блоке try...finally ?
Она мне надо как глобальная


 
R4D][   (2003-01-14 19:31) [5]

Дело в том, что TStrings - абстрактный класс, а одна из его реализаций - это TStringList(это я пояснил код Skier"a), смею предположить, что для NoName2 - он несколько непонятен. Вопрос к Skier"у: Зачем объявлять переменную типа TStrings и добавлять лишний FreeAndNil и try...finally, если можно сразу объявить TStringList? Так что можно по-легче.


 
Skier   (2003-01-14 19:33) [6]

>Noname2
Можно.
Сделай переменную типа Tstrings полем формы...

TForm1 = class(TForm)
private
FStrings : TStrings;
//..................
end; //

//.................

procedure TForm1.FormCreate(Sender: TObject);
begin
FStrings := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FStrings); //или просто FStrings.Free;
end;

Если тебе нужно чтобы поле FStrings было видно и
в других модулях, то перенеси его в раздел public

TForm1 = class(TForm)
public
FStrings : TStrings;
//..................
end;

(конечно, F - это обычно префикс private-поля, но это
уже не принципиально...)



 
mrcat   (2003-01-14 19:36) [7]

Noname2 (14.01.03 19:10)
...
какието ощибки...
...


TStringList
F1 -> Example


 
Noname2   (2003-01-14 19:38) [8]

Всем большое спасибо


 
Skier   (2003-01-14 19:38) [9]

>R4D][
1) Освобождение объекта никогда не бывает лишним !
(тем более что у него нет владельца)
2) когда идёт работа с памятью то её освобождение
надо защищать на случай возникновения исключения
(конечно в этом куске кода оно вряд ли возникнет :), но
использование блока try-finally-end в случаях выделения
памяти должно войти в кровь...:) )


 
R4D][   (2003-01-14 19:45) [10]

Не хочу показаться необязательным, но здесь это не критично, да и, все же, объявить TStringList вместо TStrings, более рационально, но, вообще, ты несомненно прав.


 
Roma   (2003-01-14 19:46) [11]

> Skier © (14.01.03 19:33)
F - это обычно префикс private-поля, но это уже не принципиально...

Не обязательно private, просто - поля (от англ. field - поле), для отличия полей от свойств (у которых в Delphi не принято ставить префикс). Но это уже совсем не принципиально... ;)

PS: Это сообщение не для Скайера, а просто комментарий...


 
Anatoly Podgoretsky   (2003-01-14 20:31) [12]

R4D][ (14.01.03 19:45)
Нет_ не рационально, не забываем про полиморфизм и не ограничиваем себя только TStringsList, а вот это - FreeAndNil(q), как правило это говорит о плохом проектировании программы и желании повторного использования, что как правило кончается плохо, поиском трудно уловимых ошибок.


 
Skier   (2003-01-15 10:48) [13]

>Anatoly Podgoretsky
Это говорит о правиле сбрасывания указателя, на освобождённый
объект, что не является криминалом...


 
R4D][   (2003-01-15 18:01) [14]

>Anatoly Podgoretsky
А зачем здесь нужны другие наследники TStrings? Насколько я понял, другие классы, кроме TStringList, здесь не понадобятся, в то же время, прямое объявление TStringList делает код более понятным, наглядным для новичка. Да и ошибки потом будет легче искать. Так что все-таки, как мне кажется, сразу объявлять TStringList более рационально в данном случае.


 
Anatoly Podgoretsky   (2003-01-15 18:11) [15]

Skier © (15.01.03 10:48)
Криминалом конечно не является, зачем сбрасывать вот в чем вопрос?

R4D][ (15.01.03 18:01)
Тебе про кровь писали?


 
Skier   (2003-01-15 18:28) [16]

>Anatoly Podgoretsky
В этом куске кода это безусловно не обязательно,
но иногда (в более сложном коде:) ) возникает необходимость
проверки указателя на nil, чтобы убедиться что или объект ещё
не создан или он уже убит...


 
Anatoly Podgoretsky   (2003-01-15 21:28) [17]

Skier © (15.01.03 18:28)
Таким исключение могут быть члены класса, как контейнеры, во всех остальных случаях стоит задуматься об дизайне, за 8 лет работы с Дельфи, ни разу не потребовалось, потому что не не путаюсь повторно использовать, это прямой путь к ошибкам.



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

Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
3-72052
AlexG
2003-01-05 12:05
2003.01.23
Provider


3-72111
Mike_hex
2002-12-30 10:29
2003.01.23
Связи таблиц в Delphi 5


1-72239
4X4
2003-01-14 16:52
2003.01.23
onChange событие в Combobox?


1-72232
W0land
2003-01-14 14:31
2003.01.23
WinXP+Delphi5 - проблема с отладчиком


14-72477
CPPBuilderDev
2003-01-05 11:26
2003.01.23
У кого есть готовая базка склада? MSAccess или





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский