Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2

TWebBrowser -> OleObject - проверить является ли элемент NULL [Delphi, Windows]


Edgar_Wine   (01.10.12 05:56[20]

А вы пробовали? Ну и что же здесь неправильно?:

procedure TForm1.Button8Click(Sender: TObject);
var Element: OleVariant;
begin
if Element<>nil then ShowMessage('OK');
end;



>> [Error] Incompatible types


sniknik ©   (01.10.12 09:43[21]

> nil соместим с любым ссылочным типом.
вариант не ссылка, он структура 16 байт длинной, а ссылка только 4 байта (в 32 разрядной оси).

+
nil <> null
см.прям тут
sniknik ©   (29.09.12 11:54) [14]
varEmpty    = $0000; { vt_empty        0 }
varNull     = $0001; { vt_null         1 }

будет портить последовательность.


sniknik ©   (01.10.12 10:12[22]

для наглядности, не значение, а структура (иногда включает и значение)
procedure TForm1.Button1Click(Sender: TObject);
var
 v, iv, id: Variant;
 i: IUnknown;
 d: IDispatch;

 function VarStrucToStr(v: Variant): string;
 begin
   result:= StringOfChar('@', 32);
   BinToHex(@v, @result[1], 16);
 end;

begin
 iv:= i;
 id:= d;
 ShowMessage('Empty - '+VarStrucToStr(v)+' Null - '+VarStrucToStr(Null)+' IUnknown - '+VarStrucToStr(iv)+' IDispatch - '+VarStrucToStr(id)+#13#10+
             'Byte - '+VarStrucToStr(5)+' ShortInt - '+VarStrucToStr(-5)+' ...');
end;


Edgar_Wine   (01.10.12 21:40[23]

Спасибо! =)
В общем через VarIsClear() работает как часы.


sniknik ©   (01.10.12 22:02[24]

непонятно только почему
> Пытался проверить на NULL этими функциями: VarIsEmpty(), VarIsNull() - без результатов. =(
"без результатов". т.к.
> Показывает $00000000, а толку?
это оно и есть. а VarIsClear просто "более расширенная" вариация проверки нулевого значения для дополнительных типов... диспатч например, судя по
> "EVariantTypeCastError -> Could not convert variant of type (Dispatch) into type (String)".
должно быть оно... т.е типа $09000000


sniknik ©   (01.10.12 22:09[25]

а... отладчик показывает "чисто значение", если не взять по дампу памяти.


Edgar_Wine   (02.10.12 01:49[26]

Ваш пример показал что id == $09000000000000000000000000000000
А отладчик показывает id == $00000000 - он видимо откуда-то из "середины" кусок показывает. Может надо настроить где-то чтоб целиком показывал 16 байт?


Edgar_Wine   (02.10.12 02:19[27]

Для моей поделки на TWebBrowser в принципе хватило условия на VarIsClear(Element), а есть ли смысл подобного (в общем случае)?:

if (VarIsClear(Element) or VarIsEmpty(Element) or VarIsNull(Element)) then
     ShowMessage('Error with "Element" #0011001')
else
     ShowMessage(Element.innerText);


sniknik ©   (02.10.12 07:49[28]

> а есть ли смысл подобного (в общем случае)?:
в общем это вред без смысла, т.к. твое сообщение вообще не информативно, в отличие от ошибки полученной от обращения без проверки...

вон там смори
sniknik ©   (29.09.12 11:54) [14]
в VarIsClear есть
Result := (VType = varEmpty) or
то же что в VarIsEmpty, т.е дополнительная его проверка бессмысленна. это в частном.


Edgar_Wine   (03.10.12 16:09[29]

Сообщение? Про "#0011001" чтоль? Так это я просто, для примеру, обработка отсутствия так сказать. =)
А с VarIsEmpty это да, оплошал.. Будет думать ещё, спасибо вам огромное!


Страницы: 1 2 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо