IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Convertir un Message Windows de la VCL vers FMX


Sujet :

Composants FMX Delphi

  1. #1
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 754
    Points : 943
    Points
    943
    Par défaut Convertir un Message Windows de la VCL vers FMX
    Bonjour,

    J'ai cette ligne la dans un composant VCL, et je voudrais la convertir sous Firemonkey:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
    Voici le contenue de la procédure appelé par le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TShowImages.CMHintShow(var Message: TCMHintShow);
    var
      mp : TPoint;
    begin
      inherited;
      if assigned(FOnHint) then
        begin
          mp := Mouse.CursorPos;
          mp := ScreenToClient(mp);
          FOnHint(Self, mp.X, mp.y, Message.HintInfo.HintStr);
        end;
    end;
    Avez-vous une idée sur comment je pourrait migrer ce bout de code pour que cela fonctionne pas que sous Windows (genre le Mac) ?

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    un simple code comme ci-dessous aurais peut être suffit non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    procedure TMAFORME.MONOBJETMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);        
    ...
    Begin
      If MesCondition then 
      begin
        (Sender as TMONOBJET).Hint := 'Je fait ce que je veut ';
        Application.HintPause := 1;
        Application.ActivateHint(Mouse.CursorPos);
      end 
      else 
      begin
         Application.HintPause := 500;
         Application.CancelHint;
      end; 
    ...
    end;
    autre solution
    dans le formCreate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      OldShowHint :=  Application.OnShowHint;
      Application.OnShowHint := DoShowHint;
    dans le FormClose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Application.OnShowHint := OldShowHint ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    procedure TMaForm.DoShowHint(var HintStr: String ; var CanShow: Boolean; var HintInfo: THintInfo);
    Var
      ...
      st : String;
    begin
      with HintInfo do
      begin
        if HintControl is TMONCONTROL then
        begin
          if HintControl.Name = 'NOMDEMONCONTROLE' Then
          begin
              Application.HideHint;
              HideTimeout     := 5000;
              HintColor     := clWhite;
                if MesConditionS then
                    HintStr := 'C est bien mon Hint '   //Fields[x-1].AsString
                  else
                    HintStr := '';
               CanShow := MesConditionS
          end;  
        end;
      end;
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 754
    Points : 943
    Points
    943
    Par défaut
    Merci Anapurna,

    Ma question est plus comment en Firemonkey on peut convertir les messages Windows pour que cela fonctionne sous tout les OS

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    pour pallier aux messages si il n'existe pas dans le système est de passer par des callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    unit MessageHandler
      interface
         TOSMessage = procedure(aMessageID, aData1, aData2: integer) of object;
         TOSMessageHandler = class
         private
            fOnMessage : TOSMessage;
         public
            constructor Create(aMessageCallBack: TOSMessage);
            procedure PostMessage(aMessageID, aData1, aData2: integer; aSourceThread: TThread = nil);
        end;
     
    var
       OSMessageHandler : TOSMessageHandler;
     
    implementation
     
    constructor TOSMessageHandler.Create(aMessageCallBack: TOSMessage);
    begin
      fOnMessage := aMessageCallBack;
    end;
     
    procedure TOSMessageHandler.PostMessage(aMessageID, aData1, aData2: integer; aSourceThread: TThread);
    begin
      if aSourceThread=nil then
        aSourceThread  := TThread.CurrentThread;
      aSourceThread.Queue(nil, procedure
                               begin
                                 if Assigned(fOnMessage) then
                                    fOnMessage(aMessageID, aData1, aData2);
                               end  );
    end;
    end.
     
    //Ajout dans la form principal:
    TMainForm = class(TForm)
    ...
    procedure MessageCallBack(aMessageID, aData1, aData2: integer);
    ...
    end;
    ///
    Implementation
    //Ajout dans le create de la main Form 
      OSMessageHandler := TOSMessageHandler.Create(MessageCallBack);
     
    //AJout dans le destroye de la main Form
      FreeAndNil(OSMessageHandler)
     
    // Ici la gestion des messages 
    procedure TMainForm.MessageCallBack(aMessageID, aData1, aData2: integer);
    begin
      case aMessageID of
        MyMessage1 :  MyFunction1(aData1,aData2);
        ...
      end;
    end;
    ou de réécrire le système de message comme
    a fait françois Piette sur son blog
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 754
    Points : 943
    Points
    943
    Par défaut
    Merci anapurna

  6. #6
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 754
    Points : 943
    Points
    943

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 14h41
  2. Réponses: 2
    Dernier message: 06/04/2004, 09h39
  3. Interception Messages Windows
    Par tiramisu dans le forum MFC
    Réponses: 5
    Dernier message: 24/02/2004, 15h01
  4. Réponses: 13
    Dernier message: 14/01/2004, 17h35
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo