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

Вниз

Как определить есть ли в переменной типа TIcon сама иконка   Найти похожие ветки 

 
Leonardo   (2006-04-22 01:07) [0]

Как определить есть ли в переменной типа TIcon сама иконка

в конструкторе:
FIcon := TIcon.Create;

в деструкторе:
FreeAndNil(FIcon);

в коде:
if Assigned(FIcon) then

определяется положительно, хотя на самом деле там иконки нету... как мне определять есть ли она там?


 
Джо ©   (2006-04-22 01:12) [1]

Нужно вызвать FIcon.Empty.

Assigned всего лишь проверяет, не равна ли ссылка nil.


 
Leonardo   (2006-04-22 01:41) [2]

Что-то никак не мог понять почему FIcon.Empty не работает, как оказалось оно наоборот дает значение, т.е. если есть иконка значит false а если нету то true. Это правильно?


 
Джо ©   (2006-04-22 01:54) [3]

Emty (англ.) — пустой.


 
Джо ©   (2006-04-22 01:55) [4]

Empty, sorry.


 
Leonardo   (2006-04-22 02:00) [5]

Спасибо! А как вы думаете стоит перед FIcon.Empty сначала проверять на Assigned(FIcon)?


 
Джо ©   (2006-04-22 02:02) [6]

> А как вы думаете стоит перед FIcon.Empty сначала проверять
> на Assigned(FIcon)?

Смотря в какой ситуации.


 
Leonardo   (2006-04-22 02:05) [7]

в самой обыкновенной... если есть иконка то отобразить ее :)


 
Германн ©   (2006-04-22 02:05) [8]


> Leonardo   (22.04.06 02:00) [5]
>
> Спасибо! А как вы думаете стоит перед FIcon.Empty сначала
> проверять на Assigned(FIcon)?


Вообще-то зависит от многих факторов. Но уж точно не помешает. Имхо.


 
Джо ©   (2006-04-22 02:18) [9]

> [7] Leonardo   (22.04.06 02:05)
> в самой обыкновенной... если есть иконка то отобразить ее
> :)

Прочитай, пожалуйста, пост[1], второе предложение.
Это нужно понять, усвоить и запомнить. Тогда и на свой вопрос сможешь ответить сам :)

Подсказка:
if Assigned(Something) равносильно if Something <> nil.


 
Джо ©   (2006-04-22 02:19) [10]

Подсказка 2: Assigned знать не знает (и не должен) ни о каких "иконках".


 
Leonardo   (2006-04-22 02:35) [11]

я это понимаю прекрасно... просто если будет что Assigned(FIcon) = false и начнем проверять FIcon.Empty, может AV выскочить или еще там чтонибудь? :)


 
Джо ©   (2006-04-22 02:48) [12]

> Assigned(FIcon) = false и начнем проверять FIcon.Empty,
> может AV выскочить или еще там чтонибудь? :)

Вот поэтому я и сказал, что все зависит от ситуации, в которой будет вызываться код if not FIcon.Empty then. Откуда я знаю, где у тебя создается экземпляр TIcon, куда и при каких условиях передается ссылка на него и т.п.

Это очень важно, потому, что по большому счету, даже проверка if Assigned не дает совершенно никакой гарантии, что FIcon содержит ссылку на экземпляр TIcon. Не веришь, вот примеры:

1.
FIcon.Free;
if Assigned(FIcon) then
 // вернет True, хотя объект уже уничтожен.

2.
var
 FIcon: TIcon;
...
FIcon := TIcon(TButton.Create);
или
FIcon := TIcon(123);

if not FIcon.Empty
// вызовет ошибку,
// хотя FIcon не равно nil
// но и не содержит ссылку на экземпляр TIcon


Нужно стараться строить код так, чтобы содержимое FIcon нельзя было "случайно" испортить. В тех же местах, где это невозможно, вполне допустима проверка на Assigned. Так же как и в том случае, когда nil в FIcon что-то означает в логике работы приложения, например, когда Icon создается только "по требованию".

Возможно, немного путанно изложил, но, надеюсь, основные мысли будут поняты :)


 
Германн ©   (2006-04-22 02:53) [13]


> Джо ©   (22.04.06 02:48) [12]


Серёг. А ты :) в конце поста Leonardo   (22.04.06 02:35) [11] заметил?


 
Leonardo   (2006-04-22 02:56) [14]

Спасибо за совет :)


 
Джо ©   (2006-04-22 02:58) [15]

> [13] Германн ©   (22.04.06 02:53)
>
> > Джо ©   (22.04.06 02:48) [12]
>
>
> Серёг. А ты :) в конце поста Leonardo   (22.04.06 02:35)
> [11] заметил?

У меня уже глаза слипаются, для того, чтобы я мог разглядеть подобные мелочи. Я сейчас как старый китаец: сонно щурусь, покачиваюсь на стуле и говорю прописные (а иногда и сомнительные) истины. Смайлик присовокупляю :-)


 
Leonardo   (2006-04-22 03:00) [16]

Германн, что Джо должен был заметить? Я что-то не понимаю...:)


 
Германн ©   (2006-04-22 03:11) [17]


> Leonardo   (22.04.06 03:00) [16]
>
> Германн, что Джо должен был заметить? Я что-то не понимаю.
> ..:)
>


Два последних символа в посте.
Или я тоже что-то не понимаю!


 
Leonardo   (2006-04-22 03:12) [18]

Германн, это смайлик...


 
Германн ©   (2006-04-22 03:47) [19]


> Leonardo   (22.04.06 03:12) [18]
>
> Германн, это смайлик...
>

Давай лучше замнём этот вопрос. "Смайлик" это или ещё что-нибудь - уже не твоя проблема!

А уж твою проблему, если хочешь, озвучь! Заново, но уже "детальнее"!



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

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

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1147420555
Ling
2006-05-12 11:55
2006.05.28
в чём разница?


4-1141560528
Игорь Степанов
2006-03-05 15:08
2006.05.28
Удаление сообщений о движении мыши


1-1145450930
Alex_C
2006-04-19 16:48
2006.05.28
Почему прерывается выполнение Thread?


2-1147445279
SummerSwan
2006-05-12 18:47
2006.05.28
TFileStream


4-1141297063
MaxLMN
2006-03-02 13:57
2006.05.28
RichEdit





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