Перейти к содержимому


Фотография

ListBox и RscPicture


Лучший Ответ Schatten , 12 October 2021 - 17:37

Как правильно их тепеь вызвать?

Как правильно расписано, например, здесь. Но ты сначала лучше реши основную проблему, а потом уже оптимизацией заниматься будешь.

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 10 October 2021 - 13:59

Сделал ListBox с выбором оружия и выводом изображения с ним,  всё работает, но когда добавил новый класс cfgMagazines началась чертовщина и теперь не могу разобраться как вставить новый cfg в цикл. Вот кусок моего кода:

 

while {true} do
{
_data = _weaponArray select (lbCurSel 1500);
_data params ["_weapon", "_count"];
_picture = getText (configFile >> "cfgWeapons" >> _weapon >> "picture");
ctrlSetText [1200, _picture];
sleep 0.1;
};
 
Тут мне нужно довить новый класс: (configFile >> "cfgMagazines" >> _magazines >> "picture");

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 10 October 2021 - 15:08

SaM0109, что содержит _magazines и откуда эта переменная берётся?


  • 0

#3 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 10 October 2021 - 15:53

SaM0109, что содержит _magazines и откуда эта переменная берётся?

2-й отдельный массив с магазинами, что-то вроде этого:

_weaponArray = [
"vn_k50m",
"vn_m14"
];
 
_MagazinesArray = [
"vn_m14_mag"
];
_pystolArray = [];
 
{
_wepName = getText (configFile >> "cfgWeapons" >> _x >> "displayname");
lbadd [1500, _wepName];
lbSetData [1500, _foreachIndex, _x];
} forEach _weaponArray;
 
{
_MagName = getText (configFile >> "CfgMagazines" >> _x >> "displayname");
lbadd [1500, _MagName];
lbSetData [1500, _foreachIndex, _x];
} forEach _MagazinesArray;

Сейчас пробую через контрол onLBSelChanged это всё провернуть, но получается таже каша...

 

_weapon = lbCurSel 1500;
_magazines = lbCurSel 1500;
 
switch (_weapon, _magazines) do
{
    case 0:
    {
_index = lbCurSel 1500;
_weapon = lbData [1500, _index];
_picture = getText (configFile >> "cfgWeapons" >> _weapon >> "picture");
ctrlSetText [1200, _picture];
    };
    case 1:
    {
    _index = lbCurSel 1500;
_weapon = lbData [1500, _index];
_picture = getText (configFile >> "cfgWeapons" >> _weapon >> "picture");
ctrlSetText [1200, _picture];
    };
    case 2:
    {
    _index = lbCurSel 1500;
_magazines = lbData [1500, _index];
_picture = getText (configFile >> "cfgMagazines" >> _magazines >> "picture");
ctrlSetText [1200, _picture];
    };
};

  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 10 October 2021 - 16:17

SaM0109, во-первых, нужно в качестве индекса использовать не _forEachIndex, а тот, который возвращает lbAdd; во-вторых, лучше использовать синтаксис, который требует control, а не ID. То есть добавлять в список надо так:

{
    _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName");

    _index = _control lbAdd _displayName;

    _control lbSetData [_index, _x];
} forEach _MagazinesArray;

В-третьих, поскольку у тебя в списке вещи из разных конфигов, то в onLBSelChanged нужно определять этот конфиг, а потом уже извлекать картинку и устанавливать её:

params ["_control", "_index"];

if (_index < 0) exitWith { };

_className = _control lbData _index;

_configName = switch (true) do { 
    case (isClass (configFile >> "CfgWeapons" >> _className)): { "CfgWeapons" }; 
    case (isClass (configFile >> "CfgMagazines" >> _className)): { "CfgMagazines" }; 
    default { "" }; 
};

if (_configName == "") exitWith { };

_picture = getText (configFile >> _configName >> _className >> "picture");

_control = _display displayCtrl 1200;

_control ctrlSetText _picture;

Сообщение отредактировал Schatten: 10 October 2021 - 16:18

  • 0

#5 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 10 October 2021 - 16:41

Прости я далёк от этого. А добавлять ID контрола в каком месте или вообще не надо? Если не затруднит мог бы переделать из моего? 


  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 10 October 2021 - 16:48

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

. Поэтому перед добавлением в список получи его. Переделать из твоего не получится, поскольку я не знаю идентификатор дисплея.


  • 0

#7 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 10 October 2021 - 16:55

