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

Вниз

Смена области видимости метода   Найти похожие ветки 

 
gelios ©   (2003-10-23 12:05) [0]

Имеется некий класс, содержащий ряд методов в секции public.
Как малой кровью перенести ряд методов в секцию published у потомка этого класса? (Со свойствами все просто...)


 
Anatoly Podgoretsky ©   (2003-10-23 12:10) [1]

А зачем их в published, понятно если бы в public


 
Amoeba   (2003-10-23 12:12) [2]

Вопрос достойный орешника!


 
gelios ©   (2003-10-23 12:22) [3]

потому что для published создается rtti, а для public нет


 
Reindeer Moss Eater ©   (2003-10-23 12:29) [4]

Малая кровь зависит от типов переносимых в published свойств


 
Reindeer Moss Eater ©   (2003-10-23 12:35) [5]

А вот как методы туда перенести и главное зачем?

потому что для published создается rtti, а для public нет

А можно существующий пример published методов?


 
gelios ©   (2003-10-23 12:47) [6]

[i]Малая кровь зависит от типов переносимых в published свойств[/i]
Имхо от типов свойств тут не зависит. Просто имена свойст переопределяются в published секции.

[i]А можно существующий пример published методов?[/i]
А дизайнер все обработчики событий помещяет в published


 
Reindeer Moss Eater ©   (2003-10-23 12:50) [7]

Имхо от типов свойств тут не зависит. Просто имена свойст переопределяются в published секции.

К счастью это только твое ИМХО

А дизайнер все обработчики событий помещяет в published

Обработчики событий помещаются к исходный текст.
А сами события это свойства, а не методы.


 
Reindeer Moss Eater ©   (2003-10-23 12:58) [8]

Кроме того ОБРАБОТЧИКИ СОБЫТИЙ не принадлежат классу в котором определены сами события.

Просто имена свойст переопределяются в published секции.

TMyLabel = class(TLabel)
private
protected
public
MyCaption : string;
MyTag : integer;
published
end;

Для тренировки попробуй написать наследника у которого MyCaption и MyTag будут published


 
gelios ©   (2003-10-23 13:02) [9]

Событие - это свойство
Обработчик события - метод.

Проведите такой эксперимент.
Создайте обработчик любого события и ручками перенесите его описание в секцию public, а потом в инспекторе объектов попробуйте его выбрать...


 
Anatoly Podgoretsky ©   (2003-10-23 13:11) [10]

gelios © (23.10.03 12:47) [6]
Никаких методов он туда не помещает, зато там находятся свойство процедурного типа.

gelios © (23.10.03 13:02) [9]
А ты не про форму здесь говоришь?


 
gelios ©   (2003-10-23 13:19) [11]

да, про форму
то есть procedure FormCreate(Sender: TObject);
это свойство процедурного типа, а не метод?

Reindeer Moss Eater © (23.10.03 12:58) [8]
MyCaption : string;
и
MyTag : integer;
есть поле, а не свойство или метод.


 
Zacho ©   (2003-10-23 13:24) [12]


> gelios © (23.10.03 13:19) [11]
> да, про форму
> то есть procedure FormCreate(Sender: TObject);

Это - метод. А вот OnFormCreate - именно свойство процедурного типа.


 
gelios ©   (2003-10-23 13:33) [13]

ну так про onFormCreate я разговор не веду.


 
Reindeer Moss Eater ©   (2003-10-23 13:46) [14]

Просто имена свойст переопределяются в published секции.

Ну вот тебе свойства. Попробуй написать наследника у которого свойства MyCaption и MyTag будут паблишед.

TMyLabel = class(TLabel)
private
fMyCaption : string;
fMyTag : integer;
protected
public
property MyCaption:string read fMyCaption write fMyCaption;
property MyTag : integer read fMyTag write fMyTag;
published
end;

Еще раз повторяю ОБРАБОТЧИКИ событий не принадлежат самому классу и не будут принадлежать твоему усовершенствованому наследнику класса.
Поэтому переопределением класса ты ничего не получишь.


 
Zacho ©   (2003-10-23 13:53) [15]

2 gelios © : Лучше напиши, что конкретно ты хочешь сделать и зачем.


 
gelios ©   (2003-10-23 13:55) [16]

