Como adicionar evento Onclick no componente já criado.

Delphi

08/03/2004

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.


Querra

Querra

Curtidas 0

Respostas

Renatosilva

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:
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
POSTAR