Mensagem de Componente
Caros amigos,
Tenho um componente que não permite que as teclas pressionadas sejam identificadas quando o foco está sobre ele. Já tentei corrigir este problema em seus fontes, porém não consegui. Por isso pergunto: alguem pode me ajudar a solucionar este problema?
Desde já agradeço.
Tenho um componente que não permite que as teclas pressionadas sejam identificadas quando o foco está sobre ele. Já tentei corrigir este problema em seus fontes, porém não consegui. Por isso pergunto: alguem pode me ajudar a solucionar este problema?
Desde já agradeço.
Alex Maia
Curtidas 0
Respostas
Martins
19/11/2005
[quote:443919fa75=´Alex Maia´]Caros amigos,
Tenho um componente que não permite que as teclas pressionadas sejam identificadas quando o foco está sobre ele. Já tentei corrigir este problema em seus fontes, porém não consegui. Por isso pergunto: alguem pode me ajudar a solucionar este problema?
Desde já agradeço.[/quote:443919fa75]
Continua sendo aquele probleminha lá do componente q quando recebe o foco não lhe deixa utilizar as teclas de função?
Tenho um componente que não permite que as teclas pressionadas sejam identificadas quando o foco está sobre ele. Já tentei corrigir este problema em seus fontes, porém não consegui. Por isso pergunto: alguem pode me ajudar a solucionar este problema?
Desde já agradeço.[/quote:443919fa75]
Continua sendo aquele probleminha lá do componente q quando recebe o foco não lhe deixa utilizar as teclas de função?
GOSTEI 0
Alex Maia
19/11/2005
É este mesmo amigo. Vc pode me ajudar?
GOSTEI 0
Martins
19/11/2005
[quote:f91b971dee=´Alex Maia´]É este mesmo amigo. Vc pode me ajudar?[/quote:f91b971dee]
Vou baixar o componente no link passado pelo [b:f91b971dee]Massuda[/b:f91b971dee] no tópico anterior, e dar uma olhada no código dele.
Vou baixar o componente no link passado pelo [b:f91b971dee]Massuda[/b:f91b971dee] no tópico anterior, e dar uma olhada no código dele.
GOSTEI 0
Alex Maia
19/11/2005
Preciso com urgência... não estou conseguindo. Alguem pode me ajudar?
GOSTEI 0
Alex Maia
19/11/2005
Alguem pode ajudar??
GOSTEI 0
Alex Maia
19/11/2005
Por favor... alguem pode me ajudar???
Desde já agradeço.
Desde já agradeço.
GOSTEI 0
Ramms
19/11/2005
amigo declare aki o seu problema...
eu não vi o outro tópico que vcs estão falando....
eu não vi o outro tópico que vcs estão falando....
GOSTEI 0
Alex Maia
19/11/2005
Mais uma vez!!!
Caros amigos,
Tenho um componente que não permite que as teclas pressionadas sejam identificadas quando o foco está sobre ele. Já tentei corrigir este problema em seus fontes, porém não consegui. Por isso pergunto: alguem pode me ajudar a solucionar este problema?
Desde já agradeço.
Caros amigos,
Tenho um componente que não permite que as teclas pressionadas sejam identificadas quando o foco está sobre ele. Já tentei corrigir este problema em seus fontes, porém não consegui. Por isso pergunto: alguem pode me ajudar a solucionar este problema?
Desde já agradeço.
GOSTEI 0
Alex Maia
19/11/2005
Alguem por favor... eu mando os fontes!!!!!!!!!!!
GOSTEI 0
Alex Maia
19/11/2005
Alguem??
GOSTEI 0
Edilcimar
19/11/2005
se o componente não permite a visualização da tecla somente quando o mesmo está focado então o problema está no componente, mostre o código do onkeypress ou onkeydown do componente
GOSTEI 0
Alex Maia
19/11/2005
Este é o código:
procedure TXiButton.WMKeyDown(var msg: TWMKeyDown);
begin
if msg.CharCode = VK_SPACE then FBtnState:= bsDown;
if msg.CharCode = VK_RETURN then Click;
Paint;
end;
procedure TXiButton.WMKeyDown(var msg: TWMKeyDown);
begin
if msg.CharCode = VK_SPACE then FBtnState:= bsDown;
if msg.CharCode = VK_RETURN then Click;
Paint;
end;
GOSTEI 0
Edilcimar
19/11/2005
veja este exemplo
procedure TForm30.Edit12KeyPress(Sender: TObject; var Key: Char);
begin
If Key = (´,´) then
Key := (´.´)
Else
If ((Key < #47) or (Key > 58)) and (Key <> 46) and (Key <> 08) then
Begin
ShowMessage(´AQUI SÓ É PERMITIDO DIGITAR NÚMEROS OU PONTO´);
Key := 08;
End;
end;
aqui funciona, só que eu uso no onkeypress e não no onkeydown
procedure TForm30.Edit12KeyPress(Sender: TObject; var Key: Char);
begin
If Key = (´,´) then
Key := (´.´)
Else
If ((Key < #47) or (Key > 58)) and (Key <> 46) and (Key <> 08) then
Begin
ShowMessage(´AQUI SÓ É PERMITIDO DIGITAR NÚMEROS OU PONTO´);
Key := 08;
End;
end;
aqui funciona, só que eu uso no onkeypress e não no onkeydown
GOSTEI 0
Alex Maia
19/11/2005
Não amigo, vc não está entendendo... É o seguinte:
Quando adicionamos um componente button do delphi, setamos a propriedade KeyPreview do form para True e colocamos algum código que identifique as teclas pressionadas no OnKeyDown do form, não importando em qual componente está o foco; as teclas são identificadas e as funções do evento são realizadas quando pressionamos algo. O meu problema é que quando o foco está no meu componente Button as mensagens de pressinamento de teclas não são identificadas pelo windows e, por isso, as funções não são executadas. O que eu quero é uma ajuda para corrigir o código fonte do meu componente para eliminar este problema. A identificação das teclas deve funcionar sem que seja necessário colocar alguma linha no evento onkeydown ou onkeypress do componente. entendes??
Sendo assim, mais uma vez eu pergunto:
ALGUEM PODE ME AJUDAR????????
DESDE JÁ AGRADEÇO.
Quando adicionamos um componente button do delphi, setamos a propriedade KeyPreview do form para True e colocamos algum código que identifique as teclas pressionadas no OnKeyDown do form, não importando em qual componente está o foco; as teclas são identificadas e as funções do evento são realizadas quando pressionamos algo. O meu problema é que quando o foco está no meu componente Button as mensagens de pressinamento de teclas não são identificadas pelo windows e, por isso, as funções não são executadas. O que eu quero é uma ajuda para corrigir o código fonte do meu componente para eliminar este problema. A identificação das teclas deve funcionar sem que seja necessário colocar alguma linha no evento onkeydown ou onkeypress do componente. entendes??
Sendo assim, mais uma vez eu pergunto:
ALGUEM PODE ME AJUDAR????????
DESDE JÁ AGRADEÇO.
GOSTEI 0
Michael
19/11/2005
Olá!
Testei aqui e comigo funcionou perfeitamente. O componente só sobrepõe as teclas configuradas no evento [b:13c6271d34]OnKeyPress [/b:13c6271d34]do formulário caso as propriedades [b:13c6271d34]Cancel[/b:13c6271d34] e/ou [b:13c6271d34]Default [/b:13c6271d34]estejam setadas para [b:13c6271d34]true[/b:13c6271d34]. E isso é perfeitamente normal. O componente [b:13c6271d34]TButton [/b:13c6271d34]da VCL tbm se comporta assim.
Não há nada errado com o componente.
[]´s
Testei aqui e comigo funcionou perfeitamente. O componente só sobrepõe as teclas configuradas no evento [b:13c6271d34]OnKeyPress [/b:13c6271d34]do formulário caso as propriedades [b:13c6271d34]Cancel[/b:13c6271d34] e/ou [b:13c6271d34]Default [/b:13c6271d34]estejam setadas para [b:13c6271d34]true[/b:13c6271d34]. E isso é perfeitamente normal. O componente [b:13c6271d34]TButton [/b:13c6271d34]da VCL tbm se comporta assim.
Não há nada errado com o componente.
[]´s
GOSTEI 0
Alex Maia
19/11/2005
Só que não uso o OnKeyPress, mas sim o OnKeyDown.
Para ver se funciona a captura dessas teclas, crie um novo projeto, adicione um label, adicione um XiButton no form, mude a propriedade do keypreview do form para True e no evento OnKeyDown do form use o seguinte comando:
if key = vk_F1 Then Label1.caption:=´TeclaF1´;
Neste exemplo, se o foco estiver no botão e a tecla F1 for pressionada o label1 não receberá o texto (TeclaF1). Este é o problema...
Alguem sabe me informar por que isso acontece??
Que código falta neste botão?
Desde já agradeço.
Para ver se funciona a captura dessas teclas, crie um novo projeto, adicione um label, adicione um XiButton no form, mude a propriedade do keypreview do form para True e no evento OnKeyDown do form use o seguinte comando:
if key = vk_F1 Then Label1.caption:=´TeclaF1´;
Neste exemplo, se o foco estiver no botão e a tecla F1 for pressionada o label1 não receberá o texto (TeclaF1). Este é o problema...
Alguem sabe me informar por que isso acontece??
Que código falta neste botão?
Desde já agradeço.
GOSTEI 0
Martins
19/11/2005
Olá!
Testei aqui e comigo funcionou perfeitamente. O componente só sobrepõe as teclas configuradas no evento [b:6b5fff7f41]OnKeyPress [/b:6b5fff7f41]do formulário caso as propriedades [b:6b5fff7f41]Cancel[/b:6b5fff7f41] e/ou [b:6b5fff7f41]Default [/b:6b5fff7f41]estejam setadas para [b:6b5fff7f41]true[/b:6b5fff7f41]. E isso é perfeitamente normal. O componente [b:6b5fff7f41]TButton [/b:6b5fff7f41]da VCL tbm se comporta assim.
Não há nada errado com o componente.
[]´s
Foi isso q eu disse no tópico anterior.
Naõ baixei o componente, mas se o colega puder enviar uma cópia para martinsbios@gmail.com posso dar uma olhada nele, mas o Michael já olhou e já postou sobre o mesmo.
Esse seu componente é derivado de qual calsse?
Espero q esse problema se resolva.
Boa Sorte!!!
GOSTEI 0
Martins
19/11/2005
Não precisa mais mandar o código pro meu e-mail, eu peguei novamente o link passado pelo massuda, estou sem delphi, mas amnhã baixo ele lá no trampo, e dou uma olhada nele para vc.
Outra coisa q vc deve levar em conta é q ele deve ter as propriedades:
OnKeyDown
OnKeyPress
Então se o foco cai sobre o botão ele vai esperar q a tecla de função pressionada dispare algum evento escrito nestas propriedades, faça um teste e coloque alguma coisa lá no evento OnKeyDown e veja se é executado, deverá ser, estou atirando no escuro pois não sei realmente como está se comportando esse componente, por isso continua valendo a dica do Michael.
Agora se vc não quer ter q mudar isso em todos os seu botões, então deixe essas propriedades como true por default, pq elas devem está false, isso no código do componente.
Amanhã vejo esses fontes e posso me situar.
Boa sorte!!!
Outra coisa q vc deve levar em conta é q ele deve ter as propriedades:
OnKeyDown
OnKeyPress
Então se o foco cai sobre o botão ele vai esperar q a tecla de função pressionada dispare algum evento escrito nestas propriedades, faça um teste e coloque alguma coisa lá no evento OnKeyDown e veja se é executado, deverá ser, estou atirando no escuro pois não sei realmente como está se comportando esse componente, por isso continua valendo a dica do Michael.
Testei aqui e comigo funcionou perfeitamente. O componente só sobrepõe as teclas configuradas no evento OnKeyPress do formulário caso as propriedades Cancel e/ou Default estejam setadas para true. E isso é perfeitamente normal. O componente TButton da VCL tbm se comporta assim.
Agora se vc não quer ter q mudar isso em todos os seu botões, então deixe essas propriedades como true por default, pq elas devem está false, isso no código do componente.
Amanhã vejo esses fontes e posso me situar.
Boa sorte!!!
GOSTEI 0
Alex Maia
19/11/2005
Caros amigos,
Mais uma vez volto a dizer que há um erro no componente que estou usado e que, por isso, preciso de uma ajuda de vcs.
Para quem desejar me ajudar o link para baixar os componentes é http://deadlogic.co.nr/
Eu uso o delphi 7 e para comprovar vcs podem fazer o seguinte: para ver se funciona a captura dessas teclas crie um novo projeto, adicione um label, adicione um XiButton no form, adicione um Button do delphi no form tambem; mude a propriedade do keypreview do form para True e no evento OnKeyDown do form use o seguinte comando:
if key = vk_F1 Then Label1.caption:=´TeclaF1´;
Compile e execute o aplicativo. Clique no XiButton e depois pressione a tecla F1. Observe que se o foco estiver no XiButton e a tecla F1 for pressionada, o label1 não recebe o texto ´TeclaF1´.
Agora clique no Button e depois pressione a tecla F1. É a mesma operação, mas veja que se o foco estiver no Button e a tecla F1 for pressionada, o label1 recebe o texto ´TeclaF1´.
Este é o problema...
Em virtude disso amigos, eu pergunto:
Alguem sabe me informar por que isso acontece??
Que código falta neste botão?
Desde já agradeço.
Mais uma vez volto a dizer que há um erro no componente que estou usado e que, por isso, preciso de uma ajuda de vcs.
Para quem desejar me ajudar o link para baixar os componentes é http://deadlogic.co.nr/
Eu uso o delphi 7 e para comprovar vcs podem fazer o seguinte: para ver se funciona a captura dessas teclas crie um novo projeto, adicione um label, adicione um XiButton no form, adicione um Button do delphi no form tambem; mude a propriedade do keypreview do form para True e no evento OnKeyDown do form use o seguinte comando:
if key = vk_F1 Then Label1.caption:=´TeclaF1´;
Compile e execute o aplicativo. Clique no XiButton e depois pressione a tecla F1. Observe que se o foco estiver no XiButton e a tecla F1 for pressionada, o label1 não recebe o texto ´TeclaF1´.
Agora clique no Button e depois pressione a tecla F1. É a mesma operação, mas veja que se o foco estiver no Button e a tecla F1 for pressionada, o label1 recebe o texto ´TeclaF1´.
Este é o problema...
Em virtude disso amigos, eu pergunto:
Alguem sabe me informar por que isso acontece??
Que código falta neste botão?
Desde já agradeço.
GOSTEI 0
Martins
19/11/2005
{================================================================
XiButton 1.13
Written by Eugene Genev
=================================================================}
unit XiButton;
interface
uses
Windows, Classes, Controls, Graphics, Messages, Forms, Dialogs,
Math, SysUtils;
type
TBtnState = (bsNormal, bsOver, bsDown);
TButtonLayout = (blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom);
TColorScheme = (csNeoDesert, csNeoSky, csNeoGrass, csNeoSilver,
csNeoRose, csNeoSun,
csDesert, csGrass, csSky, csSun, csRose, csSilver, csCustom);
TXiButton = class(TCustomControl)
private
FColorFace: TColor;
FColorGrad: TColor;
FColorBorder: TColor;
FColorLight: TColor;
FColorDark: TColor;
FColorText: TColor;
FOverColorFace: TColor;
FOverColorGrad: TColor;
FOverColorBorder: TColor;
FOverColorLight: TColor;
FOverColorDark: TColor;
FOverColorText: TColor;
FDownColorFace: TColor;
FDownColorGrad: TColor;
FDownColorBorder: TColor;
FDownColorLight: TColor;
FDownColorDark: TColor;
FDownColorText: TColor;
FDisabledColorFace: TColor;
FDisabledColorGrad: TColor;
FDisabledColorBorder: TColor;
FDisabledColorLight: TColor;
FDisabledColorDark: TColor;
FDisabledColorText: TColor;
FColorFocusRect: TColor;
FFocused: Boolean;
FColorScheme: TColorScheme;
FCtl3D: boolean;
FLayout: TButtonLayout;
FGlyph: TBitmap;
FTransparentGlyph: Boolean;
FGradient: Boolean;
FSpacing: integer;
FModalResult: TModalResult;
FCancel: Boolean;
FDefault: Boolean;
FHotTrack: Boolean;
FClicked: Boolean;
procedure SetColors(Index: integer; Value: TColor);
procedure SetColorScheme(Value: TColorScheme);
procedure SetCtl3D(Value: Boolean);
procedure SetLayout(Value: TButtonLayout);
procedure SetGlyph(Value: TBitmap);
procedure SetTransparentGlyph(Value: Boolean);
procedure SetGradient(Value: Boolean);
procedure SetSpacing(Value: Integer);
procedure SetModalResult(Value: TModalResult);
procedure SetCancel(Value: Boolean);
procedure SetDefault(Value: Boolean);
procedure SetHotTrack(Value: Boolean);
procedure GradientFillRect(Canvas: TCanvas; Rect: TRect;
StartColor, EndColor: TColor);
protected
FBtnState: TBtnState;
procedure Paint; override;
procedure Click; Override;
procedure MouseEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure MouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove (Shift: TShiftState; X, Y: Integer); override;
procedure WMSetFocus(var msg: TWMSetFocus); message WM_SETFOCUS;
procedure WMKillFocus(var msg: TWMKillFocus); message WM_KILLFOCUS;
procedure WMKeyUp(var msg: TWMKeyUp); message WM_KEYUP;
procedure WMKeyDown(var msg: TWMKeyDown); message WM_KEYDOWN;
procedure CMDialogKey(var msg: TCMDialogKey); message CM_DIALOGKEY;
procedure CMDialogChar(var msg: TCMDialogChar); message CM_DIALOGCHAR;
procedure CMTextChanged (var msg: TMessage); message CM_TEXTCHANGED;
procedure CMFontChanged(var msg: TMessage); message CM_FONTCHANGED;
procedure CMEnabledChanged (var msg: TMessage); message CM_ENABLEDCHANGED;
function GetColorScheme: TStringList;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property ColorFace: TColor index 0 read FColorFace write SetColors;
property ColorGrad: TColor index 1 read FColorGrad write SetColors;
property ColorDark: TColor index 2 read FColorDark write SetColors;
property ColorLight: TColor index 3 read FColorLight write SetColors;
property ColorBorder: TColor index 4 read FColorBorder write SetColors;
property ColorText: TColor index 5 read FColorText write SetColors;
property OverColorFace: TColor index 6 read FOverColorFace write SetColors;
property OverColorGrad: TColor index 7 read FOverColorGrad write SetColors;
property OverColorDark: TColor index 8 read FOverColorDark write SetColors;
property OverColorLight: TColor index 9 read FOverColorLight write SetColors;
property OverColorBorder: TColor index 10 read FOverColorBorder write SetColors;
property OverColorText: TColor index 11 read FOverColorText write SetColors;
property DownColorFace: TColor index 12 read FDownColorFace write SetColors;
property DownColorGrad: TColor index 13 read FDownColorGrad write SetColors;
property DownColorDark: TColor index 14 read FDownColorDark write SetColors;
property DownColorLight: TColor index 15 read FDownColorLight write SetColors;
property DownColorBorder: TColor index 16 read FDownColorBorder write SetColors;
property DownColorText: TColor index 17 read FDownColorText write SetColors;
property DisabledColorFace: TColor index 18 read FDisabledColorFace write SetColors;
property DisabledColorGrad: TColor index 19 read FDisabledColorGrad write SetColors;
property DisabledColorDark: TColor index 20 read FDisabledColorDark write SetColors;
property DisabledColorLight: TColor index 21 read FDisabledColorLight write SetColors;
property DisabledColorBorder: TColor index 22 read FDisabledColorBorder write SetColors;
property DisabledColorText: TColor index 23 read FDisabledColorText write SetColors;
property ColorFocusRect: TColor index 24 read FColorFocusRect write SetColors;
property ColorScheme: TColorScheme read FColorScheme write SetColorScheme;
property Ctl3D: Boolean read FCtl3D write SetCtl3D;
property Layout: TButtonLayout read FLayout write SetLayout;
property Glyph: TBitmap read FGlyph write SetGlyph;
property Spacing: integer read FSpacing write SetSpacing;
property TransparentGlyph: Boolean read FTransparentGlyph write SetTransparentGlyph;
property Gradient: Boolean read FGradient write SetGradient;
property HotTrack: Boolean read FHotTrack write FHotTrack;
property Action;
property Align;
property Anchors;
property BiDiMode;
property Cancel: Boolean read FCancel write FCancel default False;
property Caption;
property Constraints;
property Default: Boolean read FDefault write SetDefault default False;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property ModalResult: TModalResult read FModalResult write SetModalResult default 0;
property ParentBiDiMode;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop default True;
property Visible;
property OnClick;
// property OnContextPopup;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;
Se alguém encontrar uma propriedade q esteja faltando ou q não deveria está nesse código, por favor, comente.
GOSTEI 0
Michael
19/11/2005
Corrija o método [b:a64646ffe0]WMKeyDown[/b:a64646ffe0], deixando-o assim:
Isto resolverá o problema.
[]´s
procedure TXiButton.WMKeyDown(var msg: TWMKeyDown); begin if msg.CharCode = VK_SPACE then FBtnState:= bsDown else if msg.CharCode = VK_RETURN then Click else inherited; Paint; end;
Isto resolverá o problema.
[]´s
GOSTEI 0
Michael
19/11/2005
Na verdade, deveria ficar assim:
[b:0baf0111a8]inherited[/b:0baf0111a8] deve, na maioria dos casos, ser a primeira coisa executada em métodos sobrescritos. O problema do componente era justamente esse: ele não executava o código original de TCustomControl, que propagava a tecla pressionada para o Parent do componente, no caso, o Form.
[]´s
procedure TXiButton.WMKeyDown(var msg: TWMKeyDown); begin inherited; if msg.CharCode = VK_SPACE then FBtnState:= bsDown else if msg.CharCode = VK_RETURN then Click; Paint; end;
[b:0baf0111a8]inherited[/b:0baf0111a8] deve, na maioria dos casos, ser a primeira coisa executada em métodos sobrescritos. O problema do componente era justamente esse: ele não executava o código original de TCustomControl, que propagava a tecla pressionada para o Parent do componente, no caso, o Form.
[]´s
GOSTEI 0
Alex Maia
19/11/2005
Caros amigos,
Muito obrigado pela ajuda que vcs me prestaram. Desde já eu lhes desejo um Feliz Natal e um Próspero Ano Novo.
Valeu!!!
Muito obrigado pela ajuda que vcs me prestaram. Desde já eu lhes desejo um Feliz Natal e um Próspero Ano Novo.
Valeu!!!
GOSTEI 0