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 :

Afficher une image dns un TImage & Inter operabilité des evenement OnMouseDown [Débutant(e)]


Sujet :

C++Builder

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut Afficher une image dns un TImage & Inter operabilité des evenement OnMouseDown
    Bonjour à tous,

    Programmeur sur C++ Borland, je suis quasi débutant en C++ (je ne fait pratiquement que des programmes en C, pour exécution sous console msdos). Et cela fait bien longtemps que je n'ai pas fait de programmes avec des fenêtres. Alors, quand je m'y remets...

    Alors mon problème, dans une application fenêtrée, est que j'ai une unité principale avec une image qui contient une séquence de code à exécuter en réaction à l'événement "OnMouseDown", laquelle appelle "Form2->ShowModal()" Ma foi, cela a bien l'air de s'exécuter si ce n'est que l'image, que par ailleurs j'ai créée dans Form2, n'apparaît pas.

    Est-ce interdit d'avoir des images dans une fenêtre appelée par showmodal ?

    Dans la foulée, lorsque vos réponses m'auront décoincé, je compte à nouveau réagir à un événement "onclick" ou "Onmousedown" sur l'image de Form2. Est-ce possible ? N'y aura-t-il pas conflit avec le même événement "onmousedown" déjà existant sur Form1->Image1 ?

    Merci de votre aide !

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par ceugniet Voir le message
    Est-ce interdit d'avoir des images dans une fenêtre appelée par showmodal ?
    Non, pas d'interdiction !
    Citation Envoyé par ceugniet Voir le message
    Dans la foulée, lorsque vos réponses m'auront décoincé, je compte à nouveau réagir à un événement "onclick" ou "Onmousedown" sur l'image de Form2. Est-ce possible ?
    Oui... L'image contenue dans Form2 est créée dynamiquement, ou bien c'est un TImage simplement posé sur le Form ?
    Citation Envoyé par ceugniet Voir le message
    N'y aura-t-il pas conflit avec le même événement "onmousedown" déjà existant sur Form1->Image1 ?
    Tu as un événement OnClick défini sur Form1, un autre défini sur Form2, chacun exécutant son propre code... A moins de tomber dans un cas très scabreux, pas de conflit à prévoir...
    Bon courage !

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut
    Merci pour ta réponse rapide !

    Citation Envoyé par totoche76 Voir le message
    L'image contenue dans Form2 est créée dynamiquement, ou bien c'est un TImage simplement posé sur le Form ?
    Je ne sais même pas comment créer une image dynamiquement ! C'est effectivement un TImage posé sur le Form. Dans TForm2::FormCreate, j'ai placé du code qui définit l'image, ses dimensions, sa position, j'ai donné un petit coup de peinture Rouge, histoire de la voir bien, et j'ai placé un commentaire sur un memo qui atteste que tout cela a bien été fait. Mais je ne vois toujours pas l'image, alors que je vois bien Form2 apparaître.

    Maintenant que j'y pense, je me demande si ce n'est pas à cause de certains changements que j'ai faits dans la définition de Form2. Comme je ne voulais pas d'entête (le nom de la fenêtre, les trois commandes système...), j'ai choisi dans BorderIcons false pour les 4 variables biSystemMenu, biMinimize, biMaximize et biHelp, Borderstyle est "none", Borderwidth est 0, FormStyle est fsMDIForm. Mais je ne comprends pas grand-chose à tous ces paramètres...

    Merci d'avance de ton aide !

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Les propriétés que tu as modifiées sur TForm2 ne devraient pas gêner (même si je parie que tu aurais pu laisser FormStyle sur fsNormal...)
    Le pépin doit être dans ton FormCreate... Il ressemble à quoi ?

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par totoche76 Voir le message
    Le pépin doit être dans ton FormCreate... Il ressemble à quoi ?
    Ben le voilà !

    (h1,h2,wt,h0 et message[100] sont des variables globales définies dans unit2)

    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
    void __fastcall TForm2::FormCreate(TObject *Sender)
    {
       h1=1;
       h2=3;
       wt=300;
       h0=(wt-2*h2-2*h1)/3;
       wt=2*h2+2*h1+3*h0;
       Height=wt+200;
       Width=wt+200;
       int del=Height-ClientHeight;
       Height=wt+del+Button1->Height+20;
       del=Width-ClientWidth;
       Width=wt+del;
       Button2->Left=Width/4-Button2->Width/2;
       Button1->Left=Width*3/4-Button1->Width/2;
       Button2->Top=Height-Button2->Height-10;
       Button1->Top=Height-Button1->Height-10;
       Image1->Top=0;
       Image1->Left=0;
       Form2->Image1->Width=ClientWidth;
       Form2->Image1->Height=ClientHeight;
       sprintf(message,"image width=%d height=%d mise en couleur",Image1->Width,Image1->Height);
       Form1->Memo1->Lines->Add(AnsiString(message));
       sprintf(message,"Image top et left %d  %d",Image1->Top,Image1->Left);
       Form1->Memo1->Lines->Add(AnsiString(message));
       Form2->Image1->Canvas->Brush->Color=clRed;
       Form2->Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    }

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    L'image s'affiche, enfin plus exactement le fond rouge que tu utilises pour "écraser" ton image s'affiche...
    Tu voudrais avoir l'image par dessus le fond rouge ?

  7. #7
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par totoche76 Voir le message
    L'image s'affiche, enfin plus exactement le fond rouge que tu utilises pour "écraser" ton image s'affiche...
    Tu voudrais avoir l'image par dessus le fond rouge ?
    En fait je veux tout autre chose ; je vais ensuite dessiner plusieurs cases dans mon image dans lesquelles on pourra cliquer, etc... ! Mais pour l'instant, juste histoire de voir mon image, je l'ai peinte entièrement en rouge ; la couleur de Form2, pour sa part est jaune.

    A l'exécution, je vois une fenêtre toute en jaune, avec les deux boutons, Button1 et Button2 qui apparaissent sans problème, mais je ne vois pas mon image, je ne vois rien de rouge !

    Merci pour le temps que tu veux bien passer à m'aider - je suis vraiment perdu avec toutes ces notions !

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Le but de ton TImage, c'est d'afficher le contenu d'un fichier bmp ou jpeg ?
    Si ce n'est pas le cas, tu seras peut-être aussi bien avec un TStringGrid, un TDrawGrid, ou un TPaintBox ?

  9. #9
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par totoche76 Voir le message
    Le but de ton TImage, c'est d'afficher le contenu d'un fichier bmp ou jpeg ?
    Si ce n'est pas le cas, tu seras peut-être aussi bien avec un TStringGrid, un TDrawGrid, ou un TPaintBox ?
    Non, il ne s'agit pas d'un bmp ni d'un jpeg. C'est juste l'image d'une grille 3*3 où je voudrais afficher neuf nombres de 1 à 9. L'utilisateur doit choisir un nombre entre 1 et 9, tout simplement, et il devra cliquer dans l'une des neuf cases ; à l'utilisation ce sera très rapide pour l'utilisateur : juste un click et sa réponse est enregistrée, et je fais disparaître Form2. Je ne voulais pas, par exemple d'un menu déroulant : il faut faire très attention à bien cliquer dans une toute petite case : trop embêtant pour l'utilisateur. Avec une image assez grande, et neuf grandes cases ce serait plus relax ! Je ne connais pas les TStringGrid, ni TDrawgrid, ni non plus TPaintBox et je peux essayer. Mais il y a quand même une question "philosophique" : pourquoi diable mon image n'apparaît-elle pas !

    Mais je vais voir si je peux comprendre l'utilisation de ces TStringGrid, TDrawGrid, ou un TPaintBox ...D'une manière générale, chaque fois que j'examine un nouvel objet que je ne connais pas, je ne comprends jamais comment faire pour l'utiliser ! C'est pourquoi je suis toujours resté dans les trucs très très simples... Et je pensais que créer une image où l'on pourrait cliquer m'éviterait le genre de déboires que je rencontre lorsque je veux utiliser un nouveau gadget...

    Merci ! Si tu trouves une bonne raison à ce problème, merci de me le faire savoir !

  10. #10
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut
    En fait, la raison pour laquelle j'ai fait un showmodal sur une nouvelle fiche est que showmodal rend inopérant tout ce qui extérieur à Form2. J'aurais pu, éventuellement, définir mon image sur Form1 et la rendre visible lorsque c'est nécessaire, mais alors il faut que je prévoie ce que je vais faire si l'utilisateur clique en dehors de la zone, alors qu'en cas de ShowModal il n'y a pas de danger, c'est plus simple (quand ça marche !).

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par ceugniet Voir le message
    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
    void __fastcall TForm2::FormCreate(TObject *Sender)
    {
       h1=1;
       h2=3;
       wt=300;
       h0=(wt-2*h2-2*h1)/3;
       wt=2*h2+2*h1+3*h0;
       Height=wt+200;
       Width=wt+200;
       int del=Height-ClientHeight;
       Height=wt+del+Button1->Height+20;
       del=Width-ClientWidth;
       Width=wt+del;
       Button2->Left=Width/4-Button2->Width/2;
       Button1->Left=Width*3/4-Button1->Width/2;
       Button2->Top=Height-Button2->Height-10;
       Button1->Top=Height-Button1->Height-10;
       Image1->Top=0;
       Image1->Left=0;
       Form2->Image1->Width=ClientWidth;
       Form2->Image1->Height=ClientHeight;
       sprintf(message,"image width=%d height=%d mise en couleur",Image1->Width,Image1->Height);
       Form1->Memo1->Lines->Add(AnsiString(message));
       sprintf(message,"Image top et left %d  %d",Image1->Top,Image1->Left);
       Form1->Memo1->Lines->Add(AnsiString(message));
       Form2->Image1->Canvas->Brush->Color=clRed;
      Form2->Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    }
    C'est un peu bizarre parce que tu modifies la taille de ton image en utilisant la variable "Form2" alors que tu es dans le OnCreate d'une instance ^de TForm2 qui est peut-être différente (voire égale à zéro)...

    Essaye de remplacer le "Form2" dans ton code ci-dessus par "this".

    Si tu ne vois toujours rien, je te propose d'essayer de démarrer ta fiche sans modifier la taille de l'image, ou alors de la mettre sa propriété "Align" à "alClient" pour qu'elle s'adapte toute seule pour occuper tout l'espace disponible.

  12. #12
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Si cela peut t'aider, pour créer une image à l'exécution j'utilise un code qui ressemble au suivant dans ton cas (code créé en partie à la main, il peut y avoir des fautes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Unit2.h
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
            TImage *img;
    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
    Unit2.cpp
    void __fastcall TForm2::FormCreate(TObject *Sender)
    {
    img = NULL;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::FormShow(TObject *Sender)
    {
    h1=1;
    h2=3;
    wt=300;
    h0=(wt-2*h2-2*h1)/3;
    wt=2*h2+2*h1+3*h0;
    Height=wt+200;
    Width=wt+200;
    int del=Height-ClientHeight;
    Height=wt+del+Button1->Height+20;
    del=Width-ClientWidth;
    Width=wt+del;
    Button2->Left=Width/4-Button2->Width/2;
    Button1->Left=Width*3/4-Button1->Width/2;
    Button2->Top=Height-Button2->Height-10;
    Button1->Top=Height-Button1->Height-10;
    if (img == NULL)
       {
       img = new TImage(0);
       img->Parent = Form2;
       img->Top=0;
       img->Left=0;
       img->Width=ClientWidth;
       img->Height=ClientHeight;
       img->Canvas->Brush->Color=clRed;
       img->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::FormDestroy(TObject *Sender)
    {
    if (img != NULL)
       {
       delete img;
       img = NULL;
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
    {
    if (img != NULL)
       {
       delete img;
       img = NULL;
       }
    }
    Si tu veux utiliser une image comme un TButton, il te suffit d'utiliser les évènement OnClick pour lancer l'évènement associé et OnMouseEnter et OnMouseLeave pour gérer le raffraichissement du dessin du TImage.

  13. #13
    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 !

    Le mieux est d'utiliser un TPaintBox sur le quel on peut dessiner ce que l'on veut.
    TPaintBox dispose d'une événementielle OnPaint qui est sollicitée à chaque fois que l'objet doit se (re)dessiner (en interne à chaque WM_PAINT).
    Donc il suffit simplement d'y placer la code du dessin.

    Comme celà a été mentionné, on peut partir d'une fiche existante mais aussi construire cette fiche au cours de l'exécution.
    A ton niveau, il vaudrait mieux éditer cette fiche et y placer le TPaintBox.
    Si Form1 utilise Form2 alors il faudra inclure le header de Form2 dans l'unité de Form1.
    Pour cet exemple, j'ai placé un TLabel (Label1) sur Form1 pour faire écho du résultat.

    Le fait d'utiliser cette fiche supplémentaire (ici Form2) en Modal ne signifie pas qu'il faille la doter de boutons.

    Le fonctionnement est le suivant :
    - un simple click sur Form1 ouvre la modale
    - la modale se referme dès que l'on a cliqué sur le paintbox
    - le résultat est stocké dans une propriété Result du type int (qu'il suffit de rajouter comme je l'ai fait dans la classe de TForm2)

    Voici l'exemple complet (tel que je le teste):

    Form1 est la form principale et Form2 la pseudo modale dotée d'un PaintBox dont j'ai fixé :
    - Width = 180
    - Height = 180

    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
     
    //-- Unit1.cpp (Form1)
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit2.h" // << le header de Form2
    #include "Unit1.h"
    //--
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //--
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //--
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
    // Choisir un chiffre
    Form2->ShowModal();
    // Echo du résultat
    Label1->Caption = Form2->Result;
    }
    //--
    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
     
    //-- Unit1.h
    #ifndef Unit1H
    #define Unit1H
    //--
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //--
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
        TLabel *Label1;  // << pour faire écho du résultat
        void __fastcall FormClick(TObject *Sender);
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
        __fastcall TForm1(TComponent* Owner);
    };
    //--
    extern PACKAGE TForm1 *Form1;
    //--
    #endif

    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
     
    //-- Unit2.cpp (Form2)
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit2.h"
    //--
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    //--
    __fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
    {
    }
     
    //-- On Paint de PaintBox1
    void __fastcall TForm2::PaintBox1Paint(TObject *Sender)
    {
    // Un raccourci qui n'est utile que pour simplifier la rédaction
    TCanvas *C = PaintBox1->Canvas;
    // Propriétés de Brush
    C->Brush->Style = bsSolid;
    C->Brush->Color = clRed;
    // Propriétés de Pen
    C->Pen->Style = psSolid;
    C->Pen->Mode = pmCopy;
    C->Pen->Color = clBlack;
    // Un rectangle avec bords
    C->Rectangle(0,0,180,180);
    // Deux lignes horizontales
    C->MoveTo(0, 60); C->LineTo(180, 60);
    C->MoveTo(0, 120); C->LineTo(180, 120);
    // Deux lignes verticales
    C->MoveTo(60, 0); C->LineTo(60, 180);
    C->MoveTo(120, 0); C->LineTo(120, 180);
    // Propriétés de la fonte
    C->Font->Color = clBlack;
    C->Font->Size = 24;
    // Inutile de redessiner le fond pour chaque caractère
    C->Brush->Style = bsClear;
    // On déroule le dessin des chiffres centrés dans leur case
    AnsiString N;
    int x;
    int y;
    for(int j = 0; j < 9; j++)
        {
        // Le caractère à afficher
        N = IntToStr(j + 1); // de 1 à 9
        // Calcul du centre de la case
        x = ((j % 3) * 60) + 30;
        y = ((j / 3) * 60) + 30;
        // Dessin du caractère centré
        C->TextOut(x - (C->TextWidth(N) / 2),
                   y - (C->TextHeight(N) / 2),
                   N);
        }
    }
    //-- OnMouseDown de PaintBox1
    void __fastcall TForm2::PaintBox1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    // Calcul du chiffre à partir des cases
    int x = X / 60;
    int y = (Y / 60 ) * 3;
    // Memorisation du résultat
    Result = x + y + 1;
    // On ferme
    Close();
    }
    //--

    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
     
    //-- Unit2.h
    #ifndef Unit2H
    #define Unit2H
    //--
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //--
    class TForm2 : public TForm
    {
    __published:	// Composants gérés par l'EDI
        TPaintBox *PaintBox1;
        void __fastcall PaintBox1Paint(TObject *Sender);
        void __fastcall PaintBox1MouseDown(TObject *Sender,
              TMouseButton Button, TShiftState Shift, int X, int Y);
    private:	// Déclarations de l'utilisateur
     
    public:		// Déclarations de l'utilisateur
     
    int Result; // << Pour mémoriser le résultat
     
        __fastcall TForm2(TComponent* Owner);
     
    };
    //--
    extern PACKAGE TForm2 *Form2;
    //--
    #endif
    Accessoirement, j'ai supprimé (mis sur false) tous les BorderIcons de Form2 et j'ai fixé son BorderStyle sur bsToolWindow.
    La fenêtre ne peut se refermer que si on clique sur PaintBox1 !

    A plus !

  14. #14
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 142
    Points : 119
    Points
    119
    Par défaut
    Merci pour toutes vos réponses, c'est sympa ! Je vais avoir besoin de temps pour digérer tout ça !

    Mais je viens de trouver un moyen de me débloquer. Apparemment, comme je croyais, à l'évidence à tort, qu'il fallait que la première fenêtre fût en FormStyle=fsMDIForm et que la fenêtre appelée fût en FormStyle=fsMDIChild, j'ai finalement essayé de remettre ces deux fenêtres comme fsNormal...et ça marche !

    Je suis donc débloqué !

    Mais,

    1 - Je ne sais toujours pas à quoi ça servent les fenêtres spéciales fsMDIForm et fsMDIChild : pas très grave vu l'étendue astronomique de mon ignorance. Mais quand même, si quelqu'un pouvait m'expliquer en quelques mots, je serais un peu moins ignorant.

    2 - Et bien sûr, je ne vois pas le rapport entre le fait de choisir des fenêtres fsMDIChild et le fait de ne pas voir apparaître mes fameuses images !!!

    Merci en tous cas de vos contributions ! Et je suis toujours preneur d'explications supplémentaires !

Discussions similaires

  1. Afficher une image d'un TWebBrowser dans un Timage !
    Par cincap dans le forum Débuter
    Réponses: 1
    Dernier message: 26/08/2013, 12h48
  2. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  3. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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