![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не создается динамически компонент в форме [D7, WinXP]
tf_kiev © (2004-11-27 19:57:00)В ходе программы должен динамически создаваться компонент в форме, а именно поле редактирования
procedure TForm1.FormCreate(Sender: TObject);
begin
myEdit := TNkEdit.Create(self);
myEdit.Parent := self;
myEdit.Left := 8;
myEdit.Top := 64;
end;
KSergey (2004-11-28 14:01:00) [1]> OneFragLeft © (28.11.04 13:49) [28]
> Показали ему FAQ :D
Но что именно?Я никак не могу увидеть проблем в приведенном коде...
> ssk © (27.11.04 19:59) [1]
> myEdit := TNkEdit.Create(Form1);
> myEdit.Parent := Form1;
А чем self не прикольно? Вроде тут равнофиолетово должно получаться...
OneFragLeft (2004-11-28 13:49:00) [2]>begin...end © (28.11.04 13:47) [27]
Показали ему FAQ :D
begin...end (2004-11-28 13:47:00) [3]А где, собственно, автор вопроса?
> [25] ssk © (27.11.04 21:36)
Что Вы ему там такое отправили, что его до сих пор нет?
KSergey (2004-11-28 13:43:00) [4]> OneFragLeft © (27.11.04 21:29) [24]
> А вы случаем не запускаете код из учебника?
> Это же компонент, его устанавливать надо.
> Естественно он работать нге будет.
Если создаем в run-time, а не "кидаем" на форму - нифига регистрировать не надо.
> Anatoly Podgoretsky © (27.11.04 21:09) [13]
> Наряду с выше сказаным я также сомневаюсь, что это правомочно
> делать в конструкторе Create формы, она еще не до конца
> сконструирована.
Это что еще за новости???!! ;)
Автору.
Чей-то утаиваете. Судя по коду все должно работать.
ssk (2004-11-27 21:36:00) [5]>tf_kiev
смотри почту
OneFragLeft (2004-11-27 21:29:00) [6]А вы случаем не запускаете код из учебника?
Это же компонент, его устанавливать надо.
Естественно он работать нге будет.
begin...end (2004-11-27 21:26:00) [7]
> [22] tf_kiev © (27.11.04 21:24)
Вот я и спрашиваю: у Вас получается динамически создать обычный экземпляр TEdit на форме?
tf_kiev (2004-11-27 21:24:00) [8]динамически создать компонент на форме...
begin...end (2004-11-27 21:23:00) [9]
> [20] tf_kiev © (27.11.04 21:22)
Так а обычный TEdit у Вас получается создать?
tf_kiev (2004-11-27 21:22:00) [10]Да, это из учебника, просто интересует именно такой принцип работы программы, а у меня почему то не выходит...
ssk (2004-11-27 21:18:00) [11]тоже на первый
begin...end (2004-11-27 21:17:00) [12]
> То ли он пытался динамически создать компонент на форме,
> то ли вообще создать компонент на основе TEdit.
Ставлю на первый вариант.
OneFragLeft (2004-11-27 21:15:00) [13]Я так и не понял, что хотел сделать автор вопроса.
То ли он пытался динамически создать компонент на форме, то ли вообще создать компонент на основе TEdit.
ssk (2004-11-27 21:14:00) [14]>OneFragLeft
>А вы куда-то выходили?
да. в чат. ;-)
OneFragLeft (2004-11-27 21:13:00) [15]Ну да...
begin...end (2004-11-27 21:10:00) [16]
> [12] OneFragLeft © (27.11.04 21:09)
Нет, не то же самое, в [3] без uses. Ожидать можно чего угодно.
Anatoly Podgoretsky (2004-11-27 21:09:00) [17]Наряду с выше сказаным я также сомневаюсь, что это правомочно делать в конструкторе Create формы, она еще не до конца сконструирована.
OneFragLeft (2004-11-27 21:09:00) [18]ssk © (27.11.04 21:06) [11]
А вы куда-то выходили?
То же самое: [3];
Только не NkEdit, а Edit
ssk (2004-11-27 21:06:00) [19]>tf_kiev
uses NkEdit;
procedure TForm1.FormCreate(Sender: TObject);
var
myEdit: TNkEdit;
begin
myEdit := TNkEdit.Create(self);
myEdit.Parent := self;
myEdit.Left := 8;
myEdit.Top := 64;
end;
OneFragLeft (2004-11-27 21:04:00) [20]tf_kiev © (27.11.04 20:44) [6]
Не, ну сразу надо было сказать, что компонент создаёте.
А я смотрю-код знакомый:)
unit NkEdit;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TNkEdit = class(TEdit)
private
FNumb: single; // число, находящееся в поле редактирования
// Это описание функции доступа
// и процедуры установки поля FNumb
function GetNumb: single;
procedure SetNumb(value:single);
protected
procedure KeyPress(var Key: Char);
override;
public
published
constructor Create(AOwner:TComponent);
override; property Numb : single
// свойство компонента
read GetNumb write SetNumb;
end;
procedure Register;
implementation
// процедура регистрации компонента
procedure Register;
begin
RegisterComponents('Samples',[TNkEdit]);
end;
// конструктор компонента
constructor TNkEdit.Create(AOwner:TComponent);
begin
// don't forget to call the ancestors' constructor
inherited Create(AOwner);
end;
// функция доступа к полю FNumb
function TNkEdit.GetNumb:single;
begin
try // поле Text может быть пустым Result:=StrToFloat(text); except
on EConvertError do begin
Result:=0; text: =' ' ;
end;
end;
end;
// процедура записи в поле FNumb
procedure TNkEdit.SetNumb(Value:single);
begin
FNumb:=Value;
Text:=FloatToStr(value);
end;
// процедура обработки события KeyPress
procedure TNkEdit.KeyPress(var key:char) ;
begin
case key of
'0'.. '9', #8, #13: ;
'-': if Length(text)<>0 then key:=#0;
else
if not ((key = DecimalSeparator) and
(Pos(DecimalSeparator,text)=0))
then key:= #0;
end;
inherited KeyPress(key);
// вызов процедуры обработки события
// OnKeyPress родительского класса
end;
end.
Это же из учебника по Дельфи.