Français Solved Comment ajouter une listbox dans un dialog ?

  • Auteur de la discussion Auteur de la discussion Valkentinx
  • Date de début Date de début

Valkentinx

User
10/10/22
24
1
300
Bonsoir,

Je recherche à faire un système de "cinema", en utilisant des mp4 à diffuser en jeu. Pour ça j'aimerai faire une listbox avec la liste des différentes vidéos.

J'aurai besoin d'y afficher le nom de ma classe mais je n'arrive pas vraiment à le faire.

Lorsque je veux récupérer le nom de ma classe qui ressemble à:

Code:
class Cinema
{
    class Video_1 <------ nom de la class que je veux récupérer
    {
        file = "chemin";
        description = "description";
    };
    class Video_2 <------ nom de la class que je veux récupérer
    {
        file = "chemin";
        description = "description";
    };
};


J'aurai aimé savoir si vous avez une idée de comment je pourrai faire pour réussir à afficher cela correctement

Merci !
 
Dernière édition:
Solution
C'est un peu plus compliqué que ça :)
Il faudrait utiliser un lbSetData et un lbData.

Comme ceci :
Code:
// Il faut définir _control & _display

private _desc = _display displayCtrl 12;

{
    _control lbAdd (configName _x);
    _control lbSetData [(lbSize _control)-1,getText (_x >> "description")];
} forEach ("true" configClasses (configFile >> "Cinema"));

_control ctrlAddEventHandler ["LBSelChanged", {
    _control = _this select 0;
    _selection = _this select 1;

    if (isNull _control) exitWith {};
    if (_selection isEqualTo -1) exitWith {};

    _data = _control lbData _selection;
    _desc ctrlSetText _data;
}];
J'ai réussi à trouvé d'où venait le problème..

J'ai remplacé le code du dessus par celui-ci (ligne 4) et ça fonctionne bien.

Code:
private _subClasses = (configfile >> "Cinema") call BIS_fnc_getCfgSubClasses;

{
    _control lbAdd format["%1",_x];
} foreach _subClasses;

Par contre, j'aimerai désormais que mon RscText soit modifié par la description en rapport avec la class sélectionné dans ma listbox, je ne trouve pas grand chose pour m'aider à ce sujet. Je ne sais pas comment récupérer cette fameuse description en fonction de l'élément cliqué dans la lb

J'ai déjà realisé cela :

Code:
private _txt = _display displayCtrl 1000;

private _subClasses = (configfile >> "Cinema") call BIS_fnc_getCfgSubClasses;

{
    _control lbAdd format["%1",_x];
    _control lbSetData [];
} foreach _subClasses;

_txt ctrlSetText parseText format["%1"];

Le truc, c'est que je ne sais pas comment remplir le lbSetData, et comment compléter le _txt pour update mon texte

Merci à vous
 
Dernière édition:
Hello! Tu peux utiliser un configClasses, ce sera plus simple : https://community.bistudio.com/wiki/configClasses

Par exemple :
Code:
{
    _class = configName _x;

    _name = getText (_x >> "displayName");
    _autre = getText (_x >> "autre");

    // [....]
} forEach ("true" configClasses (configFile >> "Cinema"));
Hello,

En utilisant cela, je n'arrive pas à update mon RscText, aurais--tu une idée ?

J'obtiens "any"
 
Dernière édition:
C'est un peu plus compliqué que ça :)
Il faudrait utiliser un lbSetData et un lbData.

Comme ceci :
Code:
// Il faut définir _control & _display

private _desc = _display displayCtrl 12;

{
    _control lbAdd (configName _x);
    _control lbSetData [(lbSize _control)-1,getText (_x >> "description")];
} forEach ("true" configClasses (configFile >> "Cinema"));

_control ctrlAddEventHandler ["LBSelChanged", {
    _control = _this select 0;
    _selection = _this select 1;

    if (isNull _control) exitWith {};
    if (_selection isEqualTo -1) exitWith {};

    _data = _control lbData _selection;
    _desc ctrlSetText _data;
}];
 
Solution
C'est un peu plus compliqué que ça :)
Il faudrait utiliser un lbSetData et un lbData.

Comme ceci :
Code:
// Il faut définir _control & _display

private _desc = _display displayCtrl 12;

{
    _control lbAdd (configName _x);
    _control lbSetData [(lbSize _control)-1,getText (_x >> "description")];
} forEach ("true" configClasses (configFile >> "Cinema"));

_control ctrlAddEventHandler ["LBSelChanged", {
    _control = _this select 0;
    _selection = _this select 1;

    if (isNull _control) exitWith {};
    if (_selection isEqualTo -1) exitWith {};

    _data = _control lbData _selection;
    _desc ctrlSetText _data;
}];

Merci pour ton aide!
 
Dernière édition: