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

Delphi Discussion :

problème passage en paramètre d'objet console en mode graphique


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut problème passage en paramètre d'objet console en mode graphique
    Bonjour à tous !

    J'ai un petit problème...

    Je suis en train de réaliser une interface graphique. Mais pour cela, j'ai besoin d'utiliser un tableau dynamique créé en mode console.
    Je veux utiliser ce tableau dans un évenement d'une drawgrid (lorsque je clique dessus). Mais à chaque fois que je rappelle cette procédure (c'est à dire à chaque fois que je clique sur ma grid), tout ce que j'ai fait précédemment sur mon tableau dynamique n'est pas enregistré.

    J'ai essayé de passer cette grille en paramètre dans la procédure d'évènement, mais cela ne fonctionne pas...

    Si qqn à une solution...
    Merci beaucoup d'avance.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Si tu pouvais montrer ton code, il nous serait plus simple pour te répondre, car c'est un peu vague comme explication.

    De plus je suis en rupture de stock de boule de crystal

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    JE vois mal le principe de la combinaison appliaction Console/Graphque En genera lon opte soit pour l'un .. soit pour l'autre

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    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
    procedure TF_jeu.DG_jeuClick(Sender: TObject);
    var
    rect:trect;
    code_console : T_code;
    
    
    
    begin
        rect:=DG_jeu.CellRect(dg_jeu.col,Dg_jeu.row);
          // init de la grille console
       INIT_GRILLE_DEB(U_type.grille,strToInt(F_options.E_nombre.Text));
    
       gagnant := false;
       bloquee := false;
    
    
    if nbre_joueur = 2
    then // on joue à deux humains
     begin
       
      if ((U_type.gagnant = false) and (not U_type.bloquee) )
      then
      BEGIN
         // regarder si on a les deux paires ou les deux impaires
       if ( ((dg_jeu.col mod 2 = 0) and (DG_jeu.Row mod 2 =0 )) or ((dg_jeu.col mod 2 = 1) and (DG_jeu.Row mod 2 =1 )))
       then
         begin
         //  showmessage ('Case interdite');
         end
       else
         begin  // on trace et on change de joueur
           DG_jeu.Canvas.Brush.Color:=couleur_joueur;
           DG_jeu.Canvas.FillRect(rect);
           // ajout dans la matrice console
             CONV_GRAPH_TO_CONS(DG_jeu.row,DG_jeu.col,code_console.un,code_console.deux,code_console.trois,code_console.quatre);
             TRAIT_CONSOLE(joueur,code_console,U_type.grille);
             // verif si fin de partie
             FIN_PARTIE_A_DEUX(U_type.grille,code_console.un,code_console.deux,strToint(F_options.E_nombre.text),joueur,gagnant,F_options.E_joueur1.Text,F_options.E_joueur2.Text);
             // verif si grille bloquee
             GRILLE_BLOQUEE(U_type.grille,strtoInt(F_options.E_nombre.Text),joueur,U_type.bloquee);
           // on change de joueur
            if  L_joueur.Caption = F_options.E_joueur1.Text
            then // on passe au joueur 2
               begin
                 // change le nom
                 L_joueur.Caption:= F_options.E_joueur2.Text;
                 //change couleur de jeu
                 couleur_joueur := F_options.ColorBox_joueur2.Selected;
                 //change couleur nom
                 L_joueur.Font.Color := F_options.ColorBox_joueur2.Selected;
               end;

    je ne sais pas trop comment poster mon code...
    Dans les appels de procédures en rouge, je fais des modifications sur mon composant grille (qui est un tableau dynamique).

    Et lorsque je rappelle la procedure TF_jeu.DG_jeuClick, c'est à dire lorsque je reclique sur ma DRAWGRID qui est mon plateau de jeu, les modifications réalisées sur la grille (tab dynamique) ne sont pas enregistrées...

    Jsp que c'est un petit peu plus clair maintenant.

    Merci beaucoup !!!

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Humm ... quand tu parle de console tu parles bien de la petite fenetre noire a bordure bleu ressemblant a du DOS ?

    Dans ce cas, je comprends ma l'interet de melanger application console et interface graphique.
    Je ne saurais trop te conseiller de basculer en tout graphique

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Euhmmm...
    Il est vrai que je me suis peut être mal exprimée...

    J'ai créé cet objet en console, mais en réalité je voulais juste dire que ce n'était pas un composant graphique... C'est un tableau dynamique déclaré "par moi-même"...

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    ha oki

    Donc si j'ai bien compris, tu n'as pas d'evenements lié aux actions sur ta grille cree dynamiquement ?
    Tu as bie npensé a affecter l'evenement a sa variable ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SG : TStringGrid.Create(Self);
    [...]
    Sg.OnClick := Self.SGClick;
    avec bien sur dans ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Procedure SGClick(Sender : TObject);
    de meme que pour tout autres evenements (attention les parametres changent !)

    sinon pour poster le code :

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    je suis désolée. Mais comme vous devez vous en douter, je ne suis pas encore une experte et je n'ai pas tout à fait compris tout ce que vous m'avez dit...
    Pour moi, les applications .create ne sont que pour les classes.
    Mais, je ne travaille pas avec des classes...

    J'ai placé les deux lignes de code. Mais l'execution plante en pas à pas au moment de créer le rectangle sur la ligne suivante.

    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
    procedure TF_jeu.DG_jeuClick(Sender: TObject);
    var
    rect:trect;
    code_console : T_code;
    
    
    
    begin
        DG_jeu := TDrawGrid.create(self);
        DG_jeu.OnClick := self.DG_jeuClick;
        rect:=DG_jeu.CellRect(dg_jeu.col,Dg_jeu.row);      // init de la grille console
       INIT_GRILLE_DEB(U_type.grille,strToInt(F_options.E_nombre.Text));
    
       gagnant := false;
       bloquee := false;
    
    
    if nbre_joueur = 2
    then // on joue à deux humains
     begin
       
      if ((U_type.gagnant = false) and (not U_type.bloquee) )
      then
      BEGIN
         // regarder si on a les deux paires ou les deux impaires
       if ( ((dg_jeu.col mod 2 = 0) and (DG_jeu.Row mod 2 =0 )) or ((dg_jeu.col mod 2 = 1) and (DG_jeu.Row mod 2 =1 )))
       then
         begin
         //  showmessage ('Case interdite');
         end

  9. #9
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    ok.
    TDrawGrid est un composant visuel, donc necessite un parent pour gerer son affichage.

    En general Self est le parent mais de maneire plus precise c'est le composant dans lequel il doit etre affiché.
    Si parent est la form alors sot affichage sera relatif a la form (top, left, etc ...) si c'est un panel .. alors ca sera par rapport au panel ... etc.

    Cette ligne doit etre (en general) la 2e ligne apres le Create.
    Tant que ton parent ne sera pas affecté, tu ne pourras pas toucher a tout type de fonction/property ayant un rapport de pres ou de loin avec la partie graphique du composant, et surtout qui entraine une mise a jour graphique du composant.

  10. #10
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 511
    Points : 2 783
    Points
    2 783
    Billets dans le blog
    10
    Par défaut
    Piste 1 :
    Pour nous autres le mode console est une émulation du mode DOS donc si tu lance ton programme en mode console il n'est pas sur qu'il soit terminé lorsque tu passe à l'instruction suivante. Donc il faut dans ce cas attendre la fin du programme console.

    Piste 2 :
    Essaye de changer les paramètre de ta procedure passe les en var ou en const

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    C'est bon !!!
    J'ai trouvé. Il suffisait seulement de créer un pointeur qui pointe sur la matrice, et d'appeler mon tableau dynamique avec ce pointeur.

    Merci beaucoup à ceux qui ont pris du temps pour me répondre...

  12. #12
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    haaaaa ok !!!
    Ta fonction sert a initialiser un tableau ...

    Dans ce cas bien sur, il faut soir passer un pointeur soit passer la variable en parametre VAR dasn ta procedure .. sinon tu travailel dans ta procedure sur uen copie qui sera detruite a la fin de la procedure.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    dsl...
    je ne sais pas toujours comment exprimer explicitement mon problème....
    merci d'avoir essayé en tout cas...

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

Discussions similaires

  1. Problème passage de paramètres
    Par flo-1987 dans le forum Débuter
    Réponses: 3
    Dernier message: 06/12/2008, 20h29
  2. Problème passage de paramètre à un bean
    Par Niniz dans le forum JSF
    Réponses: 5
    Dernier message: 01/08/2007, 17h26
  3. problème passage de paramètres
    Par langelot222 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/07/2007, 17h25
  4. Réponses: 3
    Dernier message: 18/08/2006, 11h20
  5. [NEWBIE] Problème passage en paramètre
    Par Goundy dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2005, 21h18

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