Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поддерживает ли об'ект интерфейс ? [D7, WinXP]


Страницы:   1 2

val_5 ©   (2005-03-11 04:53:00) 

Как определить поддерживает ли форма заданный интерфейс ?
Например :                                            

type
 IFormDB = interface
   ['{31E10702-B99C-42B9-BD95-3DE0EB1E27B2}']
   function DataSource: TDataSource;
   ...
 end;

 TFormDB = class(TForm, IFormDB)
   function DataSource: TDataSource;
   ...
 end;

...

if < Screen.Forms[I] поддерживает IFormDB > then
 ShowMessage( (Screen.Forms[I] as IFormDB).DataSource.DataSet.Name );


Что написать вместо "< Screen.Forms[I] поддерживает IFormDB >" ?


Poirot   (2005-03-11 10:06:00) [21]

to [5]потомучто F1!!!
Смысл другой - в данном случае 'as' вызывает QueryInterface
т.е [4] оба варианта впринципе одинаковы!


Virgo_Style   (2005-03-11 10:02:00) [22]


> if (Screen.Forms[I] as IFormDB) <> nil then ...

А почему не .. IS .. ?


WondeRu   (2005-03-11 09:48:00) [23]

WondeRu ©   (11.03.05 9:46) [3]
пропустил чуть-чуть

if Screen.Forms[I].QueryInterface(StringToGUID('31E10702-B99C-42B9-BD95-3DE0EB1E27B2'), obj) = E_NoInterface then
ShowMessage( (obj as IFormDB).DataSource.DataSet.Name );


еще можно проще сделать проверку
if (Screen.Forms[I] as IFormDB) <> nil then ...


WondeRu   (2005-03-11 09:46:00) [24]

if QueryInterface(StringToGUID('31E10702-B99C-42B9-BD95-3DE0EB1E27B2'), obj) = E_NoInterface then
ShowMessage( (Screen.Forms[I] as IFormDB).DataSource.DataSet.Name );


Fay   (2005-03-11 05:52:00) [25]

if Supports(Screen.Forms[I], IFormDB) then


Defunct   (2005-03-11 05:41:00) [26]

а нельзя ли зарезервировать сообщение, ответив на которое форма уведомит о поддержке интерфейса?

if SendMessage( Screen.Forms[i].Handle, WM_INTERFACEQUERY, 0, 0) = <Ваш, заранее определенный ответ > then
  ShowMessage( (Screen.Forms[I] as IFormDB).DataSource.DataSet.Name );


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо