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

Вниз

Как определить есть ли в переменной типа 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
6-1138425550
Spose
2006-01-28 08:19
2006.05.28
Скачать файл с интернета


2-1147196525
Zikmu
2006-05-09 21:42
2006.05.28
Thumbnails


4-1141714583
Новичоккк
2006-03-07 09:56
2006.05.28
Перехватить вызов функции из DLL


6-1138388766
KLAUS
2006-01-27 22:06
2006.05.28
Ошибка сценария Interner Explorer


2-1146793670
eclipse
2006-05-05 05:47
2006.05.28
Строки в DBGrid и не только