Como adicionar evento Onclick no componente já criado.
Olá Pessoal,
Criei um componente chamado TListBtn = class(TPanel), e gostaria de usar o evento onclick dele, mas não funciona, gostaria de saber se meu código esta certo ou preciso adicionar esse evento se precisar como poso faser isso? Ele aparece no object inspector / events, mas não funciona, o q devo fazer? Esse componente pega o valor de um Listbox e passa para o outro.
Meu código do Componente é o sequinte:
type
TListBtn = class(TPanel)
private
FListBoxOrig : TListBox ;
FListBoxDest : TListBox ;
function GetFirstSel (List: TCustomListBox): Integer;
procedure MoveSel (List: TCustomListBox; Items: TStrings);
procedure BtnClick(Sender: TObject) ;
procedure SetItem(List: TListBox; Index: Integer);
procedure SetBtns ;
protected
public
{ Public declarations }
btnTodosOrigemDestino : TButton ;
btnUmOrigemDestino : TButton ;
btnTodosDestinoOrigem : TButton ;
btnUmDestinoOrigem : TButton ;
Constructor Create(AOwner : TComponent) ; Override ;
procedure MoveItens(IndBtn : Integer) ;
published
{ Published declarations }
Property ListBoxOrig : TListBox read FListBoxOrig write FListBoxOrig ;
Property ListBoxDest : TListBox read FListBoxDest write FListBoxDest ;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´A´, [TListBtn]);
end;
Constructor TListBtn.Create(AOwner : TComponent) ;
begin
inherited Create(AOwner) ;
btnTodosOrigemDestino := TButton.Create(self) ;
btnUmOrigemDestino := TButton.Create(self) ;
btnTodosDestinoOrigem := TButton.Create(self) ;
btnUmDestinoOrigem := TButton.Create(self) ;
btnTodosOrigemDestino.Parent := Self ;
btnUmOrigemDestino.Parent := Self ;
btnTodosDestinoOrigem.Parent := Self ;
btnUmDestinoOrigem.Parent := Self ;
btnTodosOrigemDestino.Caption := ´>´ ;
btnUmOrigemDestino.Caption := ´>>´ ;
btnTodosDestinoOrigem.Caption := ´<´ ;
btnUmDestinoOrigem.Caption := ´<<´ ;
btnTodosOrigemDestino.Tag := 0 ;
btnUmOrigemDestino.Tag := 1 ;
btnTodosDestinoOrigem.Tag := 2 ;
btnUmDestinoOrigem.Tag := 3 ;
self.Width := 40 ;
self.Height := 200 ;
self.Caption := ´´ ;
btnTodosOrigemDestino.OnClick := BtnClick ;
btnUmOrigemDestino.OnClick := BtnClick ;
btnTodosDestinoOrigem.OnClick := BtnClick ;
btnUmDestinoOrigem.OnClick := BtnClick ;
end ;
procedure TListBtn.BtnClick(Sender : TObject) ;
begin
MoverItens(TButton(Sender).Tag) ;
end ;
procedure TListBtn.MoveItens(IndBtn : Integer) ;
begin{…}
end ;
procedure TListBtn.SetButtons;
var
SrcEmpty, DstEmpty: Boolean;
begin
SrcEmpty := ListBoxOrig.Items.Count = 0;
DstEmpty := ListBoxDest.Items.Count = 0;
btnTodosOrigemDestino.OnClick := BtnClick ;
btnUmOrigemDestino.OnClick := BtnClick ;
btnTodosDestinoOrigem.OnClick := BtnClick ;
btnUmDestinoOrigem.OnClick := BtnClick ;
btnUmOrigemDestino.Enabled := not SrcEmpty;
btnTodosOrigemDestino.Enabled := not SrcEmpty;
btnUmDestinoOrigem.Enabled := not DstEmpty;
btnTodosDestinoOrigem.Enabled := not DstEmpty;
end;
procedure TListBtn.MoveSel (List: TCustomListBox; Items: TStrings);
begin{…..}
end;
function TListBtn.GetFirstSel (List: TCustomListBox): Integer;
begin {….}
end;
procedure TListBtn.SetItem(List: TListBox; Index: Integer);
begin
SetButtons;
exit ;
with List do
begin {...} end;
end;
end.
Valeu Obrig.
Criei um componente chamado TListBtn = class(TPanel), e gostaria de usar o evento onclick dele, mas não funciona, gostaria de saber se meu código esta certo ou preciso adicionar esse evento se precisar como poso faser isso? Ele aparece no object inspector / events, mas não funciona, o q devo fazer? Esse componente pega o valor de um Listbox e passa para o outro.
Meu código do Componente é o sequinte:
type
TListBtn = class(TPanel)
private
FListBoxOrig : TListBox ;
FListBoxDest : TListBox ;
function GetFirstSel (List: TCustomListBox): Integer;
procedure MoveSel (List: TCustomListBox; Items: TStrings);
procedure BtnClick(Sender: TObject) ;
procedure SetItem(List: TListBox; Index: Integer);
procedure SetBtns ;
protected
public
{ Public declarations }
btnTodosOrigemDestino : TButton ;
btnUmOrigemDestino : TButton ;
btnTodosDestinoOrigem : TButton ;
btnUmDestinoOrigem : TButton ;
Constructor Create(AOwner : TComponent) ; Override ;
procedure MoveItens(IndBtn : Integer) ;
published
{ Published declarations }
Property ListBoxOrig : TListBox read FListBoxOrig write FListBoxOrig ;
Property ListBoxDest : TListBox read FListBoxDest write FListBoxDest ;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´A´, [TListBtn]);
end;
Constructor TListBtn.Create(AOwner : TComponent) ;
begin
inherited Create(AOwner) ;
btnTodosOrigemDestino := TButton.Create(self) ;
btnUmOrigemDestino := TButton.Create(self) ;
btnTodosDestinoOrigem := TButton.Create(self) ;
btnUmDestinoOrigem := TButton.Create(self) ;
btnTodosOrigemDestino.Parent := Self ;
btnUmOrigemDestino.Parent := Self ;
btnTodosDestinoOrigem.Parent := Self ;
btnUmDestinoOrigem.Parent := Self ;
btnTodosOrigemDestino.Caption := ´>´ ;
btnUmOrigemDestino.Caption := ´>>´ ;
btnTodosDestinoOrigem.Caption := ´<´ ;
btnUmDestinoOrigem.Caption := ´<<´ ;
btnTodosOrigemDestino.Tag := 0 ;
btnUmOrigemDestino.Tag := 1 ;
btnTodosDestinoOrigem.Tag := 2 ;
btnUmDestinoOrigem.Tag := 3 ;
self.Width := 40 ;
self.Height := 200 ;
self.Caption := ´´ ;
btnTodosOrigemDestino.OnClick := BtnClick ;
btnUmOrigemDestino.OnClick := BtnClick ;
btnTodosDestinoOrigem.OnClick := BtnClick ;
btnUmDestinoOrigem.OnClick := BtnClick ;
end ;
procedure TListBtn.BtnClick(Sender : TObject) ;
begin
MoverItens(TButton(Sender).Tag) ;
end ;
procedure TListBtn.MoveItens(IndBtn : Integer) ;
begin{…}
end ;
procedure TListBtn.SetButtons;
var
SrcEmpty, DstEmpty: Boolean;
begin
SrcEmpty := ListBoxOrig.Items.Count = 0;
DstEmpty := ListBoxDest.Items.Count = 0;
btnTodosOrigemDestino.OnClick := BtnClick ;
btnUmOrigemDestino.OnClick := BtnClick ;
btnTodosDestinoOrigem.OnClick := BtnClick ;
btnUmDestinoOrigem.OnClick := BtnClick ;
btnUmOrigemDestino.Enabled := not SrcEmpty;
btnTodosOrigemDestino.Enabled := not SrcEmpty;
btnUmDestinoOrigem.Enabled := not DstEmpty;
btnTodosDestinoOrigem.Enabled := not DstEmpty;
end;
procedure TListBtn.MoveSel (List: TCustomListBox; Items: TStrings);
begin{…..}
end;
function TListBtn.GetFirstSel (List: TCustomListBox): Integer;
begin {….}
end;
procedure TListBtn.SetItem(List: TListBox; Index: Integer);
begin
SetButtons;
exit ;
with List do
begin {...} end;
end;
end.
Valeu Obrig.
Querra
Curtidas 0
Respostas
Renatosilva
08/03/2004
Deixa eu ver se eu entendi:
Você quer configurar um OnClick do seu componente, mas não sabe como? Bem, veja se algumas dessas coisas pode te ajudar:
Para criar um evento OnClick, publique a propriedade protegida (de TControl se eu não me engano), assim:
Depois crie um método interno de sua classe com a estrutura do evento, ele será o seu manipulador do OnClick:
Então em algum lugar atribua o valor à propriedade):
Ou então publique a propriedade e sobreescreva o método protegido [color=darkred:a5d15ed0bd]Click [/color:a5d15ed0bd](ou [color=darkred:a5d15ed0bd]DoClick[/color:a5d15ed0bd], não lembro) para executar alguma ação padrão que você queira antes de chamar o handler do usuário do componente:
Você quer configurar um OnClick do seu componente, mas não sabe como? Bem, veja se algumas dessas coisas pode te ajudar:
Para criar um evento OnClick, publique a propriedade protegida (de TControl se eu não me engano), assim:
published property OnClick;
Depois crie um método interno de sua classe com a estrutura do evento, ele será o seu manipulador do OnClick:
procedure ClikHandler(Sender: TObject);
Então em algum lugar atribua o valor à propriedade):
OnClick := ClickHandler;
Ou então publique a propriedade e sobreescreva o método protegido [color=darkred:a5d15ed0bd]Click [/color:a5d15ed0bd](ou [color=darkred:a5d15ed0bd]DoClick[/color:a5d15ed0bd], não lembro) para executar alguma ação padrão que você queira antes de chamar o handler do usuário do componente:
protected procedure Click; override;
procedure TListBtn.Click; begin // Sua manipulação do evento aqui... inherited; // Chama o Click herdado end;
GOSTEI 0