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

API, COM et SDKs Delphi Discussion :

[Composant] Intercepter message


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut [Composant] Intercepter message
    Salut, je suis en train de créer un composant qui necessite d'intercepter un message en direction de la form ( WM_NCPAINT) comment puis je faire.

    De plus, comment je peux changer de la barre de titre ou a defaut déplacer le menu.

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Tu veux changer ta barre de titre? pour quoi faire exactement...?

    Si tu veux changer son look, tu peux soit utiliser un composant ki change le skin de ta fenetre, soit supprimer ta barre de titre, et en créer une toi meme, sur mesure, ou tu affiche le titre et ou tu peux placer les boutons (fermer, reduire, etc...) ou tu veux exactement

    Je sais pas si j'ai repondu a ta question...

    ++

  3. #3
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    Citation Envoyé par Neo82
    Tu veux changer ta barre de titre? pour quoi faire exactement...?
    c'est effectivement ça, mais je ne souhaite pas passer par un composant de skin, d'abord parce q'ils sont payant, ensuite parceque je controle rien , 'est pour ça que j'ai entrepris de le faire moi même mais là ou je bloque c'est que je veux changer la taille de la barre de titre( l'agrandir en hauteur) mais j'y arrive pas et pourtant je sais que c'est faisable, SUISkin le fait.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Ce que tu peux faire, c'est de supprimer completment ta barre de titre (il me semble que c'est possible avec Delphi)

    Ensuite tu utilise le haut de ton composant form (ta fenetre koi....) pour placer un composant "label" qui contient "form.title" (il me semble que c'est ca...) et des boutons, à l'endroit ou tu le desire (comme ca c'est encore plus personnalisé), pour fermer agrandir et reduire ta form

    Enfin, tu différencie cette nouvelle barre de titre du reste de ta form en posant le tout sur un composant "panel", qui va contenir comme image de backgroung l'image de ton choix...

    Voila, tu as une toute nouvelle barre de titre

    A+

  5. #5
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    Oui, je connais cette technique, c'est celle que j'utilisais jusqu'a présent mais je trouve que c'est du "bricolage", ça t'oblige a crer des TImage & co pour rien et je suis obligé de refaire cette présentation a chaque fois que je fais une nouvelle appli, à l'aide d'un composant c'est plus simple et rapide.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    C'est sur que c'est de la bricole :)

    Tu peux a ce compte la essayer de faire toi meme un composant, qui repondra alors a toutes tes attentes!!

  7. #7
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    C'est justement ce que je suis en train de faire et je bloque sur cette interception du message WM_NCPAINT de la form sur laquelle je pose mon compo.

  8. #8
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut lil_jam63!
    Salut tous le monde!

    J'ai réalisé mon jeu d'Echecs un peu comme ça, sans barre de titre, et mes propres boutons en haut à droite... Pour déplacer la "form" (qui est un TPanel en réalité), il suffit de cliquer n'importe où sur celui-ci, déplacer et relacher la souris. Par contre, je n'ai pas rajouté une barre de titre, mais si j'avais dû, j'aurais utiliser un TImage + un TLabel probablement.
    Si tu es intérressé par cette "form", demande-moi. Je dois tout de même t'avertir que cela ajoute pas mal de code et l'utilisation de quelques évènements du genre OnMouseMove, OnMouseDown, OnMouseUp, ... à+

  9. #9
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    Merci de ta proposition Sub0 mais c'est exactement ce que j'utilisais déja, et comme j'ai dis un peu plus haut, je trouve que c'est du bricolage, j'ai étudié le comportement de SUISkin et je pense avoir trouvé quasiment tout ce qui m'interesse, le seul obstacle est que je n'arrive pas a intercepter ce message justement.

  10. #10
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Pour intercepter les messages, par exemple...
    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
    UNIT Unit1;
    INTERFACE 
    USES Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,
         Forms,Dialogs,StdCtrls;
     
    TYPE
      TForm1=CLASS(TForm)
      PROCEDURE ProcMess(var msg:TMsg; Var Handled:Boolean);
      PROCEDURE FormCreate(Sender:TObject);
      END;
     
    VAR Form1:TForm1;
     
     
    {----------------------------------------------------------------}
    {                       }IMPLEMENTATION{                         }
    {----------------------------------------------------------------}
    {$R *.DFM}
     
    {----------------------------------------------------------------}
    PROCEDURE TForm1.ProcMess(var msg:TMsg; Var Handled:Boolean);
    BEGIN
     IF(msg.Message=WM_RBUTTONDOWN)THEN Close;
    END;
     
    {----------------------------------------------------------------}
    PROCEDURE TForm1.FormCreate(Sender:TObject);
    BEGIN
     Application.OnMessage:=Form1.ProcMess;
    END;
     
    {----------------------------------------------------------------}
    END.
    Mais ça n'a pas l'air de fonctionner avec WM_NCPAINT... non?

  11. #11
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    En fait, je me suis mal exprimé Sub0, je cherche à intercepter le message WM_NCPAINT de la form sur laquelle mon composant est posé et celà a partir de mon composant directement et c'est là que ça se complique, pour l'interception c'est reglé puisque je vais surcharger ce message par la suite.

  12. #12
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Effectivement, ça ne va pas être évident pour t'aider sans ton compo sous la main pour faire des essais...
    Peut-être devrais-tu essayer avec WaitMessage ou GetMessage...?
    J'imagine que l'idéal est de surcharger ton compo pour créer l'évènement approprié...
    Mais en fait, il suffirait de comparer le "winhandle" du message avec celui de la fenêtre parente de ton compo, non?
    (hum, possible aussi que je sois hors-problème, dans ce cas, oublie! )

    Bon courage, à+

  13. #13
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    Ben en fait, je sais pas si ce que je veux faire est possible aussi donc faudrais deja que je me penche un peu plus sur le probleme et que je regarde si il y a pas une alternative

  14. #14
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    Et un truc dans ce genre, ça t'irais ?
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
      TTest = class(TMemo)
      private
        FWndProc: TWndMethod;
        procedure MyWndProc(var Message: TMessage);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    { TTest }
     
    constructor TTest.Create(AOwner: TComponent);
    begin
      inherited;
      if AOwner is TControl then
      begin
        FWndProc:= TControl(AOwner).WindowProc;
        TControl(AOwner).WindowProc:= MyWndProc;
      end
      else
        FWndProc:= nil;
    end;
     
    destructor TTest.Destroy;
    begin
      if Assigned(FWndProc) then
      begin
        TControl(Owner).WindowProc:= FWndProc;
        FWndProc:= nil;
      end;
      inherited;
    end;
     
    procedure TTest.MyWndProc(var Message: TMessage);
    begin
      if Message.Msg = WM_NCPAINT then
        Lines.Add('Hop !');
     
      if Assigned(FWndProc) then
        FWndProc(Message);
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with TTest.Create(self) do
      begin
        Parent:= self;
        Left:= 10;
        Top:= 10;
        Width:= 100;
        Height:= 200;
      end;
    end;
     
    end.

  15. #15
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    C'est parfait Pierre, merci de ton aide, je commencais à penser que c'etais pas possible maintenant reste a voir comment je peux surcharger cette fonction en dynamique.

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

Discussions similaires

  1. Intercepter message application externe
    Par Te-Deum dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 22/08/2007, 16h01
  2. [Probleme][C++/Windows] Intercepter messages
    Par MonsieurAk dans le forum Windows
    Réponses: 10
    Dernier message: 01/07/2006, 09h54
  3. Choix de composant affichage messages réseaux
    Par sozie9372 dans le forum Graphisme
    Réponses: 2
    Dernier message: 19/05/2006, 15h24
  4. [FLASH 8] Composant Alert - Message trop long
    Par aldo-tlse dans le forum Flash
    Réponses: 2
    Dernier message: 02/12/2005, 19h58
  5. Interception Messages Windows
    Par tiramisu dans le forum MFC
    Réponses: 5
    Dernier message: 24/02/2004, 14h01

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