Para os Experts!! Controlar Keypreview em um Componente
Estou fazendo um componente do tipo memo, onde eu gostaria que toda vez que o componente fosse ´Focalizado´ eu passaria a propriedade Keypreview do form para false. Alguém tem alguma idéia de como faço isso??!!
Kenji_rh
Curtidas 0
Respostas
Nildo
16/12/2003
Coloca isso aqui no Private do seu componente:
E a seguitne procedure:
Espero que tenha ajudado.
Abraços e ateh +
procedure hookFocusChanged (var Message: TMessage); Message cm_focuschanged;
E a seguitne procedure:
procedure TSeuComponente.hookFocusChanged(var Message: TMessage); begin inherited; TForm( Parent ).KeyPreview := False; end;
Espero que tenha ajudado.
Abraços e ateh +
GOSTEI 0
Kenji_rh
16/12/2003
Eu declarei a uses FORMS e deu OK, mas estava testando e quando eu focava o Memo, o comando TForm(parent).keypreview:=false não era aceito, explico:
fazendo o passo a passo, o valor do TForm(parent) ficava como False, mas no form propriamente dito a propriedade não mudava para false.
Aí, testando alguns outras formas, com influência da sua dica fiz o seguinte:
--------------------------------------------------------------------------------------
DECLAREI NO PRIVATE:
Procedure hookEnter(var message: TCMENTER); Message cm_Enter;
Procedure hookExit(var message: TCMEXIT); Message cm_Exit;
AS PROCEDURES:
procedure TMemoX.hookEnter(var Message: Tcmenter);
var Form:TCustomForm;
begin
inherited;
Form:=GetParentForm(Parent);
Form.KeyPreview := false;
end;
procedure TScMemo.hookExit(var Message: Tcmexit);
var Form:TCustomForm;
begin
inherited;
Form:=GetParentForm(Parent);
Form.KeyPreview := true;
end;
--------------------------------------------------------------------------------------
Aí deu certo!!! :D
Valeu, sem a sua ajuda, não conseguiria, pois eu não tinha um norteamento para seguir!!!
fazendo o passo a passo, o valor do TForm(parent) ficava como False, mas no form propriamente dito a propriedade não mudava para false.
Aí, testando alguns outras formas, com influência da sua dica fiz o seguinte:
--------------------------------------------------------------------------------------
DECLAREI NO PRIVATE:
Procedure hookEnter(var message: TCMENTER); Message cm_Enter;
Procedure hookExit(var message: TCMEXIT); Message cm_Exit;
AS PROCEDURES:
procedure TMemoX.hookEnter(var Message: Tcmenter);
var Form:TCustomForm;
begin
inherited;
Form:=GetParentForm(Parent);
Form.KeyPreview := false;
end;
procedure TScMemo.hookExit(var Message: Tcmexit);
var Form:TCustomForm;
begin
inherited;
Form:=GetParentForm(Parent);
Form.KeyPreview := true;
end;
--------------------------------------------------------------------------------------
Aí deu certo!!! :D
Valeu, sem a sua ajuda, não conseguiria, pois eu não tinha um norteamento para seguir!!!
GOSTEI 0
Nildo
16/12/2003
Fico feliz em saber que você soube fazer sozinho!
É que da minha maneira eu nao verificava se Recebeu ou se Retirou o focus. Para saber disso, era só colocar um
If Self.Focused then
// Entrou
else
// Saiu do controle
É que da minha maneira eu nao verificava se Recebeu ou se Retirou o focus. Para saber disso, era só colocar um
If Self.Focused then
// Entrou
else
// Saiu do controle
GOSTEI 0