Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Не создается динамически компонент в форме   Найти похожие ветки 

 
tf_kiev ©   (2004-11-27 19:57) [0]

В ходе программы должен динамически создаваться компонент в форме, а именно поле редактирования

procedure TForm1.FormCreate(Sender: TObject);
begin
myEdit := TNkEdit.Create(self);
myEdit.Parent := self;
myEdit.Left := 8;
myEdit.Top := 64;
end;


 
ssk ©   (2004-11-27 19:59) [1]

myEdit := TNkEdit.Create(Form1);
myEdit.Parent := Form1;


 
OneFragLeft ©   (2004-11-27 20:00) [2]

А есть такая строчка:
myEdit:TNkEdit;?


 
OneFragLeft ©   (2004-11-27 20:01) [3]

var myEdit:TEdit;
begin
myEdit := TEdit.Create(self);
myEdit.Parent := self;
myEdit.Left := 8;
myEdit.Top := 64;
end;
Так работает.


 
Anatoly Podgoretsky ©   (2004-11-27 20:34) [4]

А значение Height и width чему равны?


 
begin...end ©   (2004-11-27 20:36) [5]


> [4] Anatoly Podgoretsky ©   (27.11.04 20:34)

Тогда уж можно спросить, чему равно значение Visible :-)


 
tf_kiev ©   (2004-11-27 20:44) [6]

unit NkEdit1;

interface

uses
 Windows, Messages, SysUtils,
 Classes, Graphics, Controls,
 Forms, Dialogs, StdCtrls;

type
 TNkEdit = class(TEdit)
 private
   FNumb: single;
   function GetNumb: single;
   procedure SetNumb(value: single);
 protected
   procedure KeyPress(var Key: Char);
   override;
 public
   { Public declarations }
 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
   inherited Create(AOwner);
 end;

function TNkEdit.GetNumb: single;
 begin
   try
     Result:=StrToFloat(text); except
       on EConvertError do begin
     Result:=0; text:=" ";
   end;
 end;
end;

procedure TNkEdit.SetNumb(Value: single);
 begin
   FNumb:=Value;
   Text:=FloatToStr(value);
 end;

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);
end;

end.


 
Anatoly Podgoretsky ©   (2004-11-27 20:47) [7]

Это выкинуть constructor TNkEdit.Create(AOwner: TComponent);, ничего не делает.
Ушел от ответа на вопрос про Height, Width, Visible


 
tf_kiev ©   (2004-11-27 20:55) [8]

Height, Width, Visible указаны, но не помагает


 
Anatoly Podgoretsky ©   (2004-11-27 21:04) [9]

В коде это не наблюдается и значения не известны.


 
OneFragLeft ©   (2004-11-27 21:04) [10]

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.



Это же из учебника по Дельфи.


 
ssk ©   (2004-11-27 21:06) [11]

>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:09) [12]

ssk ©   (27.11.04 21:06) [11]
А вы куда-то выходили?
То же самое: [3];
Только не NkEdit, а Edit


 
Anatoly Podgoretsky ©   (2004-11-27 21:09) [13]

Наряду с выше сказаным я также сомневаюсь, что это правомочно делать в конструкторе Create формы, она еще не до конца сконструирована.


 
begin...end ©   (2004-11-27 21:10) [14]


> [12] OneFragLeft ©   (27.11.04 21:09)

Нет, не то же самое, в [3] без uses. Ожидать можно чего угодно.


 
OneFragLeft ©   (2004-11-27 21:13) [15]

Ну да...


 
ssk ©   (2004-11-27 21:14) [16]

>OneFragLeft
>А вы куда-то выходили?

да. в чат. ;-)


 
OneFragLeft ©   (2004-11-27 21:15) [17]

Я так и не понял, что хотел сделать автор вопроса.
То ли он пытался динамически создать компонент на форме, то ли вообще создать компонент на основе TEdit.


 
begin...end ©   (2004-11-27 21:17) [18]


> То ли он пытался динамически создать компонент на форме,
> то ли вообще создать компонент на основе TEdit.

Ставлю на первый вариант.


 
ssk ©   (2004-11-27 21:18) [19]

тоже на первый


 
tf_kiev ©   (2004-11-27 21:22) [20]

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


 
begin...end ©   (2004-11-27 21:23) [21]


> [20] tf_kiev ©   (27.11.04 21:22)

Так а обычный TEdit у Вас получается создать?


 
tf_kiev ©   (2004-11-27 21:24) [22]

динамически создать компонент на форме...


 
begin...end ©   (2004-11-27 21:26) [23]


> [22] tf_kiev ©   (27.11.04 21:24)

Вот я и спрашиваю: у Вас получается динамически создать обычный экземпляр TEdit на форме?


 
OneFragLeft ©   (2004-11-27 21:29) [24]

А вы случаем не запускаете  код из учебника?
Это же компонент, его устанавливать надо.
Естественно он работать нге будет.


 
ssk ©   (2004-11-27 21:36) [25]

>tf_kiev

смотри почту


 
KSergey ©   (2004-11-28 13:43) [26]

> OneFragLeft ©   (27.11.04 21:29) [24]
> А вы случаем не запускаете  код из учебника?
> Это же компонент, его устанавливать надо.
> Естественно он работать нге будет.

Если создаем в run-time, а не "кидаем" на форму - нифига регистрировать не надо.

> Anatoly Podgoretsky ©   (27.11.04 21:09) [13]
> Наряду с выше сказаным я также сомневаюсь, что это правомочно
> делать в конструкторе Create формы, она еще не до конца
> сконструирована.

Это что еще за новости???!! ;)

Автору.
Чей-то утаиваете. Судя по коду все должно работать.


 
begin...end ©   (2004-11-28 13:47) [27]

А где, собственно, автор вопроса?

> [25] ssk ©   (27.11.04 21:36)

Что Вы ему там такое отправили, что его до сих пор нет?


 
OneFragLeft ©   (2004-11-28 13:49) [28]

>begin...end ©   (28.11.04 13:47) [27]

Показали ему FAQ :D


 
KSergey ©   (2004-11-28 14:01) [29]

> OneFragLeft ©   (28.11.04 13:49) [28]
> Показали ему FAQ :D

Но что именно?Я никак не могу увидеть проблем в приведенном коде...

> ssk ©   (27.11.04 19:59) [1]
> myEdit := TNkEdit.Create(Form1);
> myEdit.Parent := Form1;

А чем self не прикольно? Вроде тут равнофиолетово должно получаться...



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

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.045 c
1-1101740956
Wolffgang
2004-11-29 18:09
2004.12.12
Взаимосвязь между числами


1-1101475987
Dmitry_04
2004-11-26 16:33
2004.12.12
Что значит $ в объявлении констант типа integer?


3-1100265294
Newbie_In_DB
2004-11-12 16:14
2004.12.12
Загрузка значений в DBCombobox


8-1094910180
InfMag
2004-09-11 17:43
2004.12.12
Форматы данных


1-1101674331
Bobby Digital
2004-11-28 23:38
2004.12.12
Код виндовса ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский