Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.08.2011, 18:14
trafbite trafbite вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 8
Репутация: 10
По умолчанию Передать в функцию и забрать оттуда TStringList - как?

Привет.
Ребят, есть проблема. В гугле был - не нашел четкого ответа на вопрос.

Есть TStringList (text.Text) с каким-то содержимым. Хочу передать этот лист в функцию, там добавить, например, строку, а потом забрать это дело оттуда и вывести в мемо. Как сделать?

Я делал так:
Код:
function TForm1.test(list: TStringList): TStringList;
begin
list.Add('Some string');
end;
потом в обработчике нажатия кнопки Button1:

Memo1.Text:=test(text.Text);
Не работает
Ответить с цитированием
  #2  
Старый 12.08.2011, 19:46
Аватар для Gravitas
Gravitas Gravitas вне форума
Новичок
 
Регистрация: 12.06.2011
Сообщения: 61
Версия Delphi: 7
Репутация: 38
По умолчанию

Код:
function TForm1.test(list: TStringList): TStringList;
begin
Result.Add('Some string');
end;


Memo1.Text:=test(text.Text);
__________________
Gravitas
Ответить с цитированием
  #3  
Старый 12.08.2011, 19:48
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
По умолчанию

Вот пример функции:

Код:
function AppendList (AList: TStringList): Integer;
begin
  Result := AList.Add('Это новая строка!');
end;

Используем так:

Код:
...
Index := AppendList(MyStrings);
ShowMessage('Добавлена строка с индексом ' + IntToStr(Index));
ShowMessage('Текст строки: ' + MyStrings[Index]);
...
Ответить с цитированием
  #4  
Старый 12.08.2011, 19:49
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
По умолчанию

Цитата:
Сообщение от Gravitas
Код:
function TForm1.test(list: TStringList): TStringList;
begin
Result.Add('Some string');
end;


Memo1.Text:=test(text.Text);

Gravitas, я так понимаю, вылезет Access Violation в данном коде...
Ответить с цитированием
  #5  
Старый 12.08.2011, 19:55
Аватар для Gravitas
Gravitas Gravitas вне форума
Новичок
 
Регистрация: 12.06.2011
Сообщения: 61
Версия Delphi: 7
Репутация: 38
По умолчанию

Ну я полагал, что ТС сам догадается приписать ...:=TStringList.Create или так, как вы предложили.
__________________
Gravitas

Последний раз редактировалось Gravitas, 12.08.2011 в 19:57.
Ответить с цитированием
  #6  
Старый 12.08.2011, 20:15
trafbite trafbite вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Gravitas
Код:
function TForm1.test(list: TStringList): TStringList;
begin
Result.Add('Some string');
end;
Memo1.Text:=test(text.Text);

Нет, не работает. Ругается именно на эту строку:
Код:
Memo1.Text:=test(text.Text);
[Error] Unit1.pas(36): Incompatible types: 'TStringList' and 'TCaption'
Листинг двух этих операций:

Код:
function tform1.test(list: tstringlist):tstringlist;
begin
list.Add('111');
result.Text:=list.text;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo2.Text:=test(memo1.text);
end;
GriLab, проблема именно в передаче (заборе результата) из функции. Что и как делать в самой функции я знаю, с этим проблем нет. Проблема вывести из функции TStringlist в TStringlist.
Ответить с цитированием
  #7  
Старый 12.08.2011, 20:23
FlyInDream FlyInDream вне форума
Прохожий
 
Регистрация: 10.08.2011
Сообщения: 24
Репутация: 10
По умолчанию

Вот рабочий вариант:
Код:
procedure AppendList (var AList: TStringList);
begin
  AList.Add('Это новая строка!');
end;
Используем:
Код:
procedure TForm4.btn1Click(Sender: TObject);
var
myList: TStringList;
begin
  myList:= TStringList.Create();
  AppendList (myList);
  mmo1.Text:= myList.Text;
  myList.Free;
end;
Ответить с цитированием
  #8  
Старый 12.08.2011, 20:29
trafbite trafbite вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от FlyInDream
Вот рабочий вариант:
Код:
procedure AppendList (var AList: TStringList);
begin
  AList.Add('Это новая строка!');
