Incompatible type: ´method pointer and regular procedure´
Bom dia colegas
Tomando como exemplo a unit abaixo:
Em outra unit ao atribuir os procedimentos ao evento OnKeyPress
resulta no seguinte erro: Incompatible type: ´method pointer and regular procedure´
Já se colocar os métodos em uma classe e declarar uma var aí funciona:
ou
Tem alguma alternativa de contornar o problema sem necessariamente jogar os métodos em uma classe?
Se alguém tiver um material bom sobre method pointer x procedures regulares enviar para delmar.delmar@gmail.com ou se conhecer um link que aborde ´legal´ o assunto, poste aí
Tomando como exemplo a unit abaixo:
unit faUtil;
interface
uses Windows, SysUtils, DBCtrls, Messages, Controls;
Type
procedure ProximoControle(Sender: TObject; var Key: Char);
procedure ContextoPopUp(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
implementation
procedure ProximoControle(Sender: TObject; var Key: Char);
begin {PRÓXIMO CONTROLE COM ENTER}
if Sender is TDBLookUpCombobox then
if key = #10 then //CTRL+ENTER
TDBLookupComboBox(Sender).PopupMenu.Items[0].Click;
if key = 13 then
PostMessage(TWinControl(Sender).Handle, WM_NEXTDLGCTL, 0, 0); //no 1º parametro, zero é para frente e um é para cima
end;
procedure ContextoPopUp(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin {SETA O FOCO NO COMPONENTE AO CLICAR COM DIREITO PARA ACIONAR OS POP-UPs}
TDBLookUpComboBox(Sender).SetFocus;
end;Em outra unit ao atribuir os procedimentos ao evento OnKeyPress
DBEditContato.OnKeyPress := ProximoControle;
resulta no seguinte erro: Incompatible type: ´method pointer and regular procedure´
Já se colocar os métodos em uma classe e declarar uma var aí funciona:
TUtil = Class public procedure ProximoControle(Sender: TObject; var Key: Char); procedure ContextoPopUp(Sender: TObject; MousePos: TPoint; var Handled: Boolean); end; var util: Tutil;
ou
TUtil = Class public class procedure ProximoControle(Sender: TObject; var Key: Char); class procedure ContextoPopUp(Sender: TObject; MousePos: TPoint; var Handled: Boolean); end; var util: Tutil;
Tem alguma alternativa de contornar o problema sem necessariamente jogar os métodos em uma classe?
Se alguém tiver um material bom sobre method pointer x procedures regulares enviar para delmar.delmar@gmail.com ou se conhecer um link que aborde ´legal´ o assunto, poste aí
Delmar
Curtidas 0
Respostas
Afarias
02/10/2009
Opa Delmar,
Como vc já viu Procedimentos/Funções e Métodos são incompatíveis. Enquanto o primeiro é um endereço para o seu código o segundo é uma dupla de ponteiros, sendo 1 para o código e outro para o objeto/classe que o detém.
É possível q com algum código mirabolante envolvendo ponteiros/RTTI/´sei lá o q´ vc consiga usar um procedimento como método -- mas, tenho certeza q não valeria a pena.
A solução de criar uma classe responsável por conter esses métodos (relacionados) juntos -- como vc mostrou -- é simples, intuitiva e dentro dos padrões.
T+
Como vc já viu Procedimentos/Funções e Métodos são incompatíveis. Enquanto o primeiro é um endereço para o seu código o segundo é uma dupla de ponteiros, sendo 1 para o código e outro para o objeto/classe que o detém.
É possível q com algum código mirabolante envolvendo ponteiros/RTTI/´sei lá o q´ vc consiga usar um procedimento como método -- mas, tenho certeza q não valeria a pena.
A solução de criar uma classe responsável por conter esses métodos (relacionados) juntos -- como vc mostrou -- é simples, intuitiva e dentro dos padrões.
T+
GOSTEI 0