![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание компонентов... [D7, WinXP]
maxProg © (2007-02-28 17:43:00)Не получается создать свой компонент. В этом деле новичок и для примера решил создать tbuttonsound (tbutton). Инсталировал и вроде всё ОК, но при создание нового приложения (формы) мой компонент исчезает.....!!!!!!!! ПОЧЕМУ?блин :(
RASkov (2007-03-07 00:52:00) [1]> [25] Loginov Dmitry © (06.03.07 07:53)
Точно!
Садись - пять. :)
Loginov Dmitry (2007-03-06 07:53:00) [2]> А я уж подумал, что и впраду что-то серьезное....:)
Лишний код - это:
procedure TMySoundButton.SetDuration(const Value: Cardinal);
begin
if Value<>FDuration thenFDuration:=Value;
end;
Часто подобные проверки делают для ускорения работы программы. Здесь во всех случаях получится только замедление (ну никак не ускорение) из-за необходимости выполнения бессмысленной проверки.
RASkov (2007-03-06 01:56:00) [3]> [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)
Во загнул :)
Belorus (2007-03-06 00:16:00) [4]> Да просто лишний код. Вместо 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;
GrayFace (2007-03-05 20:54:00) [5]Да просто лишний код. Вместо write FFrequency.
RASkov (2007-03-05 01:57:00) [6]> [20] GrayFace © (04.03.07 19:09)
А что не так? Чесное слово не понял :(
GrayFace (2007-03-04 19:09:00) [7]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 А вообще, дело хорошее - приучает в исходники смотреть.
GeLLeR (2007-03-04 12:46:00) [8]GeLLeR © (04.03.07 12:45) [18]
Може ещё гденить
GeLLeR (2007-03-04 12:45:00) [9]>>Ещё вопрос -> где можно узнать о создании компонентов?
В гугле. На сайте torry.net
maxProg (2007-03-04 10:50:00) [10]Ещё вопрос -> где можно узнать о создании компонентов?
maxProg (2007-03-04 10:36:00) [11]Спасибо всем за помощь!!!!
RASkov (2007-03-03 01:56:00) [12]
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.
Набирал прямо здесь, возможны ошибки...
RASkov (2007-03-03 01:37:00) [13]> [13] maxProg © (03.03.07 00:22)
Q поубирай...
maxProg (2007-03-03 00:22:00) [14]Как создать "нормальный" компонент?
RASkov (2007-03-02 19:18:00) [15]> [11] maxProg © (02.03.07 18:09)
Дык ты его создал для CLX Application....
Elen была права ....
maxProg (2007-03-02 18:09:00) [16]Короче, текст кнопки....
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
......
Elen (2007-03-02 12:40:00) [17]Я имею ввиду на базе QStdCtrls
Elen (2007-03-02 12:39:00) [18]
> Ты этим постом не пояснил, а еще больше запутал.
А мне кажется что он сделал свой компонент на основе CLX. Поэтому и может пропадать.
RASkov (2007-03-02 12:32:00) [19]> [5] maxProg © (02.03.07 00:25)
Ты этим постом не пояснил, а еще больше запутал... :(
Аноним (2007-03-02 10:33:00) [20]
> но при создание нового приложения (формы)
так приложения или формы?
> но в св-вах он как бы есть...
В свойствах чего? Что значит "как бы"?
ничего не понятно