Главная страница
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.039 c
1-1150358274
def_
2006-06-15 11:57
2006.07.30
StringGrid и Hint


15-1151502757
Cerberus
2006-06-28 17:52
2006.07.30
Прогноз профессий.


1-1150451941
oleg444
2006-06-16 13:59
2006.07.30
Не могу отладить DLL


15-1151556036
Ega23
2006-06-29 08:40
2006.07.30
С Днём рождения! 29 июня


15-1150939130
vidiv
2006-06-22 05:18
2006.07.30
Высшее образование