![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить есть ли в переменной типа TIcon сама иконка [D7, WinXP]
Leonardo © (2006-04-22 01:07:00)Как определить есть ли в переменной типа TIcon сама иконка
в конструкторе:
FIcon := TIcon.Create;
в деструкторе:
FreeAndNil(FIcon);
в коде:
if Assigned(FIcon) then
определяется положительно, хотя на самом деле там иконки нету... как мне определять есть ли она там?
Германн (2006-04-22 03:47:00) [1]
> Leonardo (22.04.06 03:12) [18]
>
> Германн, это смайлик...
>
Давай лучше замнём этот вопрос. "Смайлик" это или ещё что-нибудь - уже не твоя проблема!
А уж твою проблему, если хочешь, озвучь! Заново, но уже "детальнее"!
Leonardo (2006-04-22 03:12:00) [2]Германн, это смайлик...
Германн (2006-04-22 03:11:00) [3]
> Leonardo (22.04.06 03:00) [16]
>
> Германн, что Джо должен был заметить? Я что-то не понимаю.
> ..:)
>
Два последних символа в посте.
Или я тоже что-то не понимаю!
Leonardo (2006-04-22 03:00:00) [4]Германн, что Джо должен был заметить? Я что-то не понимаю...:)
Джо (2006-04-22 02:58:00) [5]> [13] Германн © (22.04.06 02:53)
>
> > Джо © (22.04.06 02:48) [12]
>
>
> Серёг. А ты :) в конце поста Leonardo (22.04.06 02:35)
> [11] заметил?
У меня уже глаза слипаются, для того, чтобы я мог разглядеть подобные мелочи. Я сейчас как старый китаец: сонно щурусь, покачиваюсь на стуле и говорю прописные (а иногда и сомнительные) истины. Смайлик присовокупляю :-)
Leonardo (2006-04-22 02:56:00) [6]Спасибо за совет :)
Германн (2006-04-22 02:53:00) [7]
> Джо © (22.04.06 02:48) [12]
Серёг. А ты :) в конце поста Leonardo (22.04.06 02:35) [11] заметил?
Джо (2006-04-22 02:48:00) [8]> 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 создается только "по требованию".
Возможно, немного путанно изложил, но, надеюсь, основные мысли будут поняты :)
Leonardo (2006-04-22 02:35:00) [9]я это понимаю прекрасно... просто если будет что Assigned(FIcon) = false и начнем проверять FIcon.Empty, может AV выскочить или еще там чтонибудь? :)
Джо (2006-04-22 02:19:00) [10]Подсказка 2: Assigned знать не знает (и не должен) ни о каких "иконках".
Джо (2006-04-22 02:18:00) [11]> [7] Leonardo (22.04.06 02:05)
> в самой обыкновенной... если есть иконка то отобразить ее
> :)
Прочитай, пожалуйста, пост[1], второе предложение.
Это нужно понять, усвоить и запомнить. Тогда и на свой вопрос сможешь ответить сам :)
Подсказка:
if Assigned(Something) равносильно if Something <> nil.
Германн (2006-04-22 02:05:00) [12]
> Leonardo (22.04.06 02:00) [5]
>
> Спасибо! А как вы думаете стоит перед FIcon.Empty сначала
> проверять на Assigned(FIcon)?
Вообще-то зависит от многих факторов. Но уж точно не помешает.Имхо.
Leonardo (2006-04-22 02:05:00) [13]в самой обыкновенной... если есть иконка то отобразить ее :)
Джо (2006-04-22 02:02:00) [14]> А как вы думаете стоит перед FIcon.Empty сначала проверять
> на Assigned(FIcon)?
Смотря в какой ситуации.
Leonardo (2006-04-22 02:00:00) [15]Спасибо! А как вы думаете стоит перед FIcon.Empty сначала проверять на Assigned(FIcon)?
Джо (2006-04-22 01:55:00) [16]Em pty, sorry.
Джо (2006-04-22 01:54:00) [17]Emty (англ.) — пустой.
Leonardo (2006-04-22 01:41:00) [18]Что-то никак не мог понять почему FIcon.Empty не работает, как оказалось оно наоборот дает значение, т.е. если есть иконка значит false а если нету то true. Это правильно?
Джо (2006-04-22 01:12:00) [19]Нужно вызвать
FIcon.Empty.
Assigned всего лишь проверяет, не равна ли ссылка nil.