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

Composants VCL Delphi Discussion :

Idées pour l'interface d'un Puissance-4


Sujet :

Composants VCL Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut Idées pour l'interface d'un Puissance-4
    Bonjour !

    J'aimerais avoir des conseils pour l'interface d'un "Puissance 4".

    Notamment, je voudrais savoir comment utiliser mes sept boutons (voir le projet ci-joint) sans faire sept procédures. En attendant, je n'ai mis en service que le premier bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.AClick(Sender: TObject); // Bouton "A"
    begin
      if Ajouter(Grille1, IIF(Trait=Blanc, Pion*Blanc, Pion*Noir), 1) then // Ajouter pion colonne 1
      begin
        Dessin(Grille1);
        Trait := -1 * Trait;
    Toutes suggestions bienvenues. Projet Delphi 6.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Salut,
    A mon avis, tu pourrais mettre des tags pour tes boutons (de 1 à 7) par exemple.
    Tu écris alors une fonction globale qui en fonction du Tag du bouton fait une action telle (si le code à exécuter est facile à unifier).

    Tu fais :
    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
     
    var numBTN : Integer;
    begin
    numBTN := (Sender as Button).Tag;
    // tu modifie ce qu'il faut dans le reste de la source en prenant en compte le numBTN qui est le numéro du boutton
    if Ajouter(Grille1, IIF(Trait=Blanc, Pion*Blanc, Pion*Noir), 1) then
      begin
        Dessin(Grille1);
        Trait := -1 * Trait;
        Memo1.Clear;
        Memo1.Text :=
          'Pions jaunes alignés = '+IntToStr(Points(Grille1, Blanc))+#13#10+
          'Pions rouges alignés = '+IntToStr(Points(Grille1, Noir));
      end;
    End;
    Tu met ce code dans le OnClick d'un seul bouton (c'est déjà fait pour bouton A, et pour tous les autres, dans l'Inspecteur d'Objets, tu mets le même OnClick

    Ou, je vois que tu les a nommés avec des lettres,ça peut se faire aussi.

    Tu peux aussi faire appel à FindComponent si ça nécessite d'agir sur bouton dans ta fonction.

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Je ne connaissais la propriété Tag. Merci !

    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
    procedure TForm1.AClick(Sender: TObject);
    var
      x: 1..7;
    begin
      x := (Sender as TButton).Tag;
      if Ajouter(Grille1, IIF(Trait=Blanc, Pion*Blanc, Pion*Noir), x) then
      begin
        Dessin(Grille1);
        Trait := -1 * Trait;
        Memo1.Clear;
        Memo1.Text :=
          'Pions jaunes alignés = '+IntToStr(Points(Grille1, Blanc))+#13#10+
          'Pions rouges alignés = '+IntToStr(Points(Grille1, Noir));
      end;
    end;
     
    procedure TForm1.BClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.CClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.DClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.EClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.FClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.GClick(Sender: TObject); begin Form1.AClick(Sender); end;
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Ça fait toujours plaisir !
    Bonne chance !

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Voici le code retouché. Je vais voir maintenant comment améliorer le dessin de la grille et ajouter une animation pour la chute des pions.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Voici un essai d'animation. Ce serait presque bien, si la fenêtre entière (ou l'image entière, je ne sais pas trop) ne se redessinait pas.
    Comment pourrais-je modifier ma procédure EllipseXY pour qu'elle ne provoque pas la "repeinture" de toute l'image ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure EllipseXY(x, y: integer; c: tColor);
    const
      a = 40;
      b = 5;
    begin
      Dec(x);
      y := MaxY - y;
      with Form1.Image1.Canvas do
      begin
        Pen.Color := c;
        Brush.Color := c;
        Ellipse(a*x+b, a*y+b, a*(x+1)-b, a*(y+1)-b);
      end;
    end;
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    hello,

    alors quelques petites remarques, d'abord tu n'as pas bien compris l'histoire du onclick dans l'Inspecteur d'objets, sur un des boutons si tu regardes l'Evènement onClick tu as une combobox qui te permet de choisir la méthode de ton choix. Sur chaque bouton tu peux mettre la même méthode. Par exemple sur le bouton B le onClick sera AClick. Du coup le code ci-dessous est inutile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.BClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.CClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.DClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.EClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.FClick(Sender: TObject); begin Form1.AClick(Sender); end;
    procedure TForm1.GClick(Sender: TObject); begin Form1.AClick(Sender); end;
    d'autre part tu utilises Form1 dans tes méthodes, c'est une mauvaise idée. Form1 est une variable qui pointe sur une instance spécifique de TForm1. Dans le cas de ton projet il n'y a qu'une seule instance et ça va fonctionenr, mais il serait plus juste de ne par préfixer la méthode "AClick(Sender)" ou de la préfixer de Self "Self.AClick(Sender)".

    Ensuite pour l'affichage il y a plusieurs solutions. Personnellement j'aime bien utiliser un TBitmap dans lequel je dessine ce que je veux et que j'affiche ensuite sur le Canvas de la fiche, ou d'un TPaintBox.

    Mais ici tu pourrais aussi avoir une série de TShape (Shape = stCircle) représentant chaque cellule et en changer la couleur
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Les deux premiers points sont corrigés. Merci !

    Je suis en train de regarder TetrisRun.

    Je vais étudier aussi la solution TShape.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Finalement j'ai utilisé le type TShape, en m'appuyant sur cet exemple de Puissance 4.

    J'ai pensé partir du code de TetrisRun pour faire une animation plus sophistiquée, mais j'ai préféré commencer par le plus facile et le plus rapide.

    Je marque la discussion comme résolue, puisqu'on a répondu à ma question, mais les critiques ou les suggestions restent bienvenues. En attendant je cherche à fabriquer un nouveau moteur.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Voici un nouvel essai d'interface. Qu'en pensez-vous ?

    J'aurais bien aimé utiliser une image JPG comme fond de fenêtre. Comment feriez-vous ça ?

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Button1: TButton;
        GroupBox1: TGroupBox;
        GroupBox2: TGroupBox;
        RadioButton5: TRadioButton;
        RadioButton6: TRadioButton;
        RadioButton7: TRadioButton;
        RadioButton8: TRadioButton;
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        RadioButton3: TRadioButton;
        RadioButton4: TRadioButton;
        Label1: TLabel;
        Timer1: TTimer;
        procedure SetCaption;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure Button1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses
      Couleurs, Grille;
     
    {$R *.dfm}
     
    function IIf(const expr: boolean; const i1, i2: integer): integer;
    begin
      if expr then Result := i1 else Result := i2;
    end;
     
    const
      Palette: array[0..6]of TColor = (
        Gray,
        SlateBlue,
        DarkSlateBlue,
        Tangerine,
        DarkPastelGreen,
        Indigo,
        LemonChiffon
      );
     
      EnCours      = 'Partie en cours';
      BlancGagne   = 'Joueur 1 gagnant';
      NoirGagne    = 'Joueur 2 gagnant';
      GrillePleine = 'Grille pleine';
     
    var
      Boutons: array[MinX..MaxX]of TButton;
      Disques: array[MinX..MaxX, MinY..MaxY]of TShape;
      Chute: record
        Action: boolean;
        X: integer;
      end;
      DemiCoups: integer;
      Grille1: TGrille;
      Fin: boolean;
     
    function EtatDuJeu: string;
    begin
      if Gagne(Grille1, Noir) then
        Result := NoirGagne
      else
        if DemiCoups = MaxX * MaxY then
          Result := GrillePleine
        else
          if Gagne(Grille1, Blanc) then
            Result := BlancGagne
          else
            Result := EnCours;
    end;
     
    procedure TForm1.SetCaption;
    begin
      Label1.Caption := EtatDuJeu;
      Fin := Label1.Caption <> EnCours;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      x, y: integer;
    begin
      Self.WindowState := wsMaximized;
      Self.Color := Palette[0];
     
      Panel1.Color := Palette[1];
      Panel1.Top := (GetSystemMetrics(SM_CYFULLSCREEN) - Panel1.Height) div 2;
      Panel1.Left := (GetSystemMetrics(SM_CXFULLSCREEN) - Panel1.Width) div 2;
     
      Label1.Color := Palette[5];
      Label1.Font.Color := Palette[6];
     
      for x := MinX to MaxX do
      begin
        Boutons[x] := TButton.Create(Self);
        with Boutons[x] do
        begin
          Parent := Panel1;
          Name   := Chr(x-1+Ord('A'));
          Left   := 56*(x-1)+4;
          Top    := 344;
          Width  := 56;
          Height := 28;
          Tag    := x;
          onClick := Button1Click;
          onKeyDown := Button1KeyDown;
        end;
        for y := MinY to MaxY do
        begin
          Disques[x, y] := TShape.Create(Self);
          with Disques[x, y] do
          begin
            Parent      := Panel1;
            Name        := Chr(x-1+Ord('A'))+Chr(y-1+Ord('1'));
            Left        := 56*x-52+4;
            Top         := 56*(6-y+1)-52+4;
            Width       := 48;
            Height      := 48;
            Shape       := stCircle;
            Pen.Color   := Palette[2];
            Brush.Color := Self.Color;
          end;
        end;
      end;
      Chute.Action := False;
      DemiCoups := 0;
      Vider(Grille1);
      SetCaption;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      x, y: integer;
      c: tColor;
      p: tPion;
    begin
      if (Sender as TButton).Tag = Button1.Tag then
      begin
        Close;
        Exit;
      end;
     
      if Fin then
      begin
        for x := MinX to MaxX do
          for y := MinY to MaxY do
            Disques[x, y].Brush.Color := Self.Color;
     
        DemiCoups := 0;
        Vider(Grille1);
        SetCaption;
        Exit;
      end;
     
      x := (Sender as TButton).Tag;
     
      if not Chute.Action and (Disques[x, MaxY].Brush.Color = Self.Color) then
      begin
        c := IIF(DemiCoups mod 2=0, Palette[3], Palette[4]);
        Disques[x, MaxY].Brush.Color := c;
     
        Chute.Action := True;
        Chute.X := x;
     
        p := IIF(DemiCoups mod 2=0, Pion*Blanc, Pion*Noir);
        Ajouter(Grille1, p, x);
        Inc(DemiCoups);
     
        SetCaption;
      end;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      x, y: integer;
      p: tPion;
      c: tColor;
    begin
      if Chute.Action then
      begin
        y := MaxY;
        while Disques[Chute.X, y].Brush.Color = Self.Color do
          Dec(y);
        if (y > MinY) and (Disques[Chute.X, y-1].Brush.Color = Self.Color) then
        begin
          Disques[Chute.X, y-1].Brush.Color := Disques[Chute.X, y].Brush.Color;
          Disques[Chute.X, y].Brush.Color := Color;
        end else
          Chute.Action := False;
      end else
        if (((DemiCoups mod 2=0) and not RadioButton1.Checked)
            or
            ((DemiCoups mod 2=1) and not RadioButton5.Checked))
        and not Fin then
        begin
          p := IIF(DemiCoups mod 2=0, Pion*Blanc, Pion*Noir);
          c := IIF(DemiCoups mod 2=0, Palette[3], Palette[4]);
     
          if ((DemiCoups mod 2=0) and RadioButton2.Checked)
          or ((DemiCoups mod 2=1) and RadioButton6.Checked)
          then
            x := CoupAutomatique1(Grille1)
          else
            if ((DemiCoups mod 2=0) and RadioButton3.Checked)
            or ((DemiCoups mod 2=1) and RadioButton7.Checked)
            then
              x := CoupAutomatique2(Grille1, p)
            else
              if ((DemiCoups mod 2=0) and RadioButton4.Checked)
              or ((DemiCoups mod 2=1) and RadioButton8.Checked)
              then
                x := CoupAutomatique3(Grille1, p);
     
          Disques[x, MaxY].Brush.Color := c;
          Chute.Action := True;
          Chute.X := x;
          Ajouter(Grille1, p, x);
          Inc(DemiCoups);
     
          SetCaption;
        end;
    end;
     
    procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key = VK_ESCAPE then
        Close;
    end;
     
    end.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    J'aurais bien aimé utiliser une image JPG comme fond de fenêtre. Comment feriez-vous ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      TForm1 = class(TForm)
        ...
        Image1: TImage;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ...
      Image1.Picture.LoadFromFile('DSCN2393.JPG');
    Dans l'inspecteur d'objets, j'ai selectionné les options Align=alClient et Stretch=True.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  12. #12
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    Il est possible d'utiliser le canvas de la fenêtre et faire un chargement dynamique de l'image. Attention, le StretchDraw va adapter la taille de l'image à celle de la Form.

    - Dans l'évènement OnPaint de la Form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormPaint(Sender: TObject);
    var
      APicture: TPicture;
    begin
      APicture := TPicture.Create;
      try
        APicture.LoadFromFile('c:\.....\MonImage.jpg');
        Canvas.StretchDraw(ClientRect, APicture.Graphic);
      finally
        APicture.Free;
      end;
    end;
    - Et dans l'évènement OnResize de la form (bien que vu le projet ça devrait être bloqué):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormResize(Sender: TObject);
    begin
      Repaint;
    end;

  13. #13
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bjl Voir le message
    Il est possible d'utiliser le canvas de la fenêtre et faire un chargement dynamique de l'image.
    Intéressant. Merci pour l'exemple !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  14. #14
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Voilà, j'ai fait la modification suggérée, plus quelques autres améliorations (voir plus haut nouvelles pièces jointes). J'ai mis l'exécutable avec l'image d'arrière-plan ici.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/03/2007, 15h09
  2. Idées pour interfaces windows
    Par jpelaho dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/12/2006, 16h45
  3. [Débutant][php] IDE pour PHP dans Eclipse ?
    Par folsen dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 22/04/2004, 16h25
  4. quel langage choisir pour mon interface graphique
    Par mrom34 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 09/03/2004, 19h12
  5. Idée pour développer un logiciel de peer to peer
    Par Jibees dans le forum Développement
    Réponses: 5
    Dernier message: 09/06/2003, 22h29

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