ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Formulario Herança?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Ago 09, 2019 11:09 am    Assunto: Formulario Herança? Responder com Citação

Tenho um formulario que criei que contém constante

Código:
const
  ColunaA = 8;  /// Ref as colunas do dbgrid
  ColunaE = 9; /// Ref as colunas do dbgrid


E no evento abaixo o codigo
Código:
procedure TfrmHerdeiroLista.dbgridListaMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  Cell: TGridCoord;
begin
  with TdbGrid(Sender) do
  begin
    Cell := MouseCoord(X, Y);
    case Cell.X of
      ColunaA .. ColunaE :
        Cursor := crHandPoint;
    else
      Cursor := crDefault;
    end;
  end;
end;


Quero reaproveitar este codigo nos formularios que herdar deste, porém a constante muda cfe formulario.

Como fazer?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Sáb Ago 10, 2019 11:35 pm    Assunto: Responder com Citação

No seu form base, crie um método abstrato:

Código:
  protected
    function GetConstants: array of Integer; abstract;


Mude sua função para usar esse array ao invés das constantes:

Código:
function ContainsValue(Array: array of Integer; Value: Integer): Boolean;
var
  I: Integer;
begin
  for I := Low(Array) to High(Array) do
    if Array[I] = Value then
      Exit(True);
  Result := False;
end;

procedure TfrmHerdeiroLista.dbgridListaMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  Cell: TGridCoord;
begin
  with TdbGrid(Sender) do
  begin
    Cell := MouseCoord(X, Y);
    if ContainsValue(GetConstants, Cell.X) then
      Cursor := crHandPoint
    else
      Cursor := crDefault;
  end;
end;


Então, nos seus forms que herdarem, implemente o método GetConstants para retornar os valores pertinentes ao form.
_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Ago 12, 2019 8:18 am    Assunto: Responder com Citação

marcieldeg escreveu:
No seu form base, crie um método abstrato:

Código:
  protected
    function GetConstants: array of Integer; abstract;


Mude sua função para usar esse array ao invés das constantes:

Código:
function ContainsValue(Array: array of Integer; Value: Integer): Boolean;
var
  I: Integer;
begin
  for I := Low(Array) to High(Array) do
    if Array[I] = Value then
      Exit(True);
  Result := False;
end;

procedure TfrmHerdeiroLista.dbgridListaMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  Cell: TGridCoord;
begin
  with TdbGrid(Sender) do
  begin
    Cell := MouseCoord(X, Y);
    if ContainsValue(GetConstants, Cell.X) then
      Cursor := crHandPoint
    else
      Cursor := crDefault;
  end;
end;


Então, nos seus forms que herdarem, implemente o método GetConstants para retornar os valores pertinentes ao form.


Olá marcieldeg, eu tentei executar mais não deu certo.

Essa função
Código:
function GetConstants: array of Integer; abstract;
Meu Delphi não esta reconhecendo.

E essa também não
Código:
function ContainsValue(Array: array of Integer; Value: Integer): Boolean;


Essa até mudei
Código:
function TfrmHerdeiroLista.ContainsValue(a: array of Integer; Value: Integer): Boolean;
var
  I: Integer;
begin
  for I := Low(a) to High(a) do
    if a[I] = Value then
      Exit(True);
  Result := False;
end;



Ai compila, mais a outra não consegui compilar a de modo abstract

Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Ago 12, 2019 5:08 pm    Assunto: Responder com Citação

Acho que resolveu assim

Código:
type
  TIntArray = array of Integer;


Código:
 function GetConstants: TIntArray; virtual; abstract;


Código:
function ContainsValue(a: array of Integer; Value: Integer): Boolean;
var
  I: Integer;
begin
  for I := Low(a) to High(a) do
    if a[I] = Value then
      Exit(True);
  Result := False;
end;


E no seu filho
Código:
function GetConstants: TIntArray; override;


Código:
function TfrmListaContato.GetConstants: TIntArray;
begin
  /// Defino o tamanho do array
  SetLength(Result, 2);
  Result[0] := 8;
  Result[1] := 9;
end;


Parece q deu certo
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB