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 :

[DrawGrid] - Appliquer une image de fond


Sujet :

Composants VCL Delphi

  1. #1
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut [DrawGrid] - Appliquer une image de fond
    Bon je pose mon autre question dans un nouveau sujet, ca sera mieux

    Est-il possible de rendre le fond d'une DrawGrid transparant ???
    Car je ne peux plus voir l'image que j'ai mis en dessous.

    Ou alors comment appliuer ma texture a toute ma grille ? Car je ne sais pas pouruoi mais moi il ne l'appliue u'a une partie ...

    Voici certaines parties de mon code qui gerent tout ca :

    Pour generer la grille dynamiquement en fonction de parametres choisis par l'utilisateur
    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
    ///////////////////////////////////////
    // Bouton générer --> génère la map //
    /////////////////////////////////////
    procedure Ts_editeur.GenererClick(Sender: TObject);
    var
      nb_cases : integer;
      taille_txt : string;
    begin
    // Selection de la taille
      taille_txt := Taille.Text;
    if taille_txt = 'Petite' then nb_cases := pt;
    if taille_txt = 'Moyenne' then nb_cases := moy;
    if taille_txt = 'Grande' then nb_cases := gd;
     
    Carte.Visible := true;
     
    // Genere la grille
      Carte.Width := (nb_cases * 20) + nb_cases + 1;
      Carte.Height := Carte.Width;
      Carte.Colcount := nb_cases;
      Carte.Rowcount := nb_cases;
     
    // Genere le fond
      TextureGrille;
      //Fond.RePaint;
     
      Longueur.Caption := Inttostr(Carte.Width);
      Largeur.Caption := Inttostr(Carte.Height);
      TextureInfo.Caption := Textures.Text;
     
    end;
    Pour generer le fond de la grille :
    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
    // Generer la texture de la grille
    procedure Ts_editeur.TextureGrille;
    var
      mJPEG : TJPEGImage;
      mBitMap : TBitmap;
      Chemin : string;
    begin
      mJPEG := TJPEGImage.Create;
      mBitMap := TBitmap.Create;
      Chemin := ExtractFilePath(Application.ExeName) + '\textures\terrains\' + Textures.Text + '.jpg';
     
      mJPEG.LoadFromFile(Chemin);
      mBitMap.Assign(mJPEG);  // "transforme" le JPEG en BMP
     
      (* rect := Rect(Carte.Top,Carte.Left,Carte.Top + Carte.Height,Carte.Left + Carte.Width);*)
      Carte.Canvas.Brush.Bitmap := mBitMap;
      Carte.Canvas.FillRect(GetClientRect);
     
      mJPEG.Free;
      mBitMap.Free;
      Carte.Canvas.Brush.Bitmap := nil;
     
    end;
    Voila, merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    la gestion de ta texture doit ce faire dans l'evenement DrawCell de ta grille

    @+ Phil

  3. #3
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Je sais, mais DrawCell genre la Texture des le lancement de mon programme, or moi je veux le faire seulement qund je cliue sur mon bouton generer

    Donc j'ai trouve cette methode, seulement il faut que je clique 2 fois sur mon bouton pour que ca applique la texture

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut


    j'ai du mal a comprendre ta logique

    Tu as un bouton genere qui declenche
    le collage de l'image dans ton DrawGrid ?

    est que tu le rafraichie apres avoir coller l'image ?

    @+ phil

  5. #5
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Heu, je ne comprend pas du tout ce que tu veux dire

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    re

    Tu as un bouton [generer] qui declenche le collage de l'image dans ton DrawGrid ?


    est que tu rafraichie le DrawGrid apres avoir coller l'image ?
    exemple
    @+ Phil

  7. #7
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Heu non

    Je vais tester ca, donne moi 10sec ^^

    EDIT : nickel ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Genere le fond
      Carte.refresh;
      TextureGrille;

  8. #8
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    En fin de compte cette technique ne me convient pas ...

    En effet, dès que je bouge un peu mon programme ou que je le recouvre, le fond est remplacé

    Et quand je clique sur ma grille ça efface une case

    En clair, ça ne fonctionne pas !!

    N'y a-t-il donc pas un autre moyen pour pouvoir appliquer ma texture large sur toute ma grille sans avoir ce problème et sans charger ma grille pendant des heures ?

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    l'autres solution c'est dans le ondraw de ta grille
    copier la parti de l'image et la mettre en fond

    exemple


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;Rect: TRect; State: TGridDrawState);
    var
      aCanvas : Tcanvas;
     begin
      aCanvas := (sender as TDrawGrid).Canvas;
      aCanvas.Brush.Color := clwhite;
      aCanvas.FillRect(Rect);
      aCanvas.copyrect(rect,FondBmp.Canvas,rect);
      ...
    end;
    @+ Phil

  10. #10
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    EDIT : bon je vais vous montrer 2 programmes, le mien et un deuxième dont je veux obtenir le même principe :
    Mon programme
    Le programme modèle

    Donc vous verrez que sur le programme modèle il n'y a pas de bug de texture, on ne peut pas appliquer la texture sur toute la grille ...

    Les 2 grilles ont les mêmes propriétés à part pour l'emplacement et les dimensions ...

    Et les fonctions de dessins sont quasi similaires ...

    Mon programme :
    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
    procedure Ts_editeur.CarteDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      mBitMap: TBitmap;
      mJPEG: TJPEGImage;
      Chemin: string;
    begin
      mJPEG := TJPEGImage.Create;
      mBitMap := TBitmap.Create;
      Chemin := ExtractFilePath(Application.ExeName) + '\textures\' + ImgGrille + '.jpg';
     
      mJPEG.LoadFromFile(Chemin);
      mBitMap.Assign(mJPEG);  // "transforme" le JPEG en BMP
     
      Carte.Canvas.Draw(Rect.Left, Rect.Top, mBitMap);
     
      FreeAndNil(mBitMap);
     
    end;
    Le programme modèl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure Tf_editeur.DgCarteDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      bmp: TBitmap;
    begin
      bmp := TBitmap.Create;
      ImCarte.GetBitmap(TabImage[ACol, ARow], bmp);
      DgCarte.Canvas.Draw(Rect.Left, Rect.Top, bmp);
      FreeAndNil(bmp);
    end;
    ImCarte c'est un composant ImagList et TabImage un tableau qui représente la grille

    Voilà, si vous pouviez me dire pourquoi sur mon programme ça ne fonctionne pas

    Merci d'avance !

  11. #11
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    C'est clair que ton truc, ça ne marche pas... du tout même, et en plus j'ai eu droit à un joli débordement mémoire.

    M'est avis que l'utilisation d'un DrawGrid n'est pas forcément le plus judicieux.

    A ta place, j'aurais utilisé un PaintBox pour dessiner la carte sur la fiche, en dessinant la grille "Par dessus", ceci couplé avec un simple tableau bi-dimmensionnel...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Terrain:array[0..99,0..99] of strings;
    ...dans lequel chaque string représente le chemin vers une texture.

    avec quelques variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CaseSelectionnée : TPoint; //coordonnées de la case sélectionnée
    FonddeLaGrille:string; //chemin vers l'image de fond de la grille

  12. #12
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ah oui, j'oubliais

    Pour que ton affichage mette pas trois plombe, il faut que ta carte soit Un Bitmap prédessiné que tu met à jour à chaque fois que tu cliques sur générer,
    Ton PaintBox ne servant qu'a afficher ce bitmap, la grille qui va par dessus et les évènements utilisateurs (clic de la souris)

  13. #13
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut Exemple :
    Dans une fiche, j'ai mis une CheckBox, 2 ComboBox et un bouton generer (ça utilise les mêmes fichiers que ton prog) :

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,jpeg;
     
    const
      pt=15; moy=20; gd=30;
      largeur_case=20;
    type
      TOutil=(oGomme,oDefaire,oRefaire,oObjet);
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        ComboBoxTaille: TComboBox;
        ComboBoxTexture: TComboBox;
        ButtonGenerer: TButton;
        CheckBoxAfficherGrille: TCheckBox;
        procedure FormCreate(Sender: TObject);
        procedure ButtonGenererClick(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure PaintBox1Paint(Sender: TObject);
        procedure CheckBoxAfficherGrilleClick(Sender: TObject);
        procedure PaintBox1Click(Sender: TObject);
        procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        DessinCarte:TBitmap;
        //TableauCarte:array[0..gd-1,0..gd-1] of string;
        AfficherGrille:Boolean;
        CaseSelectionnee:TPoint;
        nb_cases : integer;
        procedure TextureGrille;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    Var
      Chemin : String;
      InfoFichier : TSearchRec;
     
    begin
      DessinCarte:=TBitmap.Create;
      ComboBoxTexture.Clear;
      Chemin := ExtractFilePath(Application.ExeName) + '\textures\terrains\';
     
      If FindFirst(Chemin+'*.jpg',faAnyFile-faDirectory,InfoFichier)=0 Then
      Begin
        Repeat
         ComboBoxTexture.Items.Add(ChangeFileExt(ExtractFileName(InfoFichier.FindData.cFileName),''))
         Until FindNext(InfoFichier)<>0;
         FindClose(InfoFichier);
      end;
      if ComboBoxTexture.Items.Count>0 then ComboBoxTexture.ItemIndex:=0;
    end;
     
    procedure TForm1.ButtonGenererClick(Sender: TObject);
    var
      taille_txt : string;
    begin
    // Selection de la taille
      taille_txt := ComboBoxTaille.Text;
    if taille_txt = 'Petite' then nb_cases := pt;
    if taille_txt = 'Moyenne' then nb_cases := moy;
    if taille_txt = 'Grande' then nb_cases := gd;
     
    // Genere la grille
     
      DessinCarte.Width := (nb_cases * largeur_case);
      DessinCarte.Height := DessinCarte.Width;
      PaintBox1.Height:=DessinCarte.Width;
      PaintBox1.Width:=DessinCarte.width;
     
      TextureGrille;
     
      PaintBox1.Repaint;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      DessinCarte.Free;
    end;
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var i:Integer;
        ACanvas:TCanvas;
    begin
      ACanvas:=PaintBox1.Canvas;
      ACanvas.StretchDraw(PaintBox1.ClientRect,DessinCarte);
      ACanvas.Pen.Color:=clYellow;
      ACanvas.Pen.Style:=psSolid;
      ACanvas.Pen.Width:=1;
      if CheckBoxAfficherGrille.State=cbChecked
      then begin
             for i:=1 to nb_cases-1 do
             begin
               //Verticales
               ACanvas.MoveTo(largeur_case*i,0);
               ACanvas.LineTo(largeur_case*i,PaintBox1.ClientHeight);
               //horizontales
               ACanvas.MoveTo(0,largeur_case*i);
               ACanvas.LineTo(PaintBox1.ClientWidth,largeur_case*i);
             end;
           end;
    end;
     
    procedure TForm1.TextureGrille;
    var
      mJPEG : TJPEGImage;
      mBitMap : TBitmap;
      Chemin : string;
    begin
      mJPEG := TJPEGImage.Create;
      mBitMap := TBitmap.Create;
      Chemin := ExtractFilePath(Application.ExeName) + '\textures\terrains\' + ComboBoxTexture.Text + '.jpg';
     
      mJPEG.LoadFromFile(Chemin);
      mBitMap.Assign(mJPEG);  // "transforme" le JPEG en BMP
     
      (* rect := Rect(Carte.Top,Carte.Left,Carte.Top + Carte.Height,Carte.Left + Carte.Width);*)
      DessinCarte.Canvas.Brush.Bitmap := mBitMap;
      DessinCarte.Canvas.FillRect(GetClientRect);
     
      mJPEG.Free;
      mBitMap.Free;
      DessinCarte.Canvas.Brush.Bitmap := nil;
     
    end; 
     
    procedure TForm1.CheckBoxAfficherGrilleClick(Sender: TObject);
    begin
      PaintBox1.Repaint;
    end;
     
    procedure TForm1.PaintBox1Click(Sender: TObject);
    var
      mJPEG : TJPEGImage;
      mBitMap : TBitmap;
      Chemin : string;
      ARect:TRect;
    begin
      mJPEG := TJPEGImage.Create;
      mBitMap := TBitmap.Create;
      Chemin := ExtractFilePath(Application.ExeName) + '\textures\grille\arbre.jpg';
     
      mJPEG.LoadFromFile(Chemin);
      mBitMap.Assign(mJPEG);  // "transforme" le JPEG en BMP
     
      CaseSelectionnee:=PaintBox1.ScreenToClient(mouse.CursorPos);
      CaseSelectionnee.X:=CaseSelectionnee.X div largeur_case;
      CaseSelectionnee.y:=CaseSelectionnee.y div largeur_case;
      ARect:=Bounds(CaseSelectionnee.X*largeur_case,CaseSelectionnee.Y*largeur_case,largeur_case,largeur_case);
      DessinCarte.Canvas.StretchDraw(AREct,mBitMap);
      mJPEG.Free;
      mBitMap.Free;
      PaintBox1.Repaint;
    end;
     
    procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      CaseSelectionnee.X:=x;
      CaseSelectionnee.Y:=y;
    end;
     
    end.
    J'espère que ça t'aidera

  14. #14
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    il n'y a aucun soucis a utiliser un drawgrid

    le probleme est qu'il alou un tjpeg et qu'il ne le libere jamais
    de plus il utilise la fonction draw alors
    que tu peut faire exactement la meme chose que waskol

    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
    var
      ...
      aCanvas : TCanvas;
      oldBruh  : Tbrush;
    begin 
       aCanvas := (sender as TDrawGrid).Canvas;
       mJPEG := TJPEGImage.Create;
       mBitMap := TBitmap.Create;
      Chemin := ExtractFilePath(Application.ExeName) + '\textures\terrains\' +          ComboBoxTexture.Text + '.jpg';
      mJPEG.LoadFromFile(Chemin);
      mBitMap.Assign(mJPEG);  // "transforme" le JPEG en BMP
      oldBruh  := aCanvas.Brush;
      aCanvas.Brush.Bitmap := mBitMap;
      aCanvas.FillRect(GetClientRect);
     
      mJPEG.Free;
      mBitMap.Free;
      aCanvas.Brush.Bitmap := nil; 
      aCanvas.Brush :=  oldBruh;
    end;

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Pour le JPEG non libéré, anapurna à tout a fait raison

    Sinon, si justement, il y a des soucis à utiliser un DrawGrid :

    1) Pour afficher une image de fond qui recouvre donc toute la grille, pour que l'image soit persistante, c'est de le gérer dans le OnDrawCell, qui est déclenché pour le dessin de Chaque cellule --> ingérable, en plus ton image se dessine par dessus ta grille que tu ne vois plus.

    non, non, non : Le paintBox, ça le fait et ce n'est pas plus compliqué (au contraire même) !
    Surtout que pour sauvegarder son oeuvre, il n'a plus qu'a sauvegarder le bitmap sous-jascent.

  16. #16
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    La DrawGrid c'est beaucoup plus simple pour moi et le projet surlequel je me suis base l'utilise te ca fonctionne a merveille

    Donc je prefererais trouver une solution avec la DrawGird, car je sais que c'est possible

    Je vais tester la methode de anapurna

    Merci a vous 2 pour votre aide !!

  17. #17
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Bon je viens de tester les 2 methodes :

    La premiere ne fonctionne pas mon pogramme ne m'affiche rien du tout en posant les bons composants, j'ai essaye avec et sans un composant PaintBox ...

    Et la seconde methode, c'est encore pire, ca m'affiche plusieurs fois la texture, et mon probleme n'est pas regle ...

    Vous pouvez telecharger ici le lien du srouce du projet dont je me suis inspire (simplement l'editeur de carte) comme ca vous pourrez comparer son code et ses composants avec le mien et me dire ce qui cloche par rapport a eux chez moi

    Encore une fois, merci pour votre aide

  18. #18
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    La premiere ne fonctionne pas mon pogramme ne m'affiche rien du tout en posant les bons composants, j'ai essaye avec et sans un composant PaintBox ...
    Ce qui m'épate, c'est que le code que je t'ai donné fonctionne à merveille chez moi !

    Je pense que tu as oublié, dans l'inspecteur d'objet, pour le paintbox, de relier son évènement OnPaint à la procédure PaintBox1Paint.

    Ressaies, je te garanti que ça marche et que ça a été testé (sinon, je ne me serais pas permis, hein... ).

    N'oublies pas de faire la même chose avec les OnCLick des Buttons.

    Donc pour résumer :
    1) dans l'inspecteur d'objet, tu te mets sur l'onglet "évènements".
    2) Tu cliques sur la PaintBox dans ta fiche, les évènements de cette dernière apparaissent alors dans l'inspecteur d'objet.
    3) Tu cherches alors OnPaint, et grace à la liste déroulante tu sélectionne PaintBox1Paint
    4) pareil pour les boutons et le checkbox avec leurs Onclick respectifs

    Sinon, effectivement, ça ne marche pas (si tes évènements ne sont liés à aucune procédure...) !

    Allez, courage, fait le et dis moi si ça marche, parce que ça devrait !

  19. #19
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Hoo que c'est genial

    En effet, les evenements n'etaient pas relies aux objets ...

    Donc ca fonctionne en effet tres bien

    Mais j'ai encore 2 questions :
    - Est-il possible de connitre les coordonnes des cases ? Ps en pixel mais en fonction de son num de ligne et de colonne ?
    Par exemple : la 1ere case du tableau (en haut a gauche) pour coordonne x=1 y=1 et celle a sa droite x=2 et y=1 etc

    - Je voudrais faire une fonction gomme qui efface un objet ? Comment faire ?

    Le reste je pense que j'arriverais a me debrouiller

    En tout cas, merci !!

  20. #20
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par K20
    Hoo que c'est genial

    En effet, les evenements n'etaient pas relies aux objets ...

    Donc ca fonctionne en effet tres bien
    T'as vu hein ?

    Citation Envoyé par K20
    Mais j'ai encore 2 questions :
    - Est-il possible de connitre les coordonnes des cases ? Ps en pixel mais en fonction de son num de ligne et de colonne ?
    Par exemple : la 1ere case du tableau (en haut a gauche) pour coordonne x=1 y=1 et celle a sa droite x=2 et y=1 etc
    Voui, regarde dans mon code
    CaseSelectionnee.X:=CaseSelectionnee.X div largeur_case;
    CaseSelectionnee.y:=CaseSelectionnee.y div largeur_case;

    CaseSelectionnée.X et CaseSelectionnée.Y te donnent les coordonnées (de 0 à n-1)

    Citation Envoyé par K20
    - Je voudrais faire une fonction gomme qui efface un objet ? Comment faire ?
    J'avais commencé, mais ça commençait à faire un peu trop usine à gaz pour le poster. (d'où le TableauCarte, et les outils oGomme,oDefaire,oRefaire) :p
    Il faut absolument, que ta grille soit enregistrée dans un tableau.
    Et que tu gères une liste de modifications (coordonnées x et y + Ancienne Texture).


    Citation Envoyé par K20
    Le reste je pense que j'arriverais a me debrouiller

    En tout cas, merci !!
    De rien !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. resizer une image de fond en fonction de la resolution
    Par the_edge dans le forum Général JavaScript
    Réponses: 30
    Dernier message: 02/11/2006, 14h47
  2. Réponses: 6
    Dernier message: 21/09/2006, 17h33
  3. Réponses: 4
    Dernier message: 03/05/2005, 09h03
  4. Ne pas répéter une image de fond
    Par valette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 05/01/2005, 21h49
  5. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2004, 17h57

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