Fórum Dúvida sobre criação de componentes #257220
04/11/2004
0
Ou melhor, eu queria implementar uma propriedade CharCase para o DBGrid. Eu tentei fazer da seguinte forma:
No constructor do componente eu coloquei:
OnKeyPress := MyKeyPress;
Na rotina MyKeyPress eu checo o valor da propriedade CharCase e se for
ecUpperCase ele faz: UpCase(Key) e etc.
A dúvida vem agora. Se eu intalar esse componente o usuário vai poder colocar outra rotina no OnKeyPress fazendo com que meu código não funcione. Como fazer então para que eu possa executar um código em um evento da Classe Base?
E uma outra pequena dúvida: Não existe nenhuma função que faça o contrário da função UpCase? LowerCase só aceita string. Alguma idéia?
Bem, valeu ae pela atenção! Até!
Delphi32
Curtir tópico
+ 0Posts
04/11/2004
Gilvanj
> rotina no OnKeyPress fazendo com que meu código não funcione
Pode ocorrer sim. Se o usuário utilizar OnKeyPress, ele deveria chamar a instrução ´inherited´ para que o tratamento da classe seja executado, caso contrário será ignorado (prevalecendo o que o usuário do componente codificar).
Vc tb pode criar seu novo componente baseado no TCustomDBGrid e dessa forma não publicar OnKeyPress e criar um novo evento para que seja tratado o pressionamento de teclas pelo usuário do componente.
Sobre o UpCase, tente fazer isso:
var
vCar : Char;
begin
vCar := UpperCase(´x´)[1];
...
Gostei + 0
04/11/2004
Michael
É fácil a solução do seu problema. Você disse que no construtor da classe adicionou a linha OnKeyPress := MyKeyPress, não é? MyKeyPress, presumo eu, seja um tipo-procedure do mesmo tipo do evento OnKeyPress, não é? Se for, basta adicionar ao final da implementação que você fez para tornar os caracteres maíusculos as linhas abaixo:
if Assigned(OnKeyPress) then OnKeyPress(Self, Key);
Assim, ao término da execução do seu novo código, se o usuário tiver inserido uma nova função para o evento OnKeyPress, este será executado apenas depois do seu.
Qualquer dúvida, é só perguntar!
Abraços!
Gostei + 0
05/11/2004
Rodc
[color=darkred:aa0f71281c]type
TDBGridteste = class(TDBGrid)
private
{ Private declarations }
protected
procedure KeyPress(var Key: Char); override;[/color:aa0f71281c]
E implemente o código do KeyPress DO COMPONENTE:
[color=darkred:aa0f71281c]procedure TDBGridteste.KeyPress(var Key: Char);
begin
inherited;
Key := upCase(key);
end;[/color:aa0f71281c]
Aí, quando no programa você for colocar código no KeyPress do seu componente, ele vai executar primeiro o seu código para depois ir no código do usuário do componente. Entendeu?
Qualquer coisa avisa que te ajudo...
Rodrigo Cesar
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)