Ajuda com OOP
No meu formulário tenho o seguinte código:
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
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
Curtidas 0
Respostas
.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.
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
18/06/2009
pq uma função não resolveria ????
Na sua Unit de Funcoes .. Vc define uma Procedure
Nos evento onexit dos BdEdir vc chama
????Não funciona ????
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
18/06/2009
Minha dúvida é nesse qto a como informar em que formulário está a imagem do erro. Novamente o código:
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?
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
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.
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.
Bom saber. Pensei que seria mais facil fazer um componente. lol.
.lg.
GOSTEI 0