Текущий архив: 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.47 MB
Время: 0.009 c