end;
Используем:
Код:
procedure TForm4.btn1Click(Sender: TObject);
var
myList: TStringList;
begin
  myList:= TStringList.Create();
  AppendList (myList);
  mmo1.Text:= myList.Text;
  myList.Free;
end;

Во! Это да. Но нужная именно функция, а не процедура Что бы она получала текст, выполняла с ним манипуляции и возвращала его
Ответить с цитированием
  #9  
Старый 12.08.2011, 20:31
FlyInDream FlyInDream вне форума
Прохожий
 
Регистрация: 10.08.2011
Сообщения: 24
Репутация: 10
По умолчанию

Код:
function AppendList (var AList: TStringList): TStringList;
begin
  AList.Add('Это новая строка!');
  Result:= AList;
end;

Код:
procedure TForm4.btn1Click(Sender: TObject);
var
myList: TStringList;
begin
  myList:= TStringList.Create();
//  AppendList (myList);
  mmo1.Text:= AppendList (myList).Text;
  myList.Free;
end;
Ответить с цитированием
  #10  
Старый 12.08.2011, 20:37
trafbite trafbite вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от FlyInDream
Код:
function AppendList (var AList: TStringList): TStringList;
begin
  AList.Add('Это новая строка!');
  Result:= AList;
end;

Код:
procedure TForm4.btn1Click(Sender: TObject);
var
myList: TStringList;
begin
  myList:= TStringList.Create();
//  AppendList (myList);
  mmo1.Text:= AppendList (myList).Text;
  myList.Free;
end;
Спасибо. Но нифига, все равно ругается:
Код:
function tform1.test(var list: tstringlist): tstringlist;
begin
list.Add('111');
result:=list;
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo2.Text:=test (memo1).Text;
end;

Код:
memo2.Text:=test (memo1).Text;
[Error] Unit1.pas(36): Types of actual and formal var parameters must be identical
Ответить с цитированием
  #11  
Старый 12.08.2011, 20:47
FlyInDream FlyInDream вне форума
Прохожий
 
Регистрация: 10.08.2011
Сообщения: 24
Репутация: 10
По умолчанию

У вас переменная list имеет тип TStringList, а вы пытаетесь в функцию запихнуть компонент memo1. Разве так можно?
Ответить с цитированием
  #12  
Старый 12.08.2011, 20:51
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Вопросы становятся все более интересными...
Если я тебя правильно понял
Код:
function test(AList: TStrings): String;
begin
  AList.Add('1111');
  Result := AList.Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Text := test(memo1.Lines);
end;

ЗЫ смысл такой процедуры не подскажешь?
__________________
Помогаю за Спасибо
Ответить с цитированием
  #13  
Старый 12.08.2011, 20:57
trafbite trafbite вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от FlyInDream
У вас переменная list имеет тип TStringList, а вы пытаетесь в функцию запихнуть компонент memo1. Разве так можно?
а почему нет?
Вот здесь например:
Код:
...
var
list: tstringlist;
...
begin
...
memo1.text:=list.text;
Все работает отлично.
Тип возвращаемого значения функции у меня тоже TStringlist. Передаю в нее я тоже TStringlist. Вроде все должно работать
Ответить с цитированием
  #14  
Старый 12.08.2011, 20:58
trafbite trafbite вне форума
Прохожий
 
Регистрация: 12.08.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от v1s2222
Вопросы становятся все более интересными...
Если я тебя правильно понял
Код:
function test(AList: TStrings): String;
begin
  AList.Add('1111');
  Result := AList.Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Text := test(memo1.Lines);
end;

ЗЫ смысл такой процедуры не подскажешь?
Не понял к кому вопрос относится Я такого кода не давал
Ответить с цитированием
  #15  
Старый 12.08.2011, 21:15
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Не совсем то, что ты думаешь:
Memo.Lines типа TStrings, а Memo.Text: String.
И объясни смысл процедуры.
Код:
function test(list: tstrings): tstrings;
begin
result:=tstrings.create;
result.Assign(list);
result.Add('111');
end;
__________________
Помогаю за Спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025