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

Lazarus Pascal Discussion :

Unités Messages et LMessages


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut Unités Messages et LMessages
    Bonjour,

    1. je cherche à comprendre pourquoi, il y a deux unités pour les mêmes fonctions d'interception des messages.
    TLMessage est définie Ligne 733 : TLMessage = TMessage; comme égal à TMessage;

    2. Est-ce que ça signifie que LMessage qui a été écrite en 1999 remplacera TMessage ou l'inverse car il semble qu'il y a plus de code dans Messages.inc.

    3. Et pour ceux qui savent est-ce que le dispatch au niveau global de l'application qui existait sous Delphi avec Application.onMessage existe un équivalent sous l'azarus puisque onMessage n'est plus une propriété de TApplication.
    C'est à dire par défaut quand un message n'est n'a pas de cible bien déterminée dans les contrôles existant...

    J'essaye de voir aussi s'il y a une procédure qui intercepte les messages du système avant qu'il ne parviennent à un éventuel contrôle.

    Merci pour vos éclairages.
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  2. #2
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    L'unité Messages définit tous les messages spécifiques à Windows utilisables par une application. Cette unité assure la compatibilité avec Delphi, mais n'est pas utilisable avec les applications non-Windows.

    C'est pourquoi Lazarus dispose de l'unité LMessages qui définit les messages pouvant être utilisés par une application sous n'importe quel système. Sous Windows, LMessages inclut l'unité Messages.

    Pour éviter des erreurs de duplication, la première lettre des messages "non-Windows' débutent par un 'L' au lieu d'un 'W'. Exemple LM_KEYDOWN.

    Application.Onmessage n'existe pas sous Lazarus parce qu'elle n'est pas compatible avec les applications non-Windows. Néanmoins, il est possible d'intercepter certains événements au niveau de l'application grâce à des procédures, par exemple Application.OnMinimize, qui est similaire à l’interception du message SC_MINIMIZE de Application.OnMessage de Delphi.

    bb84000

  3. #3
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par bb84000 Voir le message
    Bonjour,
    ...
    Néanmoins, il est possible d'intercepter certains événements au niveau de l'application grâce à des procédures, par exemple Application.OnMinimize, qui est similaire à l’interception du message SC_MINIMIZE de Application.OnMessage de Delphi.

    bb84000
    Merci BB84000 pour ta réponse éclairante.
    Donc pour nos amis qui n'utilisent pas Windows, mieux vaut utiliser LMessages pour la comptabilité du code!

    Tu dis que Application.OnMinimize intercepte les messages au niveau système, mais la propriété OnMinimize est loin de recouvrir les propriétés utilisées avec OnMessages...

    Je vais donc vérifier la hiérarchie des autres fonctions pour voir si ça fonctionne avec Lazarus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        procedure WndProc (var Message: TMessage); override;
        procedure Dispatch (var Message);override;
        procedure DefaultHandler (var Message); override;
    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  4. #4
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jlmat Voir le message
    Donc pour nos amis qui n'utilisent pas Windows, mieux vaut utiliser LMessages pour la compatibilité du code!
    Même sous Windows, si on veut un code portable, il faut utiliser LMessages.

    Citation Envoyé par Jlmat Voir le message
    Tu dis que Application.OnMinimize intercepte les messages au niveau système...
    Non, relis ma phrase, j'ai écrit qu'elle est similaire à l'interception du message SC_MINIMIZE de Application.OnMessage de Delphi. Il y a d'autres evenements de ce type dans Application pour intercepter autre chose que SC_MINIMIZE.

    Citation Envoyé par Jlmat Voir le message
    Je vais donc vérifier la hiérarchie des autres fonctions pour voir si ça fonctionne avec Lazarus:
    Oui, et elles sont portables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        procedure WndProc(var TheMessage: TLMessage); override;
        procedure Dispatch (var Message);override;
        procedure DefaultHandler(var AMessage); override;
    bb84000

  5. #5
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Bonsoir,

    J'essaye de comprendre le niveau hiérarchique des messages sous Lazarus, mais je n'arrive pas à intercepter les messages et les dispatcher pour connaître leur destinataires :
    Voici mon test en l'état:
    Un fenêtre avec plusieurs zones et contrôles avec un memo (en bleu) pour enregistrer les différentes étapes du code:

    Nom : Msg1.jpg
