|
Вопрос # 2 372/ вопрос открыт / |
|
Здравствуйте, эксперты!
Помогоите решить всё тотже вопрос...выдает ошибку при установке на форме незнаю что и как но я уже на нескольких версиях Делфи и нескольких машинах тестил свой новый компонент от SpeedButton, сразу не получалось скомпилить а когда получилось выдаёт ошибку. ПОМОГИТЕ КРОВЬ ИЗ НОСУ НА ПОНЕДЕЛЬНИК НАДО СДАТЬ КУРСАК!!!! Унит прикрепил может кто отладит запакуйте сразу в пакет. ПЛИЗ HELP!!!!
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим-
-
- [50126B51]{vcl120.bpl } Graphics.TFont.SetColor (Line 2375, "Graphics.pas" + 1) + $0
- [037616B6]{Package1.bpl} Linkspeedbutton.THyperLinkSpeedButton + $1A
- [215478FF]{delphicoreide120.bpl} CompPalMgr.TComponentPalettePageItemDelegate.CreateComponent (Line
2472, "CompPalMgr.pas" + 2) + $7
- [20BB70EE]{designide120.bpl} ComponentDesigner.TComponentRoot.DoCreateComponent (Line 2304,
"ComponentDesigner.pas" + 10) + $17
- [20BB6B22]{designide120.bpl} ComponentDesigner.TComponentRoot.CreateComponent (Line 2165,
"ComponentDesigner.pas" + 1) + $1C
- [215446E0]{delphicoreide120.bpl} CompPalMgr.TPalettePageItem.Execute (Line 1232,
"CompPalMgr.pas" + 4) + $1E
- [2086E8F2]{coreide120.bpl} ToolFrm.TToolForm.DoItemExecute (Line 2524, "ToolFrm.pas" + 2)
+ $5
- [2086B21D]{coreide120.bpl} ToolFrm.TToolForm.PaletteButtonClicked (Line 1182,
"ToolFrm.pas" + 13) + $4
- [5022F4E5]{vcl120.bpl } CategoryButtons.TCategoryButtons.DoItemClicked (Line 1827,
"CategoryButtons.pas" + 13) + $A
- [5022F29D]{vcl120.bpl } CategoryButtons.TCategoryButtons.MouseUp (Line 1750,
"CategoryButtons.pas" + 13) + $C
- [50006EA8]{rtl120.bpl } System.@CallDynaInst (Line 10189, "System.pas" + 3) + $0
- [501D1564]{vcl120.bpl } Controls.TControl.DoMouseUp (Line 6884, "Controls.pas" + 2) + $1D
- [501D15E1]{vcl120.bpl } Controls.TControl.WMLButtonUp (Line 6897, "Controls.pas" + 9) +
$6
- [501D0BFA]{vcl120.bpl } Controls.TControl.WndProc (Line 6640, "Controls.pas" + 91) + $6
- [501D5287]{vcl120.bpl } Controls.TWinControl.WndProc (Line 9334, "Controls.pas" + 136) +
$6
- [50006DDA]{rtl120.bpl } System.@IsClass (Line 10084, "System.pas" + 1) + $8
- [501FBAD0]{vcl120.bpl } Forms.TApplication.DispatchAction (Line 10786, "Forms.pas" + 6) +
$F
- [501F0F88]{vcl120.bpl } Forms.TCustomForm.WndProc (Line 3902, "Forms.pas" + 191) + $5
- [501D0820]{vcl120.bpl } Controls.TControl.Perform (Line 6418, "Controls.pas" + 10) + $8
- [501FBAF5]{vcl120.bpl } Forms.TApplication.DispatchAction (Line 10789, "Forms.pas" + 9) +
$A
- [501F9384]{vcl120.bpl } Forms.TApplication.WndProc (Line 9212, "Forms.pas" + 87) + $E
- [501D4B93]{vcl120.bpl } Controls.TWinControl.IsControlMouseMsg (Line 9119, "Controls.pas"
+ 1) + $9
- [501D5287]{vcl120.bpl } Controls.TWinControl.WndProc (Line 9334, "Controls.pas" + 136) +
$6
- [501D49A0]{vcl120.bpl } Controls.TWinControl.MainWndProc (Line 9063, "Controls.pas" + 3)
+ $6
- [50057E04]{rtl120.bpl } Classes.StdWndProc (Line 12723, "Classes.pas" + 8) + $0
- [2086AEBC]{coreide120.bpl} ToolFrm.TToolForm.PaletteHook (Line 1054, "ToolFrm.pas" + 14) +
$1E
- [50057E04]{rtl120.bpl } Classes.StdWndProc (Line 12723, "Classes.pas" + 8) + $0
- [501F9EAB]{vcl120.bpl } Forms.TApplication.ProcessMessage (Line 9613, "Forms.pas" + 23) +
$1
- [501F9EEE]{vcl120.bpl } Forms.TApplication.HandleMessage (Line 9643, "Forms.pas" + 1) +
$4
- [501FA219]{vcl120.bpl } Forms.TApplication.Run (Line 9780, "Forms.pas" + 26) + $3
- [004259D2]{bds.exe } bds.bds (Line 196, "" + 7) + $7
-
 |
