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# Discussion :

Save ou Save as grisé dans un programme


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Save ou Save as grisé dans un programme
    Bonjour à tous.

    Tout d'abord, ce post n'a pas vocation à me faire apprendre le langage c#, mais comme tout le monde, je m'y intéresse tout de même.
    Je m'adresse à quiconque pouvant y apporter sa science qui est nul doute bien meilleure que la mienne en la matière.

    J'aime le "modding", cette partie (pour ceux qui ne connaissent pas) d'un jeu qui consiste à en modifier le contenu pour l'enrichir, que ce soit des textures, ou des scripts.

    Des outils ont été créés par des passionnés afin de pouvoir modder. Et celui qui m'interesse ouvre un fichier intitulé Tables.sds.
    Il s'agit d'un fichier contenant une série d'autres fichiers sous forme XML, BIN etc. Le jeu en question n'a pas réellement d'intérêt pour le sujet, c'est plutot l'outil, et la partie nommée "Table".


    Voici des screens dudit programme:






    Lorsque j'ouvre ce fichier, et que j'explore cette partie "Table", on peut distinguer parfaitement des tableaux, que l'on peut modifier à souhait. Seulement voilà, je ne sais pas si c'est un désir de l'auteur, ou bien un coté légèrement flemmard (comme dit sur un de ses fichiers source), ou bien encore un coté de programmation qu'il ne connait pas mais il est impossible après édition du tableau de sauvegarder (voire même écraser) : cette option qui s'avèrerait bien utile est grisée.

    Ce programmeur en question laisse son code source, et j'ai peut-être trouvé où le bas blessait. Le voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void saveButton_Click(object sender, EventArgs e)
            {
     
            }
    Voilà, donc cette partie est vide.

    Pourriez-vous éclairez ma lanterne, j'aimerais vraiment que ce programme puisse sauvegarder très exactement à ce niveau.

    En vous remerciant par avance!

    PS: Pour le code source, tout est là ou presque : http://svn.gib.me/public/illusion/tr...on.ExploreSDS/

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 75
    Points
    75
    Par défaut
    bon je dois etre aveugle , peux tu indiquer dans quel fichier se trouve cette methode car perso je ne l'ai pas trouvée

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par foxxyz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void saveButton_Click(object sender, EventArgs e)
            {
     
            }
    Voilà, donc cette partie est vide.
    OK, donc l'auteur de cet outil n'a pas implémenté cette fonctionnalité, et il a donc laissé le bouton désactivé... mais s'il a mis prévu le bouton, je suppose qu'il a l'intention de le faire un jour.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ah merci d'avoir répondu,

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
     
    namespace Gibbed.Illusion.ExploreSDS
    {
        public partial class TableViewer : Form
        {
            private Dictionary<uint, string> ColumnNames = new Dictionary<uint, string>();
     
            public TableViewer()
            {
                this.InitializeComponent();
     
                // TODO: move this big list to an external file
                // I am lazy :effort:
                this.AddColumnName("0");
                this.AddColumnName("1");
                this.AddColumnName("2");
                this.AddColumnName("3");
                this.AddColumnName("4");
                this.AddColumnName("5");
                this.AddColumnName("6");
                this.AddColumnName("Id");
                this.AddColumnName("ID");
                this.AddColumnName("Top");
                this.AddColumnName("Max");
                this.AddColumnName("flag");
                this.AddColumnName("guid");
                this.AddColumnName("HP");
                this.AddColumnName("CO");
                this.AddColumnName("Type");
                this.AddColumnName("Left");
                this.AddColumnName("name");
                this.AddColumnName("Name");
                this.AddColumnName("Flags");
                this.AddColumnName("Speed");
                this.AddColumnName("Weight");
                this.AddColumnName("model");
                this.AddColumnName("scale");
                this.AddColumnName("speed");
                this.AddColumnName("Descr");
                this.AddColumnName("Group");
                this.AddColumnName("Notes");
                this.AddColumnName("Price");
                this.AddColumnName("Range");
                this.AddColumnName("Right");
                this.AddColumnName("Sound");
                this.AddColumnName("Value");
                this.AddColumnName("Water");
                this.AddColumnName("Bottom");
                this.AddColumnName("Default");
                this.AddColumnName("Defence");
                this.AddColumnName("Description");
                this.AddColumnName("impact");
                this.AddColumnName("Material");
                this.AddColumnName("Possibility");
                this.AddColumnName("Reaction");
                this.AddColumnName("Visibility");
                this.AddColumnName("restitution");
                this.AddColumnName("FadeIn");
                this.AddColumnName("FadeOut");
                this.AddColumnName("fragtex");
                this.AddColumnName("Impact");
                this.AddColumnName("SlipId");
                this.AddColumnName("TexCols");
                this.AddColumnName("TexEnd");
                this.AddColumnName("TexRows");
                this.AddColumnName("TexStart");
                this.AddColumnName("TypeName");
                this.AddColumnName("BlockId");
                this.AddColumnName("CrashId");
                this.AddColumnName("MaterialId");
                this.AddColumnName("RideId");
                this.AddColumnName("SlideId");
                this.AddColumnName("MaterialName");
                this.AddColumnName("CrossType");
                this.AddColumnName("affector");
                this.AddColumnName("MaxDistance");
                this.AddColumnName("BlockingTime");
            }
     
            private void AddColumnName(string name)
            {
                this.ColumnNames.Add(FileFormats.FNV.Hash32(name), name);
            }
     
            public void LoadFile(FileFormats.SdsMemory.Entry entry)
            {
                var tables = new FileFormats.ResourceTypes.TableResource();
                tables.Deserialize(entry.Header, entry.Data);
     
                this.comboBox.Items.Clear();
                foreach (var table in tables.Tables)
                {
                    this.comboBox.Items.Add(table);
                }
                if (this.comboBox.Items.Count > 0)
                {
                    this.comboBox.SelectedIndex = 0;
                }
            }
     
            private void OnLoadFromFile(object sender, EventArgs e)
            {
            }
     
            private void OnSelectTable(object sender, EventArgs e)
            {
                var table = this.comboBox.SelectedItem as FileFormats.ResourceTypes.TableData;
     
                this.dataGridView.Columns.Clear();
                this.dataGridView.Rows.Clear();
     
                foreach (var column in table.Columns)
                {
                    string name;
     
                    if (this.ColumnNames.ContainsKey(column.NameHash) == true)
                    {
                        name = this.ColumnNames[column.NameHash];
                    }
                    else
                    {
                        name = column.NameHash.ToString("X8");
                    }
     
                    this.dataGridView.Columns.Add(name, name);
                }
     
                foreach (var rowData in table.Rows)
                {
                    var rowView = this.dataGridView.Rows[this.dataGridView.Rows.Add(1)];
     
                    int column = 0;
                    foreach (var cellData in rowData.Columns)
                    {
                        var cellView = rowView.Cells[column];
                        cellView.Value = cellData;
                        column++;
                    }
                }
            }
     
            private void OnSaveToFile(object sender, EventArgs e)
            {
     
            }
     
            private void OnCopyHashes(object sender, EventArgs e)
            {
                var hashes = new List<uint>();
     
                foreach (FileFormats.ResourceTypes.TableData table in this.comboBox.Items)
                {
                    foreach (var hash in table.Columns.Select(c => c.NameHash))
                    {
                        if (hashes.Contains(hash) == false)
                        {
                            hashes.Add(hash);
                        }
                    }
                }
     
                hashes.Sort();
     
                var text = new StringBuilder();
                foreach (var hash in hashes)
                {
                    text.AppendLine(hash.ToString("X8"));
                }
     
                Clipboard.SetText(text.ToString());
            }
     
            private void saveButton_Click(object sender, EventArgs e)
            {
     
            }
        }
    }
    Voilà, je pense après étude du code que ca doit être implémenter dans ce code.
    Pour le lien du fichier source, il est ici : http://svn.gib.me/public/illusion/tr...TableViewer.cs

    Citation Envoyé par tomlev Voir le message
    OK, donc l'auteur de cet outil n'a pas implémenté cette fonctionnalité, et il a donc laissé le bouton désactivé... mais s'il a mis prévu le bouton, je suppose qu'il a l'intention de le faire un jour.
    Je ne suis malheureusement pas si sûr car ces outils commencent à avoir de l'âge, et le jeu en question n'ayant pas fait l'unanimité je pense qu'il est parti un peu aux oubliettes...

    Vous pensez qu'il est possible d'implémenter cette action "Save"?

    Je suis arrivé (et je ne sais pas par quel miracle) avec Visual Studio à faire apparaitre "Save" en non-grisé, dans l'executable final, c'est clickable, mais rien ne se passe (ce qui reste somme toute tout à fait normal).

    Avez-vous une idée sur quoi mettre en source?


    Merci!

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par foxxyz Voir le message
    Avez-vous une idée sur quoi mettre en source?
    Ben là comme ça, non... il faudrait savoir quelles sont les données à enregistrer, dans quel format elles doivent être enregistrées, etc... Et je suppose que si l'auteur ne l'avait pas encore fait, c'est que ce n'est pas trivial.

Discussions similaires

  1. Chargement d'une lib partagée C++ dans un programme C
    Par Zero dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/09/2003, 16h40
  2. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  3. Réponses: 2
    Dernier message: 24/06/2003, 20h31
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

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