Ajout Handle

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 26 août 2008 à 19:26
 Utilisateur anonyme - 27 août 2008 à 12:38
Bonjour , c'est encore moi (ce soir j'use enfin du forum  )

j'aimerais bien intercepter les touches down et up mais pour ca il faut choper le focus du composant mais
Pour qu'un composant chope le focus , il lui faut absolument un Handle , d'où ma question extrêmement simple , peut on ajouter 1 handle  à n'importe quel composant ?

(* En partant de TStaticKey qui lui possede 1 handle , donc possibilite de focus ... *)
unit KeyStaticText;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TMyStatic = class (TStaticText)

  private
    procedure WmKeyDown(var Message: TMessage); message WM_KEYDOWN;
    procedure WmKeyUp(var Message: TMessage); message WM_KEYUP;
  public

  end;

implementation

procedure TMyStatic.WmKeyDown(var Message: TMessage);
begin
  ShowMessage('Appuyé '+IntToStr(Message.WParam));
end;

procedure TMyStatic.WmKeyUp(var Message: TMessage);
begin
  //ShowMessage('Relache '+IntToStr(Message.WParam));
end;

end.

il suffit d'en cree 1 , de faire SetFocus et le tour est joué

Mais si on Part d'1 TLabel ca se complique vu qu'il n'a pas de Handle

Donc si qq1 à une idée de comment faire ou a le lien d'1 article interressant je suis preneur

Merci (c'est la dernière de la soirée ; promis)

3 réponses

Utilisateur anonyme
27 août 2008 à 02:54
Salut Nico,

Un handle est juste un identifiant numérique donc oui tu peux rajouter un handle a tout composant mais le probleme ne se pose pas là :

1)Il te faut un handle non utilisé
2) Il faut faire attention au changement de handle possible
3)Il faut que windows ne recrée pas un handle à un moment identique au tiens.

Autrement dit ca me semble pas possible.

Je n'ai pas lu ton message précédent mais le probleme que tu as est identique à celui qui se pose pour un compo qui n'a pas de canvas. Dans ce cas là il te faut changer de classe de base et c'est sur cette piste que je te conseille de te pencher
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
27 août 2008 à 07:06
Salut ,
J'avais bien compris les 3 règles mais je pensais qu'il etait possible d'en faire 1 (genre une fonction magique de windows ...)

Au fait , je ne dis pas trop  de conneries qd meme , pour intercepter le clavier (sur le compo ) , il faut que celui ci  ai le focus ?

Sinon je sais que je peux faire un hook mais ce n'est pas la meme chose
0
Utilisateur anonyme
27 août 2008 à 12:38
Salut;

Petit test : un TEdit sur une fiche et hop :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
showmessage('test');
end;

Si la fenetre est fermée l'évenement n'est pas déclenché, alors que si elle est ouverte et a le focus si. Donc oui ton composant doit avoir le focus. Change d'ancetre : tu vas te prendre un ptit peu la tete car il va falloir recoder des petits trucs mais en définitif tu gagneras du temps et tu auras beaucoup moins de probleme .
0
Rejoignez-nous