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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.051 c
2-1173787780
wahnsinng
2007-03-13 15:09
2007.04.01
Как можно сделать в LIstBox текст по центру.


3-1168319565
Vovan123+
2007-01-09 08:12
2007.04.01
Правильно запустить форму для проверки пароля


2-1173854080
JohnKorsh
2007-03-14 09:34
2007.04.01
Ищу RxLib для D7.


2-1173861867
Нуб
2007-03-14 11:44
2007.04.01
Ручная ли это процедура иль ее создал кто ?


2-1173288327
GrayFace
2007-03-07 20:25
2007.04.01
Чем плох статический импорт в interface?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский