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

Вниз

Не могу разобраться с компонентом на основе кнопки   Найти похожие ветки 

 
Rinat   (2003-06-16 14:04) [0]

1 Создал коспонент на основе кнопки

unit Avtomat7;

interface

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

type
TAvtomat7 = class(TWinControl)
private
FButton: TButton;
FNumber : TLabel;

protected
function GetOnButtonClick: TNotifyEvent;
procedure SetOnButtonClick(Value: TNotifyEvent);
procedure SetTextFNumber(Value:String);
function GetTextFNumber : String;

public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;

published

property OnButtonClick: TNotifyEvent read GetOnButtonClick write SetOnButtonClick;
property Number: String read GetTextFNumber write SetTextFNumber;

end;
procedure Register;

implementation
constructor TAvtomat7.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FButton := TButton.Create(Self);
FButton.Height := 270; //
FButton.Width := 80;
FButton.Parent := Self;

FNumber := TLabel.Create(Self);
FNumber.Parent := FButton;
FNumber.Width :=32;
FNumber.Height := 14;
FNumber.Caption:= "N";
FNumber.Left := FButton.Left + 5;
FNumber.Top := Fbutton.Top + 30;
end;

destructor TAvtomat7.Destroy;
begin
FButton.Free;
inherited Destroy;
end;

function TAvtomat7.GetTextFNumber: String;
begin
Result := FNumber.Caption;
end;

procedure TAvtomat7.SetTextFNumber(Value: String);
begin
FNumber.Caption := Value;
end;


function TAvtomat7.GetOnButtonClick : TNotifyEvent;
begin
Result := FButton.OnClick;
end;

procedure TAvtomat7.SetOnButtonClick(Value: TNotifyEvent);
begin
FButton.OnClick := Value;
end;

procedure Register;
begin
RegisterComponents("Samples", [TAvtomat7]);
end;

end.


2 Использую в приложении которое создает его копии динамически

procedure TFMain.BtnAddClick(Sender: TObject);
var
Avt : TAvtomat7;
begin
inc(num);
Avt:=TAvtomat7.Create(self);
Avt.Parent := SBMain;
Avt.OnButtonClick := AvtomatClick;
Avt.Left:=x;
Avt.Top:=y;
Avt.Name:="QF"+inttostr(num);
x:=x+Avt.Width;
end;

3 При нажатии на один из компонентов в приложении

procedure TFMain.AvtomatClick(Sender: TObject);
var
compname : string;
Avt : TAvtomat7;
begin
Avt:=TAvtomat7(Sender.Create);
compname := Avt.Name;
Showmessage(compname);
end;

Выдает ПУСТУЮ месагу , причем FMain.ActiveControl.Name
так же не помогает :-((
Помогите вытащить имя объекта созданного динамически плизззз!!!


 
Юрий Федоров ©   (2003-06-16 14:14) [1]

>>Avt:=TAvtomat7(Sender.Create);
Что за бред ? Может без Create все таки ?


 
Skier ©   (2003-06-16 14:14) [2]

procedure TFMain.AvtomatClick(Sender: TObject);
var
compname : string;
Avt : TAvtomat7;
begin
Avt:=TAvtomat7( Sender);
compname := Avt.Name;
Showmessage(compname);
end;


 
Юрий Зотов ©   (2003-06-16 14:14) [3]

Вот эта строка очень странная и скорее всего ошибочная:
Avt := TAvtomat7(Sender.Create);

Поясните, что Вы хотели сделать.


 
Rinat   (2003-06-16 14:44) [4]

1 Этот код я переработал с примера.
Там вместо моего компонента создается просто кнопка
я взял я Avt := TAvtomat7(Sender.Create);
от Bt := TButton(Sender.Create);, где все работает...
2 Попробывал сделать Avt:=TAvtomat7(Sender); ,
не помогло, а впримере что использовал ничего не изменило,
как работало так и работает :-)
3
> Поясните, что Вы хотели сделать.

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


 
Юрий Федоров ©   (2003-06-16 14:50) [5]

Посмотри, что вернет Sender.ClassName в AvtomatClick.
Сдается мне, что "TButton"


 
Skier ©   (2003-06-16 14:52) [6]

>Rinat (16.06.03 14:44)
Сделай небольшую проверку :

procedure TFMain.AvtomatClick(Sender: TObject);
begin
Showmessage(Sender.ClassName); //что получишь ?
end;

Мне кажется что TButton. Нет ?


 
Юрий Федоров ©   (2003-06-16 15:00) [7]

>>Skier © (16.06.03 14:52)
:-)))


 
Rinat ©   (2003-06-16 15:46) [8]

Ага, выдало именно это...
Может подскажете что это значит?
PS Это мой первый компонент :-)


 
Skier ©   (2003-06-16 15:51) [9]

>Rinat © (16.06.03 15:46)

> Может подскажете что это значит?

А это значит что событие "возбуждает" не TAvtomat7,
а TButton (кстати для того чтобы понять это нужно перевести
слово Sender :) )

> PS Это мой первый компонент :-)

http://www.delphimaster.ru/articles/components_gauge.html


 
Юрий Федоров ©   (2003-06-16 15:52) [10]

Это означает, что в качестве Sender у тебя выступает твоя кнопка FButton(которой ты не присвоил имя), а вовсе не твой компонент.
Я думаю, с событиями тебе нужно сделать наоборот :
В коде компонента
для FButton.OnClick присвоить свой приватный метод, в котором вызывать событие OnButtonClick, если оно присвоено (которое держать приватным полем в компоненте)


 
Юрий Зотов ©   (2003-06-16 16:00) [11]

Это значит, что Sender"ом приходит объект класса TButton, а не TAutomat7 (то есть, событие возбуждает именно кнопка). Кроме того, никаких Create здесь не нужно.

Используйте конструкцию:
Avt := TAutomat7(TButton(Sender).Owner);

Это и будет ссылка на тот объект TAutomat7, чью кнопку нажали. С ней напрямую и работайте, даже Name Вам вряд ли потребуется (хотя никто не запрещает и использовать Avt.Name).


 
Rinat ©   (2003-06-16 16:12) [12]

ОГРОМНОЕ ВАМ СПАСИБО!!!!!!!!!!
ВСЕ Заработало!!
А то я уже не знал что и думать :-)
Max Respect!


 
Юрий Зотов ©   (2003-06-16 16:35) [13]

Но Вы все же прислушайтесь к совету
Юрий Федоров © (16.06.03 15:52)

Дело в том, что Вы же пишете КОМПОНЕНТ, а не программу. И, если уж писать его ПРАВИЛЬНО, то Sender"ом в обработчик события должен приходить САМ компонент, а не его внутренняя кнопка. А прямого доступа к этой кнопке снаружи вообще не должно быть.



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

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

Наверх




Память: 0.5 MB
Время: 0.025 c
3-83921
Крот
2003-05-29 12:44
2003.06.26
Операция побитового AND в SQL


14-84535
Катерина
2003-06-06 15:04
2003.06.26
Коммерческие секреты


8-84449
Dunkan
2003-03-12 11:04
2003.06.26
как создать новый Wav файл и записать в него???


14-84749
Переяслов Григорий
2003-06-06 11:12
2003.06.26
Как вам это?


3-84013
xxxCrazyManxxx
2003-05-29 10:34
2003.06.26
Помогите с командой CONVERT