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 :

Application le haut en bas


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Application le haut en bas
    C'est pas une histoire à dormir debout!!

    Je travaille sur une application avec interface sur écran LCD qui doit être lu par dessus. Les écrans LCD sont optimisés pour une vision plutôt par dessous (portables).

    Quelqu'un d'entre vous connaitrait il un moyen de faire faire un demi tour complet à tous les objets graphiques d'une IHM. J'implanterai l'écran la tête en bas sur la machine et le tour sera joué.

    Je travaille sous Borland C++ Builder 4 et Windows 2000 Pro mais je pense que c'est assez générique.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Salut,

    J'ai l'impression que la solution n'est pas aussi simple...

    As-tu déjà essayé de faire cette opération manuellement, sur l'un ou l'autre contrôle?
    Je sais que ton objectif est de retourner tes contrôles, mais les contrôles sont positionnés par Top et Left. Et pas possible de définir des Height ou Width avec des valeurs négatives (pour simuler une inversion du contrôle)
    --> Même si tu arrives à retourner la présentation de l'écran, tous les textes seraient toujours orientés dans le sens "normal"...
    Maintenant, il existe peut-être des composants qui sont capables de le faire. Mais pas les composants standards tels que TEdit, TLabel, ...

    Fais également attention au Caption de la Form, les boutons systèmes, le menu éventuel,... quand tu dessines ta Form. Tous ces éléments seront toujours positionnés sur le haut de l'écran.

    En ce qui concerne la position des contrôles, tu pourrais boucler sur tous les contrôles de ta Form, dans le OnCreate par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Controls[i]->Top = Height - Controls[i]->Top - Controls[i]->Height;
    Controls[i]->Left = Width - Controls[i]->Left - Controls[i]->Width;
    Je crois que cela te donneras un résultat proche de ce que tu veux.

    Bon courage

    @+

  3. #3
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Je ne sais pas si les versions ultérieures à BCB3 ont prévu ce type de manipulation ?

    Par contre, il existe une possibilité en s'appuyant sur la méthode GetFormImage qui permet
    de récupérer le bitmap image d'une form (zone client, sans la barre de titre et sans la barre
    de menus (peut-être pas avec les versions ultérieures ???)).

    A partir de là ça peut devenir très compliqué mais à la base, l'idée est de copier ce bitmap
    dans un autre bitmap, pixel par pixel en appliquant une rotation (ici cette rotation est simple):

    On admet que Form2 va devenir l'inverse de Form1 :

    On aura déclaré dans Unit1.cpp (Form1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graphics::TBitmap *Image = new Graphics::TBitmap;
    Graphics::TBitmap *Temp;
    Au moment de visualisualisation (chez moi, c'est trop long pour l'idée que je me fais
    du "Temps réel") :

    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
    Form2->SetBounds(Left, Top, ClientWidth, ClientHeight);
    Image->Width = ClientWidth;
    Image->Height = ClientHeight;
    Temp = GetFormImage();
     
    int we = ClientWidth-1;
    int he = ClientHeight-1;
     
    for(int y = 0; y < Height; y++)
        {
        for(int x = 0; x < Width; x++)
            {
            Image->Canvas->Pixels[x][y] = Temp->Canvas->Pixels[we-x][he-y];
            }
        }
    delete Temp;
    Form2->Show();
    Il ne faudra pas oublier dans la OnPaint de Form2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas->Draw(0,0,Image);
    En sachant que l'on aura déclaré dans Unit2.cpp (Form2):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern Graphics::TBitmap *Image;
    La complication arrive très vite s'il faut donner l'illusion que l'on travaille sur cette
    form, car Form2 n'a que l'apparence graphique de Form1. Il faut dans ce cas gérer depuis
    Form2 toutes les actions de la souris afin de solliciter les événementielles de Form1 à
    l'emplacement supposé des objets !!! Et s'il faut faire écho d'un résultat (texte) dans ce
    cas, il faut prévoir une fonte logique... voir la fonction API : CreateFont
    A noter que dans ce cas, toutes les opérations graphiques devront se faire sur le bitmap
    Image et non directement sur la form (Form2->Canvas ne donne pas d'écho persistant
    d'autant plus que la OnPaint effacera tout !!)

    A plus !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Hou la la, grand merci à vous deux.

    Je sens l'usine à gaz, déjà que j'ai du mal.....

    Je vais en parallèle regarder côté matériel, inverser l'adressage des pixels si c'est possible. Je serai plus dans mon élément.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Points : 30
    Points
    30
    Par défaut
    D'un point de vue applicatif, ça ma semble effectivement se diriger tout droit vers l'usine à gaz.

    Il me semble que les drivers Nvidia permettent de le faire, les intel aussi je pense, ati je sais pas :

    Autrement, la solution matérielle infaillible serait de... retourner l'écran :

Discussions similaires

  1. Afficher du texte de haut en bas
    Par le-roy_a dans le forum Graphisme
    Réponses: 3
    Dernier message: 21/12/2006, 09h37
  2. Pb touche fleche haut et Bas
    Par Andry dans le forum Delphi
    Réponses: 5
    Dernier message: 23/10/2006, 11h53
  3. margin haut et bas
    Par raph707 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 16/05/2006, 22h43
  4. [FLASH 8] Boutons Haut et Bas pour scroller un textArea
    Par hedgehog dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 24/04/2006, 11h23
  5. [HTML] Tableaux Ancre en haut et bas de page
    Par codez dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/03/2006, 14h35

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