Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 00:02   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Можно ли не создавая TStringList (использую with...do), использовать его в процедуре?

Первой моей мыслью было:
Код:
with TStringList.Create do
begin
  parseList(Self); //я думал, что если использовать with, то в Self загониться то, к чему я применил with
  free;
end
Что нужно писать вместо Self, или так нельзя?

Update:
Второй моей мыслью стало:
Код:
var
  a: TStringList;
begin
  with a:=TStringList.Create do
  begin
    StrParseToList(s, a);
    s:=a.Strings[0];
    free;
  end;
Но компилятор сказал, что так нельзя делать)

Последний раз редактировалось TwiX; 14.03.2010 в 00:05.
TwiX вне форума Ответить с цитированием
Старый 14.03.2010, 00:15   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Ммм интересно, а как вы хотите что то делать с TStringList если вы его не создадите - не будет объекта данного класса? Или может я чего то не понимаю?
Ну а вообще почему бы не написать так:
Код:
var
  a: TStringList;
begin
a:=TStringList.Create;
  with a do
  begin
    StrParseToList(s, a);
    s:=a.Strings[0];
    free;
  end;
EDIT:
В Self будет указатель на объект, который вызвал данную процедуру.
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 14.03.2010 в 00:18.
spamer вне форума Ответить с цитированием
Старый 14.03.2010, 01:44   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Про self - я знаю. Думал, что с with так сработает просто.
Не хочу тратить переменную.
Цитата:
не будет объекта данного класса
Как же мы тогда вызывам его методы в begin...end после with?
TwiX вне форума Ответить с цитированием
Старый 14.03.2010, 02:06   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Наверное вы меня не поняли.
Вы написали :
Цитата:
Можно ли не создавая TStringList (использую with...do), использовать его в процедуре?
Следовательно, я ответил, вернее у вас спросил:
Цитата:
а как вы хотите что то делать с TStringList если вы его не создадите - не будет объекта данного класса
наверное лучше тогда так, как же вы будете использовать объект данного класса, если вы его не создадите? Сейчас вроде понятнее написал.

Цитата:
Не хочу тратить переменную.
А как же вы тогда хотите с ним работать? Смотреть вопрос выше.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 14.03.2010, 03:27   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Бррр...
Вы меня совсем не поняли. Я имел в виду, что не хочу заводить переменную, а просто обойтись с witth...do.
Вот так можно работать с объектом Tstringlist, но нельзя его использовать в качестве переменной:
Код:
with TStringList.Create do
begin
  add('asd');
  savetofile('1.txt');
  free;
end
При этом не нужно заводить отделбную переменную.
TwiX вне форума Ответить с цитированием
Старый 14.03.2010, 03:37   #6
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

А вот теперь ясно.
Хотя я вот не пойму, а как же тогда выделяется объекту память, если объекта у нас нету? По сути мы работаем с типом, как такое возможно? Чего то не пойму как оно работает, вот.
Может кто то объяснить?
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 14.03.2010 в 03:41.
spamer вне форума Ответить с цитированием
Старый 14.03.2010, 04:00   #7
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

По вызову TStringList.Create объекту выделяется память и даётся хендл, с которым и работает with...do.
Только вот как узнать сам хендл)
TwiX вне форума Ответить с цитированием
Старый 14.03.2010, 15:26   #8
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

TwiX, мене кажется чего то ты сильно перемудрил. Создай переменную та и все. Все равно память ты не сэкономишь, а мороки получается больше.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 17.03.2010, 18:17   #9
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Первой моей мыслью было:
Код:
with TStringList.Create do
begin
  parseList(Self); //я думал, что если использовать with, то в Self загониться то, к чему я применил with
  free;
end
Что нужно писать вместо Self, или так нельзя?

Update:
Второй моей мыслью стало:
Код:
var
  a: TStringList;
begin
  with a:=TStringList.Create do
  begin
    StrParseToList(s, a);
    s:=a.Strings[0];
    free;
  end;
Но компилятор сказал, что так нельзя делать)
Года три назад у меня тоже был такой же вопрос (даже рассуждения про Self и присвоение внутри with были в том же порядке До сих пор в объявлении пишу
sl:TStringList;
Так что маловероятно, что можно сделать как-то ещё.
А жаль. Было бы очень удобно.
Greek9000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Gecko. Как его использовать в дельфи? Crivel Софт 57 20.09.2012 19:57
Title на форме. Как можно перерисовать caption на form? Или убрать его и вместо использовать картинки Шульц Общие вопросы Delphi 37 02.10.2010 09:46
Sorry, а можно использовать тэги? BaronTreep О форуме и сайтах клуба 27 18.07.2009 13:25
IF - можно ил и как использовать? iankov SQL, базы данных 6 13.06.2009 12:13
Как создать модуль и использовать его prikolist Общие вопросы C/C++ 5 09.04.2009 18:58