Ajuda com OOP

Delphi

18/06/2009

No meu formulário tenho o seguinte código:

procedure TfrmInclNovoAluno.DBRequerido(Sender: TObject);
begin
   if Trim((Sender As TDBEdit).Text) = ´´ Then
   Begin
      imgError.Hint := (Sender As TDBEdit).Hint;
      imgError.Left := ((Sender As TDBEdit).Left + (Sender As TDBEdit).Width) + 3;
      imgError.Top  := (((Sender As TDBEdit).Height - imgError.Height) div 2) + (Sender As TDBEdit).Top;
      imgError.Visible := True;
      (Sender As TDBEdit).SetFocus;
   End Else
   Begin
      imgError.Visible := False;
   end;
end;


Esse código é ligado no evento [b:d7bc47f017]OnExit [/b:d7bc47f017]dos [b:d7bc47f017]DBEdtis [/b:d7bc47f017]que são obrigatórios: se a pessoa não digitou nada ele exibe a imagem [b:d7bc47f017]imgError [/b:d7bc47f017]à direita do componente, centralizado horizontalmente.

Acontece que eu não queria ficar colando essa função em cada form. Podem ver no código que eu não uso o nome do componente (exceto a imagem): eu faço um typecast.

Como ficaria o código acima de maneira que eu pudesse colocá-lo numa unit só de funções e ele funcionasse para todos os formulários?


Grato,

Willian


Willian

Willian

Curtidas 0

Respostas

.lg.

.lg.

18/06/2009

Você poderia fazer um componente que exibe a imagem de acordo com o que for atribuido como propriedade.

acho a melhor maneira, pois agora não consegui pensar numa maneira de mostrar na tela um componente que não tenha sido criado pelo form.

Sendo um componente ou uma classe...
você pode atribuir uma variável do tipo TImage e faze ela estar carregada com a sua imagem.
Crie uma procedure onde receba as instruções para aparecer. Que no seu caso o melhor seria um TObject.
Ps.: ´Não falo Sender, pois isso é apenas um nome dado, vc pode nomear de qualquer outra forma, [b:3304c93361]Compo: TObject[/b:3304c93361]. rsrs.´

Desculpe mas não estou com muito tempo para criar uma classe personalizada para lhe mostrar um exemplo, mas pra isso, essa classe seria pequena e facil de se fazer.

Tenho uma implementação parecida com o que você está fazendo. So que o programa vê que quando a pessoa tenta fazer algo... ele exibe um hint dando uma dica sobre aquilo que ela quer fazer. Demorei pra elaborar o código, rsrs.


GOSTEI 0
Marco Salles

Marco Salles

18/06/2009

pq uma função não resolveria ????


Na sua Unit de Funcoes .. Vc define uma Procedure
procedure Exibir(sender:TObject;imgError:TTipoSeiLa);
begin
with (Sender As TDBEdit) do
   if Trim(Text) = ´´ Then 
     Begin 
        imgError.Hint := Hint; 
        imgError.Left := (Left + Width) + 3; 
        imgError.Top  := ((Height - imgError.Height) div 2) + Top; 
        imgError.Visible := True; 
        SetFocus; 
     End 
  Else 
      imgError.Visible := False;  
end;



Nos evento onexit dos BdEdir vc chama

procedure TfrmInclNovoAluno.DBRequerido(Sender: TObject); 
begin 
 Exibir(sender,imgError);
end;


????Não funciona ????


GOSTEI 0
Willian

Willian

18/06/2009

Minha dúvida é nesse qto a como informar em que formulário está a imagem do erro. Novamente o código:

procedure Exibir(sender:TObject;imgError:TTipoSeiLa); 
begin 
with (Sender As TDBEdit) do 
   if Trim(Text) = ´´ Then 
     Begin 
        imgError.Hint := Hint; 
        imgError.Left := (Left + Width) + 3; 
        imgError.Top  := ((Height - imgError.Height) div 2) + Top; 
        imgError.Visible := True; 
        SetFocus; 
     End 
  Else 
      imgError.Visible := False;  
end;


Como eu indicaria onde está o objeto imgError no código acima? Ele não vai procurar o imgError dentro do .pas das funções?


GOSTEI 0
Marco Salles

Marco Salles

18/06/2009

Ele não vai procurar o imgError dentro do .pas das funções?


então vc passa o [b:7d5fd2f451]self.imgError [/b:7d5fd2f451]


procedure TfrmInclNovoAluno.DBRequerido(Sender: TObject);
begin
Exibir(sender,self.imgError);
end;


GOSTEI 0
.lg.

.lg.

18/06/2009

[quote:3639dc183d=´Marco Salles´]então vc passa o [b:3639dc183d]self.imgError [/b:3639dc183d][/quote:3639dc183d]
Bom saber. Pensei que seria mais facil fazer um componente. lol.
.lg.


GOSTEI 0
POSTAR