Вопрос задал: ubyou (статус: Посетитель)
Вопрос отправлен: 1 февраля 2009, 00:35
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Amidamaru
Здравствуйте, ubyou!
Ну конечно у тебя будет ошибка.
Ошибка в конструктуре. Он сам по себе просто создаёт объект и всё!
Твой Create хоть и использует дерективу override но в самом конструкторе нигде не вызывается контруктор класса-предка. Т.е. у тебя сам компонент как таковой не создётся. И ты ещё в конструкторе изменяешь свойство Font, которое вообщето никто ещё и не создал даже.
Конструктор создаёт объект - это его единственное отличие от обычного метода, поэтому и в конструкторе нужно вызывать
inherited Create(AOwner); {или прсто inherited;}
причем с самого начала, а не как в методе Click.
PS Если для создания "заготовки" методов использовать ctrl+shift+C , то в заготовках конструкторов первой строчкой будет inherited; а в деструкторах это будет последней строчкой
 |
Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 1 февраля 2009, 01:02
Оценка за ответ: 5
Комментарий к оценке: Действительно настоящая помощь!!! Спасибо!!!
|
Мини-форум вопроса
Всего сообщений: 14; последнее сообщение — 1 февраля 2009, 02:13; участников в обсуждении: 2.
|
Amidamaru (статус: 4-ый класс), 1 февраля 2009, 01:09 [#1]:
PPS кровь из носу затыкают ваточкой и завтра ещё воскресенье 
PPPS и не надо особо сильно волноваться, от этого все беды и несчастья. У меня например 2 недели назад было 7 долгов... и я был совершенно спокоен (чем сильно удивлял одногрупников ^^), поэтому у меня их щас осталось 2 (долга) и я получил продление сессии
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:21 [#2]:
Спасибо за ответ)) но мог бы ты исправить прикреплённый мой юнит ??
|
|
Amidamaru (статус: 4-ый класс), 1 февраля 2009, 01:42 [#3]:
Там исправлять то нечего...
constructor THyperLinkSpeedButton.Create(AOwner: TComponent);
begin
Inherited;
Font.Color:=clBlue;
Font.Style:=[fsBold];
end;
и всё... я вроде больше ошибок не нашел
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:42 [#4]:
Всё Работает!!! А как же свойства тогда изменить типа шрифт где и что нужно вписать???
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:44 [#5]:
Спасибо пока отправил вы уже написали)))
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:46 [#6]:
А новое событие не подскажите какое ещё можно добавить и что вписать???
|
|
Amidamaru (статус: 4-ый класс), 1 февраля 2009, 01:48 [#7]:
inherited; просто вызывает метод класса-предка, как и любой другой метод. на нём выполнение не прекращается. Просто в конструкторе он должен быть первым, чтобы сначала выполнились конструкторы классов-предков, а потом уже изменять свойства и т.п.
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:53 [#8]:
Мне по заданию нужно добавить хотя бы одно свойство и одно событие что вы мне подскажите???
|
|
Amidamaru (статус: 4-ый класс), 1 февраля 2009, 01:54 [#9]:
Ну первое что приходит в голову - OnWebLink которое происходит при открытии ссылки
...
property OnWebLink:TNotifyEvent read FOnWebLink write FOnWebLink; {тут нажимаем ctrl+shift+C}
...
procedure THyperLinkSpeedButton.Click;
begin
if FWebLink <> '' then
begin
ShellExecute(0,'open',PChar(FWebLink),nil,nil,SW_SHOW);
if assigned(FOnWebLink) then
FOnWebLink(Self);
end;
inherited Click;
end;
...
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:55 [#10]:
тоесть метод а не событие
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:55 [#11]:
ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 01:57 [#12]:
Я только непонял что препод имела ввиду под новым методом
|
|
ubyou (статус: Посетитель), 1 февраля 2009, 02:13 [#14]:
Ок обязательно зайду))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|