Тот который 1234?
class dialogTest
{
idd = 1234;
class controls
{
class BaseFrame: RscFrame
{
idc = 1800;
x = 0.295812 * safezoneW + safezoneX;
y = 0.2294 * safezoneH + safezoneY;
w = 0.407344 * safezoneW;
h = 0.539 * safezoneH;
};
class WeaponList: RscListbox
{
idc = 1500;
x = 0.298906 * safezoneW + safezoneX;
y = 0.236 * safezoneH + safezoneY;
w = 0.0670312 * safezoneW;
h = 0.242 * safezoneH;
onLBSelChanged = "execVM 'Request_Units_LBselect.sqf'";
};
class ButtonGetWeapon: RscButton
{
idc = 1600;
x = 0.298906 * safezoneW + safezoneX;
y = 0.698 * safezoneH + safezoneY;
w = 0.04125 * safezoneW;
h = 0.055 * safezoneH;
text = "Взять ствол";
action = "execVM 'takeWeapon.sqf'"
};
class WeaponPicture: RscPicture
{
idc = 1200;
text = "";
x = 0.479375 * safezoneW + safezoneX;
y = 0.236 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.242 * safezoneH;
};
};
};

  • 0

#8 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 10 October 2021 - 17:01

Тот который 1234?

Да.

_display = findDisplay 1234;

if (isNull _display) exitWith { };

_control = _display displayCtrl 1500;

В onLBSelChanged дисплей можно получить так:

_display = ctrlParent _control;

Сообщение отредактировал Schatten: 10 October 2021 - 17:02

  • 1

#9 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 10 October 2021 - 17:11

Теперь я ещё больше запутался :wacko:

Прикрепленные файлы

  • Прикрепленный файл  S_getweapons.sqf   930байт   3 Количество загрузок:
  • Прикрепленный файл  Select.sqf   1.49К   1 Количество загрузок:

  • 0

#10 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 10 October 2021 - 22:22

Теперь я ещё больше запутался

Запутался в чём? Что первый и второй кусок кода отсюда нужно вставить, соответственно, в первый и второй кусок кода отсюда?


  • 0

#11 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 12 October 2021 - 11:38

С первым кодом я всё понял. Список работает. Со вторым кодом где onLBSelChanged почти, но Арма ругается на _control Я ещё далеко в этом не мастер, но полагаю, что он там не определён... Так?

 

_index = lbCurSel 1500; //Возвращает индекс выбранного элемента с множественным выбором
 
params ["_control", "_index"];  //Разбирает входной аргумент в массив частных переменных.
 
if (_index < 0) exitWith { }; //если _index меньше нуля то выходит из текущей области кода...
 
_className = _control lbData _index; // _className присваивает _control и возвращает набор данных в _index
 
_configName = switch (true) do {
    case (isClass (configFile >> "CfgWeapons" >> _className)): { "CfgWeapons" };
    case (isClass (configFile >> "CfgMagazines" >> _className)): { "CfgMagazines" };
    default { "" };
};
 
if (_configName == "") exitWith { };
 
_picture = getText (configFile >> _configName >> _className >> "picture");
 
_control = _display displayCtrl 1200;
 
_control ctrlSetText _picture;
 
_display = ctrlParent _control;

  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 12 October 2021 - 13:01

Арма ругается на _control

Судя по разметке, ты не передаёшь в свои сценарии переменную _this, которая содержит _control и _index:

_this execVM "...";

А вообще, таким способом лучше не вызывать всякие обработчики, лучше вызывать с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


  • 0

#13 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 12 October 2021 - 13:37

Я об этом вспомнил на работе пока был, а потом из головы вылетело :wacko: Как правильно их тепеь вызвать? Сорян и СПС! :good:


Сообщение отредактировал SaM0109: 12 October 2021 - 14:19

  • 0

#14 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 12 October 2021 - 17:37   Лучший Ответ

Как правильно их тепеь вызвать?

Как правильно расписано, например,

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

. Но ты сначала лучше реши основную проблему, а потом уже оптимизацией заниматься будешь.


  • 0

#15 OFFLINE   SaM0109

SaM0109

    Рядовой

  • Пользователи
  • 8 сообщений

Отправлено 12 October 2021 - 17:45

Ясно, спасибо, думаю (надеюсь) разберусь...


Сообщение отредактировал SaM0109: 12 October 2021 - 17:50

  • 0




Яндекс.Метрика