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

Вниз

Все строки функции выполнятся?   Найти похожие ветки 

 
alex-drob   (2005-06-04 23:51) [0]

Если в функции написать

Icon:=TIcon.Create;
Icon.Handle:=ExtractIcon(Handle,PChar(ini.ReadString(TS.Items[i],"Icon","")),0);
Result:=Icon;
Icon.Free;


Последняя строка выполнится или нет?


 
lookin ©   (2005-06-04 23:58) [1]

А почему нет?


 
alex-drob   (2005-06-05 00:03) [2]

Я просто не знаю когда функция завершается,когда до End доходит или result


 
lookin ©   (2005-06-05 00:08) [3]

Ну, как мне кажется, функция завершается все-таки по окончании ее описания, т.е. до End


 
alex-drob   (2005-06-05 00:11) [4]

Спасибо!


 
Германн ©   (2005-06-05 00:14) [5]

Последняя строка выполнится гарантировано только, если включить ее в try...finally.


 
alex-drob   (2005-06-05 01:15) [6]

Последняя строка выполняется, но функция возвращает Result только по оканчании выполнения последней строки. Возникает ошибка, я понимаю что это из за того что icon уже уничтожен. Можно ли как нибудь уничтожить объект после выполнения функции.


 
lookin ©   (2005-06-05 01:21) [7]

А не проще Result после применеия уничтожать?


 
alex-drob   (2005-06-05 01:25) [8]

А как?


 
lookin ©   (2005-06-05 02:31) [9]

MyIcon.Free


 
DrPass ©   (2005-06-05 02:32) [10]

На самом деле ты вообще зря этот код в функцию засунул. Где тебе надо иконку использовать, там и пиши
Icon:=TIcon.Create;
Icon.Handle:=ExtractIcon(Handle,PChar(ini.ReadString(TS.Items[i],"Icon","")),0);
А уже после того, как использовал - Icon.Free


 
Abessalom   (2005-06-05 04:41) [11]


> DrPass ©   (05.06.05 02:32) [10]
..зря этот код в функцию засунул...

Есть неопределенное количество функций (Ворланд), результатом выполнения которых является объект, созданный внутри такой функции. Примеров можно найти много, NewItem, NewMenu... Не вижу аргументов...


 
Abessalom   (2005-06-05 04:54) [12]


> Abessalom   (05.06.05 04:41) [11]

Если конечно за аргументы принять то, что функция, похоже, не получает аргументов, и наверняка вызывается один раз... тогда да, лучше именно так.

По сути вопроса: все строки функции всегда выполняются, вплоть до завершения (end), выхода (Exit) или возникновения исключения. Оптимизатор также может чуть "подрезать" ваш код, если он по смыслу пуст.


 
злобная танька   (2005-06-05 10:03) [13]


> Abessalom   (05.06.05 04:54) [12]

ну, goto ещё :)


 
Abessalom   (2005-06-05 10:10) [14]


> злобная танька   (05.06.05 10:03) [13]

:)
Пусть еще.) Гото новхере)


 
begin...end ©   (2005-06-05 10:20) [15]

> alex-drob

Функция:

function CreateMyIcon: TIcon;
begin
 Result := TIcon.Create;
 try
   Result.Handle := ExtractIcon(...)
 except
   Result.Free;
   raise
 end
end.


Использование:

var
 Icon: TIcon;
begin
 Icon := CreateMyIcon;
 try
   // Использование Icon
 finally
   Icon.Free
 end
end.


 
alex-drob   (2005-06-05 17:26) [16]


> DrPass ©   (05.06.05 02:32) [10]


Вопрос не именно в этой функции, я привел просто пример. Меня интересует если чтото создать в функции, то потом как удалить.


> begin...end ©   (05.06.05 10:20) [15]

Спасибо! Попробую.


 
icWasya ©   (2005-06-06 10:25) [17]

Abessalom   (05.06.05 04:41) [11]

>Есть ... количество функций , результатом выполнения которых является объект, созданный внутри такой функции. Примеров можно найти много, NewItem, NewMenu

Как правило, объекты, созданные внутри таких функций, сразу же попадают в какой нибудь список, ответственный за время жизни этих объектов



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

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

Наверх




Память: 0.48 MB
Время: 0.043 c
14-1117462017
Fessio
2005-05-30 18:06
2005.06.29
хелп плизз с методом резолюций


4-1115201596
balamutik
2005-05-04 14:13
2005.06.29
Получение текста из адресной строки explorera


3-1116567937
yk
2005-05-20 09:45
2005.06.29
Выборка с учётом не существования записей


1-1117955736
Motion
2005-06-05 11:15
2005.06.29
Проверка значения переменной


1-1118133587
LOP
2005-06-07 12:39
2005.06.29
Компоненет к доступу MS Accses





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