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

Вниз

Как воспользоваться функцией   Найти похожие ветки 

 
alex-drob ©   (2005-12-13 23:09) [0]

Если у функции возращаемое значение Tstrings, Tbitmap и т.д.
Как вызвать такую функцию?

Например есть функция:

function f:TStrings;
begin
Result.Add("Стр 1");
Result.Add("Стр 2");
end;


Как её вызвать?

Пробовал:

f:=TStrings.Create;
...
f.Free;


не получается.


 
версия для печати   (2005-12-13 23:14) [1]

Ты шутишь чтоли?


 
неважно   (2005-12-13 23:15) [2]


function f:TStrings;
begin
 Result.Add("Ñòð 1");
 Result.Add("Ñòð 2");
end;

procedure TForm1.Button1Click(Sender: TObject);
var Q:TStringList;
begin
 Q:=TStringList.Create;
 Q.AddStrings(f);
 Q.Free;
end;


 
Gero_   (2005-12-13 23:15) [3]


> f:=TStrings.Create;

Так делать нельзя. Используй наследников TStrings, у которых перекрыты абстрактные методы.


 
alex-drob ©   (2005-12-13 23:40) [4]

А можно пример как записать в Memo результат выполнения этой функции.


 
Карелин Артем ©   (2005-12-13 23:48) [5]

memo.lines.text:=CreatedList.text;


 
Petr V.Abramov   (2005-12-13 23:58) [6]

> alex-drob ©   (13.12.05 23:09)  

> Например есть функция:
> function f:TStrings;
> begin
>   Result.Add("Стр 1");
>   Result.Add("Стр 2");
> end;

Ничего, кроме Access Violation такая функция не даст, поскольку Result в ней не создается. А если его в ней создать (что не проблема), то при использовании такой функции нужно будет постоянно помнить, что созданный ею объект нужно где-то снаружи уничтожить.

В общем, не советовал бы я писать такие функции. Плохой это стиль. Ужасный просто.


 
alex-drob ©   (2005-12-14 00:02) [7]


> нужно где-то снаружи уничтожить.


А как это cделать? По этому я и не создавал в ней Result.


 
Юрий Зотов ©   (2005-12-14 00:09) [8]

> alex-drob ©   (14.12.05 00:02) [7]

Что ж, если-таки  есть непреодолимое желание следовать дурному стилю, то так:

function F: TStrings;
begin
 Result := TStringList.Create;
 Result.Add("Стр 1");
 Result.Add("Стр 2");
end;

В программе:

with F do
try
 Memo1.Lines.Assign(Strings);
 ...
finally
 Free
end;

или так:

var
 Str: TStrings;
begin
 Str: = F;
 try
   Memo1.Lines.Assign(Str.Strings);
   ...
 finally
   Str.Free
 end
end;


 
alex-drob ©   (2005-12-14 00:18) [9]


> Что ж, если-таки  есть непреодолимое желание следовать дурному
> стилю, то так:

Я не писал такую функцию в программе, просто пришло в голову и я решил поинтерисоваться как это можно сделать.

Спасибо всем за помощь!


 
Карелин Артем ©   (2005-12-14 00:39) [10]


> Юрий Зотов ©   (14.12.05 00:09) [8]

Вопрос по стилю: хорошо ли использовать переменную, у которой название совпадает с стандартной функцией?


 
Petr V.Abramov   (2005-12-14 00:46) [11]

> Карелин Артем ©   (14.12.05 00:39) [10]

Не думаю, что это хорошо. Ничего страшного, конечно, не случится, но зачем вносить в исходники никому не нужную путаницу, если можно совершенно спокойно придумать для переменной другое имя?


 
DrPass ©   (2005-12-14 00:55) [12]


> Вопрос по стилю: хорошо ли использовать переменную, у которой
> название совпадает с стандартной функцией?

Плохо


 
Карелин Артем ©   (2005-12-14 01:15) [13]


> Карелин Артем ©   (14.12.05 00:39) [10]

Поправка малюсенькая: процедурой, не функцией ))



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
14-1134585040
Igorek
2005-12-14 21:30
2006.01.08
Ретрансляция интернет радиостанций по локалке


4-1130759002
Reset
2005-10-31 14:43
2006.01.08
В OLE32.dll есть курсор с именем 2 ...


3-1131906942
Layner
2005-11-13 21:35
2006.01.08
Помогите узнать в ADOQuery - Mode (состояние)


1-1133969906
sia
2005-12-07 18:38
2006.01.08
TStringGrid суммирующая строка


2-1134732601
Kot
2005-12-16 14:30
2006.01.08
Работа с cxSpreadSheet.