Affichages : 327
Taille : 39,9 Ko

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
      Messages;//,Windows;
     
     
    type
      TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object;
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Image1: TImage;
        Label1: TLabel;
        ListBox1: TListBox;
        Memo1: TMemo;
        Panel1: TPanel;
        procedure FormCreate  (Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure FormShow    (Sender: TObject);
        procedure FormPaint   (Sender: TObject);
      private
        procedure MaGestionMessages (var Msg: TMsg; var Handled: Boolean);
        procedure MainWndProc (var Message : TMessage);// override;
        procedure Dispatch    (var Message);
      public
     
      end;
     
    var
      Form1  : TForm1;
      NEvent : integer = 0;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
     var Hbool : Boolean;
         Mes   : TMsg;
    begin
      memo1.Clear;
      Inc(NEvent);
      //Application.HandleMessage := MaGestionMessages(Mes,HBool);
    end;
     
    procedure TForm1.MaGestionMessages (var Msg: TMsg; var Handled: Boolean);
    begin
      Inc(NEvent);
      Case Msg.message of
       WM_ACTIVATE :;
       WM_PAINT    :;
       WM_ENABLE   :;
       WM_LBUTTONDOWN :
       begin
         memo1.Lines.add(inttostr(NEvent)+' : '+'WM_LBUTTONDOWN = '+'Lparam = '+inttostr(Msg.lParam)+' WParam = '+inttostr(Msg.wParam)+' à '+inttostr(Msg.time));
       end;
       WM_MOUSEMOVE :
       begin
         memo1.Lines.add(inttostr(NEvent)+' : '+'WM_MOUSEMOVE = '+'Lparam = '+inttostr(Msg.lParam)+' WParam = '+inttostr(Msg.wParam)+' à '+inttostr(Msg.time));
       end;
       WM_MOUSEWHEEL :;
       WM_HSCROLL    :;
     
     End; // case
     
     inherited;
    end;
     
    procedure TForm1.Dispatch(var Message);
      var MS : String;
    begin
      Inc(NEvent);
      MS := 'Wparam = '+inttostr(TMessage(Message).WParam)+' / LParam = '+inttostr(Tmessage(Message).lParam);
      Case TMessage(Message).msg of
        WM_ACTIVATE :;
        WM_PAINT    :;
        WM_ENABLE   :;
        WM_LBUTTONDOWN :
        begin
          memo1.Lines.add(inttostr(NEvent)+' : '+'Dispatch WM_LBUTTONDOWN = '+ MS);
        end;
        WM_MOUSEMOVE :
        begin
          memo1.Lines.add(inttostr(NEvent)+' : '+'Dispatch WM_MOUSEMOVE = '+ MS);
        end;
        WM_MOUSEWHEEL :;
        WM_HSCROLL    :;
     
      End; // case
     
      inherited;
    end;
     
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      Inc(NEvent);
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      Inc(NEvent);
    end;
     
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      Inc(NEvent);
    end;
     
    {procedure TForm1.MyMessageHandler (var Message: TLMessage);
      var MS : String;
    begin
      case Message.wParam of
        1: MS := '< Emetteur Message >';
        2: MS := '< Recepteur Message >';
      else
        MS := '< Attente Message >'
      end;
      Memo1.Lines.Add('Message de : ' + MS);
    end;
    }
     
    {procedure TForm1.WndProc(var Message: TMessage);
    begin
      if Message.Msg = WM_LBUTTONDOWN then memo1.Lines.Add('WM_LBUTTONDOWN');
    end;
    }
     
    procedure TForm1.MainWndProc(var Message : TMessage);
    begin
      if Message.Msg = WM_LBUTTONDOWN then
      begin
        Inc(NEvent);
        memo1.Lines.add(inttostr(NEvent)+' WndProc : '+'WM_LBUTTONDOWN = '+'Lparam = '+inttostr(Message.lParam)+' WParam = '+inttostr(Message.wParam)+' à '+inttostr(Message.Result));
      end;
      inherited;
    end;
     
     
    end.
    Je voudrais centraliser les informations sur certains évènements, comme un mouvement de la souris sur zone, un contrôle, une image ou même une fermeture d'une fenêtre ou sa création en dehors de la fiche principale. Non prévue en l'état dans le code..., Dans le Test final, il y aura plusieurs fenêtres et donc une centralisation des données sur la Fiche principale. Pour compléter un tuto en cours d'écriture...

    ma question: pourquoi je ne capte rien. C'est vrai que je n'ai pas trouvé l'équivalent de onMessage dans les proprétés de Application...
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  6. #6
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Il vous faut utiliser les événements propres à chaque composant de la forme. Pour la souris, vous utilisez les événements "OnMousexxxxx", par exemple OnMouseDown, qui vous permet de savoir quand un bouton de la souris a été pressé et lequel, à quelle position sur le composant, et bien entendu à quel moment si vous le souhaitez. C'est la même chose qu'avec Delphi.

    A demain pour plus de détails...


    bb84000

  7. #7
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonsoir,

    Juste un bout de code pour traiter l'entrée et la sortie du curseur de la souris de plusieurs composants de votre forme, ainsi que sa position, ici le panel et l'image :

    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
    procedure TForm1.MouseLeave(Sender: TObject);                 // procédure assignée à l'événement OnMouseLeave des composants que vous voulez traiter
    begin
      if Sender.ClassNameIs('TPanel') then
        Memo1.Lines.Add('Mouse leave '+TPanel(Sender).Name);
      if Sender.ClassNameIs('TImage') then
        Memo1.Lines.Add('Mouse leave '+TImage(Sender).Name);
    end;
     
    procedure TForm1.MouseEnter(Sender: TObject);                          // idem pour les événements OnMouseEnter
    begin
      if Sender.ClassNameIs('TPanel') then
        Memo1.Lines.Add('Mouse enter in '+TPanel(Sender).Name);
      if Sender.ClassNameIs('TImage') then
        Memo1.Lines.Add('Mouse enter in '+TImage(Sender).Name);
    end;
     
    procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);  // La on récupère la position du curseur, affichée dans Label1
    var
      s: string;
    begin
      if Sender.ClassNameIs('TPanel') then s:= TPanel(Sender).Name;
      if Sender.ClassNameIs('TImage') then s:= TImage(Sender).Name;
      if Sender.ClassNameIs('TForm1') then s:= TForm1(Sender).Name;
      Label1.Caption:= Format('Position x=%u y=%u on %s', [X, Y, s]);
    end;
    bb84000

  8. #8
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Je reviens comme promis.

    Dans le cas ou l'application ouvre plusieurs fenêtres, on peut utiliser le même principe, en ajoutant le nom de la fenêtre principale dans une clause uses après implementation pour pouvoir écrire dans memo1 et/ou listbox1 et label1 lors des événements des autres fenêtres.

    Ici j'utilise Button1 de Form1 pour ouvrir la fenêtre Form2, voici le code pour la fenêtre principale :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    unit exemple11;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls;
     
    type
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Image1: TImage;
        Label1: TLabel;
        ListBox1: TListBox;
        Memo1: TMemo;
        Panel1: TPanel;
     
        procedure Button1Click(Sender: TObject);
        procedure MouseLeave(Sender: TObject);
        procedure MouseEnter(Sender: TObject);
        procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
          );
      private
     
      public
     
      end;
     
    var
      Form1  : TForm1;
      NEvent : integer = 0;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
    uses exemple21;
     
    procedure TForm1.MouseLeave(Sender: TObject);
    begin
      if Sender.ClassNameIs('TPanel') then
        Memo1.Lines.Add('Mouse leave '+TPanel(Sender).Name);
      if Sender.ClassNameIs('TImage') then
        Memo1.Lines.Add('Mouse leave '+TImage(Sender).Name);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.Show;
    end;
     
    procedure TForm1.MouseEnter(Sender: TObject);
    begin
      if Sender.ClassNameIs('TPanel') then
        Memo1.Lines.Add('Mouse enter in '+TPanel(Sender).Name);
      if Sender.ClassNameIs('TImage') then
        Memo1.Lines.Add('Mouse enter in '+TImage(Sender).Name);
    end;
     
    procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      s: string;
    begin
      if Sender.ClassNameIs('TPanel') then s:= TPanel(Sender).Name;
      if Sender.ClassNameIs('TImage') then s:= TImage(Sender).Name;
      if Sender.ClassNameIs('TForm1') then s:= TForm1(Sender).Name;
        Label1.Caption:= Format('Position x=%u y=%u on %s', [X, Y, s]);
    end;
     
    end.
    Et voici le code pour la forme 2 :

    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
    unit exemple21;
     
    {$mode ObjFPC}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
     
    type
     
      { TForm2 }
     
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormHide(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    uses exemple11;
     
    {$R *.lfm}
     
    { TForm2 }
     
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      Form1.Memo1.Lines.Add(TButton(Sender).Name+' click on '+Form2.Name);
    end;
     
    procedure TForm2.FormHide(Sender: TObject);
    begin
      Form1.Memo1.Lines.Add(Form2.Name+' hiden');
    end;
     
    procedure TForm2.FormShow(Sender: TObject);
    begin
      Form1.Memo1.Lines.Add(Form2.Name+' shown');
    end;
     
    end.
    Notez que pour la position de la souris, j'utilise un Tlabel et pas le mémo ou une liste, il y aurait bien trop de lignes !

    A vous de compléter ou modifier avec les événements que vous voulez capturer.

    bb84000

  9. #9
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par bb84000 Voir le message
    Bonjour,
    ... Il vous faut utiliser les événements propres à chaque composant de la forme.
    Merci bb pour tes réponses, mais je sais utiliser les événements des contrôles et même les centraliser, comme tu le propose dans ton post précédent.
    Mais ma question touchait l'utilisation de l'interception des messages dans une forme de hiérarchisation depuis le niveau de l'application jusque dans un contrôle individuel... On arrivait à faire ça avec OnMessage!

    Je dois mal m'exprimer, il faut que je réfléchisse comment poser le problème!

    J'ai pensé à une solution de type "je créer mon message et ensuite je gère tous les messages sur la fenêtre depuis des évènements fenêtre jusqu'aux touches clavier où qu'elles soient ect." Bon je vais essayé d'avancer de mon côté...

    A
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  10. #10
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jlmat Voir le message
    Mais ma question touchait l'utilisation de l'interception des messages dans une forme de hiérarchisation depuis le niveau de l'application jusque dans un contrôle individuel... On arrivait à faire ça avec OnMessage!
    Oui, mais cela n'existe pas sous Lazarus. Clairement, ce n'est pas l'outil le mieux approprié pour aller dans les entrailles de Windows, même si on doit pouvoir le faire en rusant.
    Si votre application est exclusivement Windows, vous trouverez peut-être votre bonheur là :
    https://wiki.lazarus.freepascal.org/..._Interface#FAQ

    bb84000

  11. #11
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par bb84000 Voir le message
    Bonjour,

    Oui, mais cela n'existe pas sous Lazarus. Clairement, ce n'est pas l'outil le mieux approprié pour aller dans les entrailles de Windows, même si on doit pouvoir le faire en rusant.
    Si votre application est exclusivement Windows, vous trouverez peut-être votre bonheur là :
    https://wiki.lazarus.freepascal.org/..._Interface#FAQ

    bb84000
    Ok, je prends note... C'est ce qui m'a semblé vu le temps que j'ai passé à cherché l'info...

    J'avais vu le lien que tu donnes, et j'ai bien compris qu'on pouvait passer par des CallBack avec CallWindowProc mais bon... C'est vrai qu'il faut que ce soit justifié et ne suis pas sur de pouvoir maitriser ce genre de code...
    D'ailleurs, ça ne concerne que Windows et non pas les autres plateformes... C'est pour ça que LMessages m'intéressait...

    Bon, je laisse la discussion ouverte, dès fois que j'aboutirais à quelque chose d'intéressant ou pour échanger encore sur le sujet....

    Merci encore pour ton aide
    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  12. #12
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Vous pouvez aussi allez voir :
    https://forum.lazarus.freepascal.org...?topic=49427.0
    qui traite exactement de votre sujet...

    bb84000

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2020, 17h16
  2. [Lazarus] Message d'avertissement : unités ZEOS dupliquées
    Par OR34a dans le forum Lazarus
    Réponses: 4
    Dernier message: 17/10/2016, 08h04
  3. Réponses: 1
    Dernier message: 12/06/2008, 18h03
  4. [Débutant] Erreur "can't find unit Messages"
    Par Gargoyle dans le forum Pascal
    Réponses: 6
    Dernier message: 07/04/2007, 00h49
  5. A lire impérativement avant de poster un message
    Par ok.Idriss dans le forum Demandes
    Réponses: 0
    Dernier message: 01/05/2002, 18h57

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