listbox runtime com varios eventos em unit
Tenho está unit abaixo que tenho fora do projeto( para auxiliar).
Nesta unit crio um listbox e adiciono vários eventos...so que nao estou conseguindo.
Quero adicionar os eventos onDrawItem/onDragOver/onDragDrop/onclick...nao estou falando para me ensinar como fazer dragdrop
quero apenas fazer funcionar ele chamar meu metodo....
MinhaUnit.pas
============================================================
procedure CriaListbox(form1: TForm);
begin
listbox:= TListBox.Create(Form1);
Parent := Form1;
listbox.onDrawItem:= desenhaItem;
listbox.onClick := clicou;
listbox.onDragDrop := dragdrop;
end;
procedure desenhaItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
Pinta item do listbox
end;
procedure dragdrop
..
.
.
.
procedure clicou
.....
.
.
.
Nesta unit crio um listbox e adiciono vários eventos...so que nao estou conseguindo.
Quero adicionar os eventos onDrawItem/onDragOver/onDragDrop/onclick...nao estou falando para me ensinar como fazer dragdrop
quero apenas fazer funcionar ele chamar meu metodo....
MinhaUnit.pas
============================================================
procedure CriaListbox(form1: TForm);
begin
listbox:= TListBox.Create(Form1);
Parent := Form1;
listbox.onDrawItem:= desenhaItem;
listbox.onClick := clicou;
listbox.onDragDrop := dragdrop;
end;
procedure desenhaItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
Pinta item do listbox
end;
procedure dragdrop
..
.
.
.
procedure clicou
.....
.
.
.
Delphi_open
Curtidas 0
Respostas
Massuda
17/02/2005
Devido a detalhes de baixo nível relacionados com o modo que objetos são implementados em Pascal/Delphi, tratadores de eventos devem ser obrigatoriamente métodos de uma classe. Assimnão servem como tratadores de evento.
Para contornar esse problema/limitação, você poderia criar uma classe derivada de TListBox que implementa o seu tratamento desses eventos... mas, ao inves de implementar os tratadores desses eventos, você pode dar um override nos métodos que geram esse evento. Por exemploNote que sua procedure CriaListBox poderia criar um TMeuListBox no luga do TListBox que o efeito seria o que você deseja.
Tem um problema apenas: omiti o tratamento de drag&drop porque não tenho certeza se a procedure DragDrop (que gera OnDragDrop) é virtual. Verifico e depois completo isto se for necessário.
procedure desenhaItem(...); begin ... end; procedure dragdrop(...); begin ... end; procedure clicou(...); begin ... end;
Para contornar esse problema/limitação, você poderia criar uma classe derivada de TListBox que implementa o seu tratamento desses eventos... mas, ao inves de implementar os tratadores desses eventos, você pode dar um override nos métodos que geram esse evento. Por exemplo
type TMeuListBox = class(TListBox) protected procedure Click; override; procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override; end;
Tem um problema apenas: omiti o tratamento de drag&drop porque não tenho certeza se a procedure DragDrop (que gera OnDragDrop) é virtual. Verifico e depois completo isto se for necessário.
GOSTEI 0
Massuda
17/02/2005
... omiti o tratamento de drag&drop porque não tenho certeza se a procedure DragDrop (que gera OnDragDrop) é virtual.
A procedure DragDrop é virtual, então você poderia implementar seu listbox personalizado assim:type TMeuListBox = class(TListBox) protected procedure Click; override; procedure DragDrop(Source: TObject; X, Y: Integer); override; procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override; end; ... procedure TMeuListBox.Click; begin inherited; // seu código aqui end; procedure TMeuListBox.DragDrop(Source: TObject; X, Y: Integer); begin inherited; // seu código aqui end; procedure TMeuListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); begin inherited; // seu código aqui end;
GOSTEI 0
Diogoalles
17/02/2005
Olá Massuda e Dephi_open,
li este tópico de voces e estou tentando anexar uma ideia no que preciso, se puderem deem uma olhada no topico abaixo e se tiverem qq sugestão agradeço
[url]http://forum.clubedelphi.net/viewtopic.php?t=60550[/url]
abraço
Diogo
li este tópico de voces e estou tentando anexar uma ideia no que preciso, se puderem deem uma olhada no topico abaixo e se tiverem qq sugestão agradeço
[url]http://forum.clubedelphi.net/viewtopic.php?t=60550[/url]
abraço
Diogo
GOSTEI 0