TMyLabelEx=class(TMyLabel)
published
property MyCaption;
property MyTag;
end;


 
Reindeer Moss Eater ©   (2003-10-23 14:12) [17]

gelios

Пример со свойствами в прошел только потому, что есть редакторы для типов этих свойств (string и integer).
Стоит изменить типы на другие и сразу станет ясно что перенос свойств в паблишед все же сильно зависит от типов данных этих свойств.


 
gelios ©   (2003-10-23 14:15) [18]

есть некий скриптовый движок, который автоматом получает доступ к published методам и свойствам. Для доступа к public свойствам и методам нужно обучать этот движок, причем код получается громоздкий. Вот я и хочу узнать, есть ли способ перенести методы в published, кроме как в переопределяя их в потомке и потом в реализации вызывать предка...


 
Reindeer Moss Eater ©   (2003-10-23 14:17) [19]

есть ли способ перенести методы в published, кроме как в переопределяя их в потомке и потом в реализации вызывать предка...

То что ты хочешь поместить в паблишед не является членом класса над которым ты колдуешь.


 
gelios ©   (2003-10-23 14:30) [20]

это как? с каких это пор определенный в классе метод не является членом этого класса?


 
Reindeer Moss Eater ©   (2003-10-23 14:31) [21]

это как? с каких это пор определенный в классе метод не является членом этого класса?

Ты пару часов твердил, что хочешь видеть обработчики событий, а не методы


 
gelios ©   (2003-10-23 14:35) [22]

посмотри внимательно первый пост...


 
Reindeer Moss Eater ©   (2003-10-23 14:38) [23]

Я вот это внимательно изучил:

Проведите такой эксперимент.
Создайте обработчик любого события и ручками перенесите его описание в секцию public, а потом в инспекторе объектов попробуйте его выбрать...


 
Reindeer Moss Eater ©   (2003-10-23 14:47) [24]

Обработчики это тоже методы. Но методы другого класса.

А ты пытаешься путем изменения фамилий имен и пола пассажиров автобуса изменить скорость и цвет автобуса


 
gelios ©   (2003-10-23 14:53) [25]

это к тому, что дизайнер все пишет в published...


 
Reindeer Moss Eater ©   (2003-10-23 14:58) [26]

это к тому, что дизайнер все пишет в published...

И хочешь изменить дизайнер написанием нового класса?
Я правильно понял?


 
gelios ©   (2003-10-23 15:11) [27]

нет, я не хочу менять дизайнер, я хочу узнать, есть ли способ проще, чем этот

type
tc1=class
public
procedure p1;
end;
tc2=class(tc1);
published
procedure p1;
end;
procedure tc1.p1;
begin
....
end;
procedure tc2.p1;
begin
tc1.p1;
end;


 
Reindeer Moss Eater ©   (2003-10-23 15:14) [28]

"А в чем "простота", брат?"

Можно ведь сделать CTRL+X CTRL+V в исходном классе например


 
Zelius ©   (2003-10-23 17:45) [29]


> gelios ©

а почему не стал использовать стандартный MS Script Host? Или прикрути IDispatch, впринципе для твоей задачи как раз.


 
Amoeba   (2003-10-23 18:05) [30]

Н-да-а! Автору вопроса все как об стенку горох...


 
gelios ©   (2003-10-24 07:09) [31]

Можно ведь сделать CTRL+X CTRL+V в исходном классе например
Это если есть исходники...
Amoeba (23.10.03 18:05) [30]
В каком месте смеяться?


 
Amoeba   (2003-10-24 11:01) [32]

gelios © (24.10.03 07:09) [31]
Читая любой твой пост



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

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

Наверх




Память: 0.54 MB
Время: 0.015 c
1-8354
Ig
2003-10-23 11:09
2003.11.03
Существует ли такая возможность: получить handle папки или файла


1-8361
TolikM
2003-10-22 16:22
2003.11.03
установка XML программно


1-8472
Mishenka
2003-10-23 18:39
2003.11.03
Как распечатать на принтере содержимое Memo?


9-8250
Познователь
2003-04-22 18:54
2003.11.03
Кто поможет? DirectInput организация управления.


14-8626
REA
2003-10-13 15:32
2003.11.03
DCOM, COM+