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 :

Ne pas prendre en compte un évènement [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Ne pas prendre en compte un évènement
    Bonjour à toutes et à tous,

    J'avais créé une application avec DELPHI dans laquelle, gràce à l'évènement "onMessage" du composant TApplicationEventes, on pouvait sauter son traitement normal en mettant à "true" la variable "Handled".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object;
    property OnMessage: TMessageEvent;
    Je ne retrouve pas l'équivalent sous LAZARUS. Il y a bien le composant TApplicationProperty avec l'évènement 'onIdle' qui a une variable de retour "done", mais vu le peu de documentation qui y est attachée, je ne vois vraiment pas quoi en faire.

    Mon problème particulier : lorsqu’on clique sur la partie haute d'une fenêtre, et qu'on déplace la souris, la fenêtre suit les déplacements de la souris. Moi, je souhaite que cette action n'aie aucun effet (je souhaite que la fenêtre ne se déplace pas). Comment faire ?

    Il y a aussi cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        procedure LMWindowPosChanged(var message: TLMWindowPosChanged);
                                     message LM_WINDOWPOSCHANGED;
    dont je subodore qu'elle pourrait bien remplir la fonction, mais je ne vois pas trop comment.

    Merci de votre aide.

    Pierre

  2. #2
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    En farfouillant sur le NET, j'ai trouvé ceci :

    http://www.swissdelphicenter.ch/torr...de.php?id=1069

    En remplaçant les variables WM... par des LM... qui se trouvent dans l'unité LMessages, ça marche très bien ... mais seulement sous Windows. Sous Linux, la procédure n'est même pas appelée .

    C'est vraiment galère le portage sous Linux ...mais peut-être avez-vous la solution

    Cordialement.

    Pierre

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Le HITTEST est évidemment la meilleure solution, mais si ce n'est pas reconnu sous Linux...

    Je crois que le message TLMWindowPoschanging n'est pas non plus reconnu ( ? ).

    Pour le message TLMWindowPoschanged, j'ai trouvé ceci : http://forum.lazarus.freepascal.org/...c=24367.5;wap2

    Cela n'empêche pas de déplacer la fiche, mais elle revient par après à sa position initiale. Ce n'est donc pas la solution la plus heureuse.

    J'ai testé, cela marche, il faut juste modifier ce qui suit si l'unité n'est pas en mode Delphi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.PosChanged(var Msg: TLMWindowPosChanged);
    begin
        Application.QueueAsyncCall(@FixIt, 0);
    end;
    Cordialement
    Thierry

  4. #4
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Je te remercie ThWilliam pour cette solution.

    Entre temps, après avoir beaucoup tourné autour des TLMWindowPoschanged et TLMWindowPoschanging, j'en étais arrivé à une solution pratiquement identique (je ne passais par la fonction intermédiaire QueueAsyncCall) et donnant le même fonctionnement que celui que tu décris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.PosChanged(var Msg: TLMWindowPosChanged);
    begin
       Left := PrvLeft;
       Top := PrvTop;
    end;
    Pffouu !

    Merci encore, cordialement.

    Pierre

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Salut à tous

    J'interviens tardivement mais je pense à une solution simple pour ton problème particulier, en supposant que la fenêtre ne doit jamais être déplacée : le plus simple consiste à ne pas afficher de barre de titre, avec BorderStyle = bsNone, aucun code spécifique dans ce cas et maintenance simplifiée...
    Si les utilisateur veulent un titre, un TLabel coloré peut faire l'affaire.

    Rien n'empêche d'ailleurs de le faire par code et d'activer/désactiver la barre de titre selon la situation.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci e-ric pour cette proposition. c'est d'une redoutable efficacité, aussi bien sous Windows que sous Linux.

    Bon, la cosmétique demande à être un peu améliorée.

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Salut,

    Effectivement, tu te retrouves alors avec la zone client directement superposée sur le fond mais rien ne t'empêche d'ajouter une bordure avec un TBevel et un titre avec une TShape ou TLabel (coloré).

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

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

Discussions similaires

  1. [XPath] ne pas prendre en compte le Doctype.
    Par ced600 dans le forum C#
    Réponses: 2
    Dernier message: 13/02/2008, 10h17
  2. Réponses: 2
    Dernier message: 31/08/2007, 16h52
  3. ne pas prendre en compte la casse ni les accents
    Par pigpen dans le forum JDBC
    Réponses: 14
    Dernier message: 10/05/2007, 14h40
  4. [.NET] ne pas prendre en compte les "0"
    Par californialove dans le forum MFC
    Réponses: 16
    Dernier message: 05/06/2006, 10h05
  5. [XHTML] Ne pas prendre en compte les balises XHTML
    Par simnitch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/08/2005, 15h58

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