Fórum Ajuda com OOP #371343
18/06/2009
0
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
Curtir tópico
+ 0Posts
18/06/2009
.lg.
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
18/06/2009
Marco Salles
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
19/06/2009
Willian
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
19/06/2009
Marco Salles
então vc passa o [b:7d5fd2f451]self.imgError [/b:7d5fd2f451]
procedure TfrmInclNovoAluno.DBRequerido(Sender: TObject);
begin
Exibir(sender,self.imgError);
end;
Gostei + 0
19/06/2009
.lg.
Bom saber. Pensei que seria mais facil fazer um componente. lol.
.lg.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)