Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизА можно переписать метод у статического компонента ? Найти похожие ветки
← →
sg78 (2002-12-17 16:58) [0]например у мя:
TForm1 = class(TForm)
Label1: TLabel;
end;
а я хочу переписать метод Refresh у Label1
Это как подменить адрес метода в таблице методов, если это вообще возможно ?
← →
Skier (2002-12-17 17:02) [1]>sg78
Refresh вызывает Repaint,
а Repaint - виртуальный метод.
Может отсюда стоит плясать ?:)
← →
sg78 (2002-12-17 17:04) [2]Ну я это и имел ввиду
А как, конкретно ?
← →
Skier (2002-12-17 17:09) [3]Ну, примерно так :
TYourLabel = class(TLabel);
public
procedure Repaint; override;
end; //TYourLabel
//............
TYourLabel.Repaint;
begin
//your code goes here...
inherited Repaint; //
//and your code goes here...
end;
Это имелось в виду ?
← →
sg78 (2002-12-17 17:21) [4]Угу это, но у моего Label класс: (Label1: TLabel) и моя Label вызовет стандартный Repaint, а как аго заменить на TYourLabel.Repaint ? Вот это непонятно.
Label.repaint:=TYourLabel().Repaint, бррр, бред так ведь нельзя
← →
Skier (2002-12-17 17:24) [5]>sg78
А зачем тебе всё это ?
Цель какая ?
Может быть есть более удобный способ...
← →
Anatoly Podgoretsky (2002-12-17 17:26) [6]А TLabel заменить на TMyLabel религия не позволяет?
И действительно расскажи о цели, а то может быть ты как нормальный герой идешь в обход.
← →
sg78 (2002-12-17 17:29) [7]Цель обучение, честно.
Просто я тута у Вас узнал что так можно свойства "переоткрывать", например:
TYourLabel(Label1).СкрытоеСвойствоРодителя.
А вот с методами такого не знаю. А такие случаи появляются и почти всегда обходятся другими решениями, но я подумал а вдруг можно сделать проще ? (как со свойствами).
← →
Skier (2002-12-17 17:32) [8]>sg78
> TYourLabel(Label1).СкрытоеСвойствоРодителя
Это ты всё правильно понял, (только не Скрытое, а Защищённое - protected, и кстати с методами всё тоже самое...), НО...ни Refresh, ни Repaint не являются Защищёнными,поэтому, всё что ты хочешь сделать - алогично ! :))
← →
sg78 (2002-12-17 17:36) [9]алогично - это здорово, но не совсем логично. Я просто не усек конструкцию, как конструкцию в таком случае записать ?
TYourLabel(Label1).Refresh:=КакойтоМойМетод ?
← →
Skier (2002-12-17 17:54) [10]>sg78
> TYourLabel(Label1).Refresh:=КакойтоМойМетод
Никак.
Разве что... только такую штуку провернуть с WndProc(...);
← →
sg78 (2002-12-17 17:55) [11]Ау. Я конечно понимаю, что это не мультик: "Мишки Гамми спешат на помощь", но может кто-нить доподскажет ? А то вопрос утонет.
← →
sg78 (2002-12-17 18:17) [12]А ведь существует таблица виртуальных методов. По идее может "просто" подменяется адрес метода (где его взять), а может ...
А ладно, спасибо за ответы.
Skier © персональное спасибо.
← →
Fantasist (2002-12-17 19:15) [13]
> А ведь существует таблица виртуальных методов. По идее может
> "просто" подменяется адрес метода (где его взять), а может
> ...
Можно конечно, и подменить адрес метода, а точнее лучше переписать указатель на таблицу - извлечь его место положение можно воспользовавшись констанотой System.vmtMethodTable(смещение до указателя на vmt). Но делать это крайне не реккомендуется, разве только что с целью обучения.
Кстати, вызвать метод своего класса с экземпляром чужого можно взятием статического адреса:
var
m:procedure of object;
begin
TMethod(m).Code:=@TMyLabel.Repaint;
TMethod(m).Data:=Lable1;
m;
end;
но это тоже не стоит делать в реальных программах.
← →
Бурундук (2002-12-17 19:36) [14]>Fantasist © (17.12.02 19:15
...System.vmtMethodTable(смещение до указателя на vmt)
Вообще-то сия константа указывает на смещение указателя
на RTTI-таблицу published методов относительно VMT.
Указатель же на VMT - просто ClassType.
>sg78 (17.12.02 18:17)
Рекомендую почитать чего-нибудь по ООП, в
частности, про виртуальные методы -
поскольку у тебя в голове сейчас полный сумбур.
Это не наезд, просто объяснять что-либо
человеку, не владеющему терминологией, очень трудно.
← →
Fantasist (2002-12-17 19:45) [15]
> Указатель же на VMT - просто ClassType.
Хорошо. Имеется ввиду TObject.ClassType.
← →
sg78 (2002-12-18 14:38) [16]У мя в голове мысли, а объять все ..., и потом, н-р, дети включают телевизор, совершенно ничего не зная о принципах его функционирования - это им и не нужно, а так еще раз спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c