Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
9 / 9 / 3
Регистрация: 28.02.2009
Сообщений: 66
1

переопределение виртуального метода

15.03.2009, 16:11. Просмотров 3122. Ответов 1
Метки нет (Все метки)

Существует родитель-класс
Delphi
1
2
3
4
5
6
TEditField = class(TObject)
    protected
      procedure ProcTextOut(Letter:Char; Color:TColor; BgColor: TColor; X,Y:integer); virtual; abstract;
    public
      procedure Update;
end;
На основе него пишу собственный класс, в котором хочу переопределить процедуру:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
type
  TInputBox = class(TEditField)
  private
    FCanvas : TCanvas;
    FVisible : boolean;
    FOnHide : TNotifyEvent;
  protected
    procedure ProcTextOut(Letter:Char; Color:TColor; BgColor: TColor; X,Y:integer); override; {<-- error}
  public
    property Visible : boolean read FVisible;
    property OnHide : TNotifyEvent read FOnHide write FOnHide;
    procedure Hide; virtual;
  end;
Пишет «declaration "ProcTextOut" differs from previous declaration».
Подскажате пожалуйста, что исправить необходимо.
P.S. класические примеры по этой теме смотрел, по ним если писать, все выходит. Когда сам начал писать, вылезла ошибка. Помогите найти и устранить...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2009, 16:11
Ответы с готовыми решениями:

Нужно перевести программу из паскаль в делфи . Сама программа этот реализация метода гауса и метода зейделя
Это все в паскале сделано. В программе идет в начале описание меня а аотом сама подпрограмма...

Сравнение метода Гаусса и метода простой итерации
сравнение эффективности различных методов решения систем линейных алгебраических уравнений.Метод...

создание виртуального прибора
доброго времени суток)) господа, очень прошу помочь.. задали написать в делфи виртуальный прибор,...

Чтение данных из виртуального COM-порта
Все привет. Суть дела. Мне человек пишет чтение и парсинг данных из виртуального СОМ-порта....

1
9 / 9 / 3
Регистрация: 28.02.2009
Сообщений: 66
17.03.2009, 18:46  [ТС] 2
[Lyrical]Нравится мне этот сайт почему-то. Поэтому данное сообщение не содержит матов и других проявлений нецензурной лексики, оскорблений и унижений в сторону отдельных лиц этого форума, так и форума в целом.[/Lyrical]

В первые встречаю ситуацию, когда на тему мою вообще сообщений нет. В случае, если вопрос простой, обычно отвечают либо посылают в «RTFM». При сложном вопросе что-то говорят либо предлагают, реже ничего не отвечают (но интуиция мне подсказывала, что вопрос мой не такой). При некорректно заданном вопросе обычно на всех форумах автора закидывают д... грязью. Так в чем же причина.

Долго искал ответ на поставленную задачу. В интернете и встроенной справке Делфи рассматривается пример с процедурой без аргументов. Я написал по аналогии, но опять же интуиция говорила, что в параметрах я допущу ошибку. Стал смотреть... встроенные коды модулей Forms, Classes, Graphics и другие. Ничего не понял, а что понял мне не пригодилось.

Наконец опять написал ту же структуру оверрайда абстрактного метода, но в упрощенном варианте. Все работает! О чудо, Бог ИТ сжалился надо мной и послал гениальную мысль проверить код вцелом, а не по частям, как я до этого анализировал и пытался исправить.

Теперь делюсь ответом: причиной столь странной ошибки было то, что во время создания классов, удобных мне, я старался минимизировать взаимодействие моих модулей со встроеными модулями. При этом необходимо было каким-то образом работать с цветами, для этого я продублировал объявление type TColor = -$FFFFFFF..$FFFFFFF. А потомка я уже жестко привязывал к форме, поэтому в модуле потомка были и Forms, и Graphics, и мой первычный модуль. Когда в потоме я объявляю метод procedure TInputBox.ProcTextOut(Letter:Char; Color:TColor; BgColor: TColor; X,Y:integer) (именно таким образом он воспринимается компилятором), TColor берется из Forms/Graphics (или чего там), а не из моего модуля, что существенно, несмотря на фактическое равенство деклараций. А так как метод переопределяется (override), компилятор сравнивает методы и, как следствие, аргументы разного для него типа, и выдает fail.

P.S. лучше б вы меня грязью закидали за неумение выкладывать код полностью, чем убить неделю на мозго... -истязания.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2009, 18:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Смена типа виртуального тома
Привет всем форумчанам. Вот появилась очередная задача. Есть виртуальный диск созданный...

Создание виртуального диска в ОЗУ
В нашей программе в функции загрузки iges-файлов 3D-модели многократно вызывается внешняя программа...

Переопределение виртуального метода
Нужно написать виртуальный метод в родительском классе , который находит площадь круга. Затем...

Ошибка создания виртуального метода?
Здравствуйте, хочу сделать так что бы программа(на андроид) рисовала по заданным координатам, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.