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