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

C++Builder Discussion :

Fenetre builder OnTop


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut Fenetre builder OnTop
    Bonjour,

    Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...

    Merci

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    selmak7 a ecrit:
    Bonjour,

    Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...

    Merci
    Un lien sur le FORUM

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Ok merci pour l'info...

    En faite, je suis en train de développer un pavé numérique, et il faudrai donc que celui-ci reste toujours en premier plan tout en laissant la fenetre de saisie active...

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Ne pas oublier

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Saut !

    Pour donner à ce numpad un aspect moins fenêtré :
    - mettre tous les BorderIcons à false
    - fixer BorderStyle sur bsNone
    - on garde FormStyle fixé sur fsStayOnTop
    - on place une TPanel dont on fixe Align sur alClient
    Pour ce panel de fond, on fixe (par exemple):
    - BevelInner sur bvLowered;
    - BevelOuter sur bvRaised

    La suite dépend de la manière dont on représente les boutons.
    Le plus simple est d'utiliser un ensemble de TPanel dont il est très facile d'éditer les positions.
    Il faudra décaler les boutons des bords du panel de fond (8 pixels par exemple).

    Ne pas oublier d'inclure le header de la fenêtre principale dans l'unité de cette fiche

    On rajoute les propriétés suivantes, en public, dans la class de la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bool IsMoving;
    TPoint StartPos;
    Voici les événementielles de la souris pour le panel de fond qui vont permettre de déplacer le pavé :

    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
    void __fastcall TForm2::Panel1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Form1->SetFocus();
    IsMoving = true;
    StartPos = Point(X,Y);
    }
     
    void __fastcall TForm2::Panel1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    if(IsMoving == true)
        {
        SetBounds(Left + X - StartPos.x,
                  Top + Y - StartPos.y,
                  Width, Height);
        }    
    }
     
    void __fastcall TForm2::Panel1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
    IsMoving = false;
    }
    Voici maintenant les événementielles de la souris pour les TPanel des touches et partagées par l'ensemble des touches :

    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
    void __fastcall TForm2::TouchesMouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Form1->SetFocus();
    TPanel *Touche = (TPanel*)Sender; //on récupère le panel qui a généré l'événement
    Touche->BevelInner = bvLowered;
    Touche->BevelWidth = 1;
    //... Touche->Tag pour récupérer une valeur spécifique pour une touche
    }
     
    void __fastcall TForm2::TouchesMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
    TPanel *Touche = (TPanel*)Sender;
    //Mêmes valeurs que celles fixées à l'édition pour chaque TPanel d'une touche
    Touche->BevelInner = bvNone;
    Touche->BevelOuter = bvRaised;
    Touche->BevelWidth = 3;
    }
    A plus !
    Images attachées Images attachées  

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    c'est marrant, c'est exactement ce que j'ai fais...

    Mon problème (que j'ai résolu) était que la fonction GetFocus retourne NULL si la focalisation se trouve sur une autre application en cours d'éxécution. Voila l'astuce, pour information (source MSDN) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        HWND   HandleId      = GetForegroundWindow() ;
        DWORD ProcessIdTo  = GetWindowThreadProcessId( HandleId, NULL ) ;
        DWORD ProcessId     = GetCurrentThreadId() ;
        if( ProcessId != ProcessIdTo ) {
            AttachThreadInput( ProcessId, ProcessIdTo, true ) ;
            HandleTo = GetFocus() ;
            AttachThreadInput( ProcessId, ProcessIdTo, false ) ;
        }
    Sinon, pour l'esthétique du pavé numérique, je prends : je suis pas trop doué à ce niveau la... Ce que j'ai fais aussi, c'est que j'ai rendu ma fenêtre légèrement transparente (pour le style)...

    Merci pour ces infos...

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

Discussions similaires

  1. activation de fenetre C++ Builder 6
    Par EricNO dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/10/2009, 09h05
  2. afficher une fenetre opengl avec builder
    Par info_amel dans le forum OpenGL
    Réponses: 2
    Dernier message: 30/04/2008, 17h28
  3. débogueur BCB6 builder fenetre de suivis
    Par gaelgoodey dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/10/2006, 05h36
  4. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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