Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

Создание компонентов...   Найти похожие ветки 

 
maxProg ©   (2007-02-28 17:43) [0]

Не получается создать свой компонент. В этом деле новичок и для примера решил создать tbuttonsound (tbutton). Инсталировал и вроде всё ОК, но при создание нового приложения (формы) мой компонент исчезает.....!!!!!!!! ПОЧЕМУ?блин :(


 
RASkov   (2007-02-28 18:02) [1]

> [0] maxProg ©   (28.02.07 17:43)
ПОЧЕМУ?

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


 
maxProg ©   (2007-02-28 23:27) [2]

type
 TButtonSound = class(TButton)
 private
   { Private declarations }
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   { Published declarations }
     procedure Click; override;
 end;

procedure Register;

implementation

procedure TButtonSound.Click;
begin
 Beep;
end;

..........это всё..........


 
RASkov   (2007-02-28 23:51) [3]

type
TButtonSound = class(TButton)
private
  { Private declarations }
protected
  { Protected declarations }
public
  { Public declarations }
  procedure Click; override;
published
  { Published declarations }
end;

procedure Register;

implementation

procedure TButtonSound.Click;
begin
inherited;
Beep;
end;

Зачем метод Click вынес в паблишед?


 
RASkov   (2007-03-01 00:00) [4]

> Инсталировал и вроде всё ОК, но при создание нового приложения
> (формы) мой компонент исчезает.....!!!!!!!! ПОЧЕМУ?блин
> :(

Более подробней напиши, как и куда он у тебя исчезает. Тот код который ты привел, криминально вроде бы ничего не содержит, и в том варианте который ты привел, тоже должен работать... т.е. исчезает он по другим причинам. имхо.


 
maxProg ©   (2007-03-02 00:25) [5]

просто пропадает с панели компонентов, но в св-вах он как бы есть...


 
Kolan ©   (2007-03-02 09:51) [6]

> procedure Register;

А где реализация этой процедуры?


 
Аноним   (2007-03-02 10:33) [7]


> но при создание нового приложения (формы)


так приложения или формы?

> но в св-вах он как бы есть...


В свойствах чего? Что значит "как бы"?

ничего не понятно


 
RASkov   (2007-03-02 12:32) [8]

> [5] maxProg ©   (02.03.07 00:25)

Ты этим постом не пояснил, а еще больше запутал... :(


 
Elen ©   (2007-03-02 12:39) [9]


> Ты этим постом не пояснил, а еще больше запутал.

А мне кажется что он сделал свой компонент на основе CLX. Поэтому и может пропадать.


 
Elen ©   (2007-03-02 12:40) [10]

Я имею ввиду на базе QStdCtrls


 
maxProg ©   (2007-03-02 18:09) [11]

Короче, текст кнопки....

unit QButtonSound;

interface

uses
 SysUtils, Classes, QControls, QStdCtrls;

type
 TButtonSound = class(TButton)
 private
   { Private declarations }
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   { Published declarations }
     procedure Click; override;
 end;

procedure Register;

implementation

procedure TButtonSound.Click;
begin
 Beep;
end;

procedure Register;
begin
 RegisterComponents("Standard", [TButtonSound]);
end;

end.

.....
При инсталяции компонента форма исчезает, но компонент отображается, после создания нового приложения, или вкл. отображения формы он пропадает навсегда...но отображается в COMPONENT/CONFIGURE PALETTE
......


 
RASkov   (2007-03-02 19:18) [12]

> [11] maxProg ©   (02.03.07 18:09)

Дык ты его создал для CLX Application....
Elen была права ....


 
maxProg ©   (2007-03-03 00:22) [13]

Как создать "нормальный" компонент?


 
RASkov   (2007-03-03 01:37) [14]

> [13] maxProg ©   (03.03.07 00:22)

Q поубирай...


 
RASkov   (2007-03-03 01:56) [15]

unit SoundButton;

interface

uses
Windows, SysUtils, Classes, Controls, StdCtrls;

type
TMySoundButton = class(TButton)
private
  FFrequency: Cardinal;
  FDuration: Cardinal;
  procedure SetFrequency(const Value: Cardinal);
  procedure SetDuration(const Value: Cardinal);
  { Private declarations }
protected
  { Protected declarations }
public
  constructor Create(AOwner: TComponent); override;
  procedure Click; override;  
  { Public declarations }
published
  { Published declarations }
  property Frequency: Cardinal read FFrequency write SetFrequency default 1000;
  property Duration: Cardinal read FDuration write SetDuration default 20;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Standard", [TMySoundButton]);
end;

constructor TMySoundButton.Create(AOwner: TComponent);
begin
 inherited;
 FFrequency:=1000;
 FDuration:=20;
end;

procedure TMySoundButton.SetFrequency(const Value: Cardinal);
begin
 if Value<>FFrequency then FFrequency:=Value;
end;

procedure TMySoundButton.SetDuration(const Value: Cardinal);
begin
 if Value<>FDuration then FDuration:=Value;
end;

procedure TMySoundButton.Click;
begin
 inherited;
 Windows.Beep(FFrequency, FDuration);
end;

end.

Набирал прямо здесь, возможны ошибки...


 
maxProg ©   (2007-03-04 10:36) [16]

Спасибо всем за помощь!!!!


 
maxProg ©   (2007-03-04 10:50) [17]

Ещё вопрос -> где можно узнать о создании компонентов?


 
GeLLeR ©   (2007-03-04 12:45) [18]

>>Ещё вопрос -> где можно узнать о создании компонентов?
В гугле. На сайте torry.net


 
GeLLeR ©   (2007-03-04 12:46) [19]

GeLLeR ©   (04.03.07 12:45) [18]
Може ещё гденить


 
GrayFace ©   (2007-03-04 19:09) [20]

RASkov   (03.03.07 1:56) [15]
procedure TMySoundButton.SetFrequency(const Value: Cardinal);
begin
if Value<>FFrequency then FFrequency:=Value;
end;

procedure TMySoundButton.SetDuration(const Value: Cardinal);
begin
if Value<>FDuration then FDuration:=Value;
end;

Гы. Как же ты так?

maxProg ©   (04.03.07 10:50) [17]
Ещё вопрос -> где можно узнать о создании компонентов?

Я начал создавать компоненты с модификации модуля Spin.pas  А вообще, дело хорошее - приучает в исходники смотреть.


 
RASkov   (2007-03-05 01:57) [21]

> [20] GrayFace ©   (04.03.07 19:09)

А что не так? Чесное слово не понял :(


 
GrayFace ©   (2007-03-05 20:54) [22]

Да просто лишний код. Вместо write FFrequency.


 
Belorus ©   (2007-03-06 00:16) [23]

> Да просто лишний код. Вместо write FFrequency.

Ничё ты в моде не понимаешь.

function SetRepeatState(State : Boolean): Boolean;
begin
 Result:=True;
 If State<>FState then
 begin
   If State=True then FState:=True else
   If State=False then FState:=False else
   If (State<>True)and(Fstate<>False) then Showmessage("Я индус, и работаю в Редмонде");
 end else Result:=False;
end;


 
RASkov   (2007-03-06 01:56) [24]

> [22] GrayFace ©   (05.03.07 20:54)

А я уж подумал, что и впраду что-то серьезное....:)

Зато можно ограничить(проверить на "правильность"), например, длительность сигнала
procedure TMySoundButton.SetDuration(const Value: Cardinal);
begin
 if Value>1000 then ...(дофига)....
 else if Value<>FDuration then FDuration:=Value;
end;


Но здесь, наверное, уместнее делать так:
(Ограничение "ручного" изменения свойства)

type
 TDuration = 1..1000;

 TMySoundButton = class(TButton)
 private
   FFrequency: Cardinal;
   FDuration: TDuration;
....
 published
....
   property Duration: TDuration read FDuration write FDuration default 20;
 end;


От "программного" - лучше всетаки SetXXXX


> [23] Belorus ©   (06.03.07 00:16)

Во загнул :)


 
Loginov Dmitry ©   (2007-03-06 07:53) [25]

> А я уж подумал, что и впраду что-то серьезное....:)


Лишний код - это:

procedure TMySoundButton.SetDuration(const Value: Cardinal);
begin
 if Value<>FDuration then FDuration:=Value;
end;


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


 
RASkov   (2007-03-07 00:52) [26]

> [25] Loginov Dmitry ©   (06.03.07 07:53)

Точно!
Садись - пять. :)



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

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.03 c
4-1163717621
Dmitry_177
2006-11-17 01:53
2007.04.01
Часы на API


4-1163413288
--= Eagle =--
2006-11-13 13:21
2007.04.01
Узнать марку привода


15-1173259369
Оззя
2007-03-07 12:22
2007.04.01
DelphiGFX умер?


2-1173110211
pasha star
2007-03-05 18:56
2007.04.01
RichEdit add lines down


15-1172177924
ДжекиМайер
2007-02-22 23:58
2007.04.01
АвтоРаспаковка *.nws чем ?