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

Вниз

Использование "не-com" интерфейсов   Найти похожие ветки 

 
Як   (2006-07-10 14:50) [0]

Мне казалось, что раньше получалось.... может я что-то неправильно указал? Кто-то подобное делал? Или это недоброе влияние C#?

 IXMLWinControl = interface
   function GetXmlNodeName:string;
   property XmlNodeName: string read GetXmlNodeName;
 end;

 TXMLEdit = class(TEdit,IXMLWinControl)
 protected
   function GetXmlNodeName:string;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TXMLEdit }

function TXMLEdit.GetXmlNodeName: string;
begin
 Result := "xxxxx";
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 XMLEdit : TXMLEdit;
begin
 XMLEdit := TXMLEdit.Create(Self);
 if XMLEdit is IXMLWinControl then
   MessageDlg((XMLEdit as IXMLWinControl).XmlNodeName , mtWarning, [mbOK], 0);
 XMLEdit.Free;
end;


Такое описание типов проглатывает без проблем. Однако функцию Button1Click() не компилит. Утверждает, что is и as использовать нельзя.


 
Як   (2006-07-10 15:38) [1]

Вопрос снимается....
Оказывается досточно написать.


var
 XMLEdit : TXMLEdit;
 pXMLWinControl : IXMLWinControl;
begin
 XMLEdit := TXMLEdit.Create(Self);
 pXMLWinControl := XMLEdit;
 MessageDlg(pXMLWinControl.XmlNodeName , mtWarning, [mbOK], 0);
 XMLEdit.Free;


 
Як   (2006-07-10 15:56) [2]

Вопрос возобновляется, т.к. в каждом конкретном случае, я не знаю, поддерживает, ли данный WinControl интерфейс IXMLWinControl.

А написать

var
XMLEdit : TWinControl;
pXMLWinControl : IXMLWinControl;
begin
XMLEdit := TXMLEdit.Create(Self);
pXMLWinControl := XMLEdit;
MessageDlg(pXMLWinControl.XmlNodeName , mtWarning, [mbOK], 0);
XMLEdit.Free;


Не дают
Хотелось бы иметь что-то типа

var
i : integer;
begin
 for i:=0 to ControlCount-1 do
   if Controls[i] is IXMLWinControl then
     MessageDlg((Controls[i] as IXMLWinControl).XmlNodeName , mtWarning, [mbOK], 0);
end;


Или это не возможно?


 
Джо ©   (2006-07-10 16:00) [3]

 if Controls[i].GetInterface(...) then


 
Як   (2006-07-10 19:12) [4]

ОК, спасибо, получилось



Страницы: 1 вся ветка

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
1-1150358274
def_
2006-06-15 11:57
2006.07.30
StringGrid и Hint


2-1152547267
Unknowing
2006-07-10 20:01
2006.07.30
Delphi+ Excel


1-1150560642
Avgust
2006-06-17 20:10
2006.07.30
таймер в сервисе или как его включить-выключить???


15-1151384777
Ega23
2006-06-27 09:06
2006.07.30
С Днём рождения! 27 июня


2-1152270164
RomanH
2006-07-07 15:02
2006.07.30
Таблица в Oracle