Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

Использование "не-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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.015 c
2-1152599023
Yegorchic
2006-07-11 10:23
2006.07.30
Как определить количество помеченных (checked) items в ListView?


15-1152026484
Fl@sh
2006-07-04 19:21
2006.07.30
сайт


2-1152204596
SergP.
2006-07-06 20:49
2006.07.30
О порядке деструкции объектов которые создаются автоматически


3-1148570840
Karburator
2006-05-25 19:27
2006.07.30
Крякозябры в компоненте DBGridEh


2-1152204201
Ezorcist
2006-07-06 20:43
2006.07.30
Общий вопрос по работе процедур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский