Другое С/С++ Вопрос - Ответ

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,767
11,220
Почему диалог не отображается еще раз после нажатия на кнопку в этом же диалоге? При этом в консоль выводит "Dialog shown!"
C++:
void ShowDialog() {
    string Text = "";

    for (int GangIndex = 0; GangIndex < Settings.size(); GangIndex++) {
        Text.append(Settings[GangIndex].name + "\t" + (Settings[GangIndex].enabled ? "ON" : "OFF") + "\n");
    }
    SF->getSAMP()->getDialog()->ShowDialog(DialogId, 2, "dialogtitle", (char*)Text.c_str(), "TOGGLE", "X");
    cout << "Dialog shown!" << endl;
}


void CALLBACK dialogCallback(int dialogId, int buttonId, int listItem, const char* input) {
    if (dialogId == DialogId && buttonId == 1) {
        if (listItem >= 0 && listItem <= Settings.size()) {
            Settings[listItem].enabled = !Settings[listItem].enabled;
            cout << "State: " + (Settings[listItem].enabled ? "ON" : "OFF") << endl;
        }
        ShowDialog();
    }
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
Почему диалог не отображается еще раз после нажатия на кнопку в этом же диалоге? При этом в консоль выводит "Dialog shown!"
C++:
void ShowDialog() {
    string Text = "";

    for (int GangIndex = 0; GangIndex < Settings.size(); GangIndex++) {
        Text.append(Settings[GangIndex].name + "\t" + (Settings[GangIndex].enabled ? "ON" : "OFF") + "\n");
    }
    SF->getSAMP()->getDialog()->ShowDialog(DialogId, 2, "dialogtitle", (char*)Text.c_str(), "TOGGLE", "X");
    cout << "Dialog shown!" << endl;
}


void CALLBACK dialogCallback(int dialogId, int buttonId, int listItem, const char* input) {
    if (dialogId == DialogId && buttonId == 1) {
        if (listItem >= 0 && listItem <= Settings.size()) {
            Settings[listItem].enabled = !Settings[listItem].enabled;
            cout << "State: " + (Settings[listItem].enabled ? "ON" : "OFF") << endl;
        }
        ShowDialog();
    }
потому что это локальный диалог, а не серверный. dialogCallback не вызовется
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,767
11,220
потому что это локальный диалог, а не серверный. dialogCallback не вызовется
он вызывается, мб я плохо описал проблему:
1. есть команда, допустим /menu
2. после ввода команды диалог отображается и функция dialogCallback выполняется (значения меняются, в консоль выводится инфа)
сама проблема: после нажатия на кнопку в диалоге мне надо открыть диалог еще раз, функция ShowDialog выполняется (в консоль выводится текст), но сам диалог не появляется.
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
он вызывается, мб я плохо описал проблему:
1. есть команда, допустим /menu
2. после ввода команды диалог отображается и функция dialogCallback выполняется (значения меняются, в консоль выводится инфа)
сама проблема: после нажатия на кнопку в диалоге мне надо открыть диалог еще раз, функция ShowDialog выполняется (в консоль выводится текст), но сам диалог не появляется.
на момент нажатия на кнопку диалог все еще считается открытым сампом емнип
 
  • Нравится
Реакции: ARMOR

Chilim

Потрачен
71
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет,такая проблема, не могу найти сборку решений х86 для OpenCv а самому собирать не охото,может у кого то есть и сможет поделиться? буду благодарен")
 
  • Ха-ха
  • Нравится
Реакции: Barsyk и legendabrn
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Для std::set нужны оператор сравнения для сортировки.

Решение - использовать std::unordered_set, или написать операторы сравнения(==;!=;<;>;)
я этот код сократил и кинул только нужное для понимания, дело в не в этом, оно почему то не может использовать значение по ссылке, когда убираю & - программа компилируется
C++:
struct Contact
{
    string name, phone, namePlusPhone;
    Contact(string& _name, string& _phone) :name(_name), phone(_phone), namePlusPhone(_name + ": " + _phone) {};
    operator const char* () const
    {
        return namePlusPhone.c_str();
    }
    bool operator == (const Contact& item) const
    {
        return (item.name  == this->name);
    }
    bool operator < (const Contact& item) const
    {
        return (item.name > this->name);

    }
};


int main()
{

    set <Contact> contacts;
    contacts.insert(Contact("Jack Nilson", "+841414455"));
    contacts.insert(Contact("Hardi Jel", "+311414141"));
    contacts.insert(Contact("Andy Kil", "+42523412"));
    contacts.insert(Contact("Leon Brawl", "+532342342342"));
    contacts.insert(Contact("Jackson Will", "+32466666621"));
    contacts.insert(Contact("Andrew Redmond", "+41414345346"));
    contacts.insert(Contact("Julia Breed", "+54312346236"));
}
 
Последнее редактирование:

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
я этот код сократил и кинул только нужное для понимания, дело в не в этом, оно почему то не может использовать значение по ссылке, когда убираю & - программа компилируется
C++:
struct Contact
{
    string name, phone, namePlusPhone;
    Contact(string& _name, string& _phone) :name(_name), phone(_phone), namePlusPhone(_name + ": " + _phone) {};
    operator const char* () const
    {
        return namePlusPhone.c_str();
    }
    bool operator == (const Contact& item) const
    {
        return (item.name  == this->name);
    }
    bool operator < (const Contact& item) const
    {
        return (item.name > this->name);

    }
};


int main()
{

    set <Contact> contacts;
    contacts.insert(Contact("Jack Nilson", "+841414455"));
    contacts.insert(Contact("Hardi Jel", "+311414141"));
    contacts.insert(Contact("Andy Kil", "+42523412"));
    contacts.insert(Contact("Leon Brawl", "+532342342342"));
    contacts.insert(Contact("Jackson Will", "+32466666621"));
    contacts.insert(Contact("Andrew Redmond", "+41414345346"));
    contacts.insert(Contact("Julia Breed", "+54312346236"));
}
в конструкторе ссылка константная должна быть чтобы туда временное значение можно было сконструировать
 

MeG@LaDo[N] ^_^

Известный
280
316
у меня есть текст в пастебин и мне нужно отправить GET запрос через boost и записать текст в переменную, как можно отправить запрос через эту либу? чекал
в интернете темы но не особо понял
 

Sadow

Известный
1,437
585
Я захотел запустить приложение которое создаётся при компиляции .cpp файла и там какие то иероглифы вместо русского текста. Вот сам код:
C++:
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "RU");
    int a, b, c;
    int d = 0;
    cout << "Запуск программы..." << endl;
    while (d<101)
    {
        cout << "Запуск программы " << d << "%" << endl;
        d++;
    }
    if (d=100)
    {
        cout << "Программа запущена!" << endl;
    }
    cout << "Введите два числа" << endl;
    cin >> a >> b;
    cout << "Выберите вариант который вам подходит:\n1. Сложение\n2. Вычитание\n3. Умножение\n4. Деление" << endl;
    cin >> c;
    switch (c)
    {
        case 1:
        cout << "Ответ: " << a + b << endl;
        break;
        case 2:
        cout << "Ответ: " << a - b << endl;
        break;
        case 3:
        cout << "Ответ: " << a * b << endl;
        break;
        case 4:
        cout << "Ответ: " << a / b << endl;
        break;
        default:
        cout << "Данный пункт отсутствует в списке!" << endl;
        break;
    }
}
 

ARMOR

kjor32 is legend
Модератор
4,845
6,066
Я захотел запустить приложение которое создаётся при компиляции .cpp файла и там какие то иероглифы вместо русского текста. Вот сам код:
C++:
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "RU");
    int a, b, c;
    int d = 0;
    cout << "Запуск программы..." << endl;
    while (d<101)
    {
        cout << "Запуск программы " << d << "%" << endl;
        d++;
    }
    if (d=100)
    {
        cout << "Программа запущена!" << endl;
    }
    cout << "Введите два числа" << endl;
    cin >> a >> b;
    cout << "Выберите вариант который вам подходит:\n1. Сложение\n2. Вычитание\n3. Умножение\n4. Деление" << endl;
    cin >> c;
    switch (c)
    {
        case 1:
        cout << "Ответ: " << a + b << endl;
        break;
        case 2:
        cout << "Ответ: " << a - b << endl;
        break;
        case 3:
        cout << "Ответ: " << a * b << endl;
        break;
        case 4:
        cout << "Ответ: " << a / b << endl;
        break;
        default:
        cout << "Данный пункт отсутствует в списке!" << endl;
        break;
    }
}
Ошибка где-то у тебя, у меня всё хорошо запускает.
1665308594876.png


Ещё попробуй метод из этой темы, возможно поможет:
 

Sadow

Известный
1,437
585
Ошибка где-то у тебя, у меня всё хорошо запускает.
Посмотреть вложение 172397

Ещё попробуй метод из этой темы, возможно поможет:
Может ли это быть из за того что я использую Visual Studio Code?
 

ARMOR

kjor32 is legend
Модератор
4,845
6,066
Может ли это быть из за того что я использую Visual Studio Code?
Возможно у тебя не установлена снизу водировка Windows 1251.
Нажми туда куда указывает стрелочка
Без імені.png

Потом что-то типо "повторно открыть в кодировке" и потом найти Cyrilic Windows 1251, и выбери её.
 

Sadow

Известный
1,437
585