Главная страница
    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.015 c
15-1146402032
ArtemESC
2006-04-30 17:00
2006.05.28
C КПК в сеть...


2-1146014409
DimonS
2006-04-26 05:20
2006.05.28
MS SQL в ХР и 2000 Вмндоусе. Почему работает по разному?


1-1145672012
Александр123123
2006-04-22 06:13
2006.05.28
как определить на какой объект был совершен клик мыши


15-1146315761
GeserX
2006-04-29 17:02
2006.05.28
запись CD


2-1147458565
Succube
2006-05-12 22:29
2006.05.28
Сумма





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