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 :

Handle d'un TImage


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut Handle d'un TImage
    Bonjour,

    je cherche à récupérer le handle d'une TImage mais il n'est pas accessible de la même manière qu'un TPanel ( Panel1->Handle ) ou qu'un TForm ( Form1->Handle ).

    Y-a-t-il un moyen de récupérer le handle de ce composant ?

    ( j'ai cherché du coté de GetDlgItem mais je n'ai pas réussi ).
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Argol_Medusa
    Peut etre en passant par le Canvas comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image1->Canvas->Handle;
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Attention !

    Ce qui hérite de TWinControl renvoie comme handle : un HWND (un handle de fenêtre) !
    Canvas renvoie comme handle : le HDC qu'il exploite pour dessiner.

    Voici l'ordre des choses (API Windows) simpliste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //...
    // le handle d'une fenêtre.
    HWND hwnd; 
    // On récupère le handle graphique de cette fenêtre.
    HDC hdc = GetDC(hwnd); 
    // on dessine sur le hdc et non sur le hwnd
    FillRect(hdc, ..., ...); 
    //...
    Et je rajoute qu'il est même possible que le TCanvas renvoie non pas un hdc temporaire mais le hdc du hwnd sur lequel il se dessine.
    Donc certainement le hdc de la form ... (une histoire d'économie des moyens... et des ressources système en particulier) !

    Et pour finir ... tout dépend de la validité du hdc dans le temps (parce qu'il y a forcément un ReleaseDC ou un DeleteDC à un moment donné) !!!

    A plus !

  4. #4
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Merci pour vos réponses,

    je vais essayer de regarder de plus pret, car en effet le Canvas->Handle n'est pas de même type.

    En fait j'essaye d'utiliser l'astuce de blondelle pour le déplacement automatique d'objet sur l'interface graphique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       // permet de deplacer le Panel
       ReleaseCapture();
       SendMessage(Panel1->Handle, WM_SYSCOMMAND, 0xF012, 0);
    Ca marche bien avec un Panel ou avec une Form, mais je ne peux pas l'utiliser sur une TImage pour l'instant malheureusement.

    Je vais essayer de lire un peu la doc pour mieux comprendre l'arborescence des objets.
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  5. #5
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Argol_Medusa
    pour deplacer un TImage s'il est place sur un TPanel tu peut utiliser ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::image_cycle_usinageMouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    TCursor Save_Cursor = Screen->Cursor;
    Screen->Cursor = crSizeAll;
    Panel6->SendToBack();
    // permet de deplacer le Panel
    ReleaseCapture();
    SendMessage(Panel6->Handle, WM_SYSCOMMAND, 0xF012, 0);
    Panel6->SendToBack();
    Screen->Cursor = Save_Cursor;
    }
    Sinon il y a une autre posibilite mais c'est un peu plus long a coder, quand on maintient un click sur le TImage le curseur change et on peut deplacer le TImage, les ScrollBars se repositionne et son toujours fonctionnelles
    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
     
    void __fastcall TForm1::image_cycle_usinageMouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Save_Cursor = Screen->Cursor;
    Screen->Cursor = crSizeAll;
          XPos = X;
          YPos = Y;
          if (Button == mbLeft) Deplacement = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::image_cycle_usinageMouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
    // on recupere la position des TPanels
    a = Panel1->Top;
    b = Panel2->Top;
    c = Panel3->Top;
    d = Panel4->Top;
    aa = Panel1->Left;
    bb = Panel2->Left;
    cc = Panel3->Left;
    dd = Panel4->Left;
    // on traite le deplacement
          if ( Deplacement == true )
         {
    // on positionne les ScrollBars de la Form
         HorzScrollBar->Position += XPos - X;
         VertScrollBar->Position += YPos - Y;
         }
    // on retabli la position des TPanels
    Panel1->Top = a;
    Panel2->Top = b;
    Panel3->Top = c;
    Panel4->Top = d;
    Panel1->Left = aa;
    Panel2->Left = bb;
    Panel3->Left = cc;
    Panel4->Left = dd;
    Form1->Repaint();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::image_cycle_usinageMouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Screen->Cursor = Save_Cursor;
    Deplacement = false;
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Merci pour le code Blondelle,

    Oui j'avais justement voulu éviter de faire la bonne vieille méthode bien longue hé hé hé.

    Du coup je suis parti sur ta solution avec un TPanel + le TImage dedans un peu plus petit pour pouvoir voir le TPanel derrière et faire un cadre de couleur clignotant.
    ( et j'ai rajouté le cursor, pour le style certes mais c'est mieux ).


    Encore merci !
    Désolé, on savait pas que c'était impossible, alors on l'a fait

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

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. [TImage] Transfert de Picture par pixels.
    Par H2D dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2003, 14h37
  3. TImage
    Par Thylia dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/07/2002, 20h03
  4. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36
  5. pb de handle en C
    Par deedje dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 16h19

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