Форум: "Основная";
Текущий архив: 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