Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.07.2016
Сообщений: 19

Если пользователь выбрал две кнопки с одинаковыми Caption-ами, убрать их с формы

22.07.2016, 11:38. Показов 1431. Ответов 27

Студворк — интернет-сервис помощи студентам
Доброго времени суток! У меня есть на форме несколько кнопок. нужно чтобы при нажатии на одну, а затем вторую он сравнил надписи на них (caption) и если они совпадают, то убрал их. типа как в маджонг. Помогите пожалуйста, у самой не выходит ничего((
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2016, 11:38
Ответы с готовыми решениями:

Выполнить макрос если пользователь выбрал один из элементов combobox'а
Вот файл При загрузке страницы выполняется макрос добавления в combobox значений как нужно описать макрос что бы он реагировал на...

Как запретить удаление строки в DataGridView, если пользователь не выбрал ни одной строки?
Здравствуйте! У меня есть datagridview и кнопка удаления записи на форме. Данные в datagridview попадают из таблицы базы данных...

Yii2 две кнопки у формы
Доброго времени суток! Как написать обработчик нескольких кнопок формы Yii2. При нажатии на обе кнопки данные из формы должны...

27
0 / 0 / 0
Регистрация: 14.07.2016
Сообщений: 19
22.07.2016, 16:19  [ТС]
Студворк — интернет-сервис помощи студентам
туплю немного уже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button15Click(TObject *Sender)
{
    static int kn1 = -1,kn2 = -1 ;
    for(int i=0; i<ComponentCount; i++)
      if(Components[i]->ClassNameIs("TButton") &&
         ((TButton*)Components[i])->Name == ((TButton*)Sender)->Name)
        if(kn1<0) kn1=i; else if(kn2<0) kn2=i;
         else { kn1=kn2; kn2=i; }
        if(kn1>=0 && kn2>=0 &&  kn1!=kn2 &&
      ((TButton*)Components[kn1])->Caption ==
      ((TButton*)Components[kn2])->Caption )
    {
      if(kn1<kn2) { delete (TButton*)Components[kn2];
                    delete (TButton*)Components[kn1]; }
      else  {  delete (TButton*)Components[kn1];
               delete (TButton*)Components[kn2];  }
       kn1=kn2=-1;
 
    }
}
вот код и он один раз срабатывает и высвечивает ошибку.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.07.2016, 16:27
Цитата Сообщение от bobrik007 Посмотреть сообщение
он один раз срабатывает и высвечивает ошибку
У меня работает. Попробуйте не delete, а изменить видимость кнопки__
C++
1
2
3
4
5
6
7
8
    if(kn1>=0 && kn2>=0 &&  kn1!=kn2 &&
      ((TButton*)Components[kn1])->Caption ==
      ((TButton*)Components[kn2])->Caption )
    {
       (TButton*)Components[kn1]->Visible = false;
       (TButton*)Components[kn2]->Visible = false;
       kn1=kn2=-1;
     }
0
0 / 0 / 0
Регистрация: 14.07.2016
Сообщений: 19
22.07.2016, 16:51  [ТС]
уже так и сделала Спасибо большое
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.07.2016, 16:57
Задание: создать случайное количество кнопок с повторяющимися названиями. Если пользователь нажимает одну кнопку, выделяем ее. Если вторую с таким же названием, то удаляем, если с другим названием, то снимаем выделение.

C++
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
#define WM_DELETE_FROM_SENDER   WM_USER + 1
 
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) {
    for (int i = 0; i < 10; i++) {
        TButton *ABtn = new TButton(this);
        ABtn->Parent = this;
        ABtn->Align = alTop;
        ABtn->Caption = "Кнопка " + UnicodeString(Random(5));
        ABtn->OnClick = &Button1Click;
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TForm2::ApplicationEvents1Message(tagMSG &Msg, bool &Handled) {
    if (Msg.message == WM_DELETE_FROM_SENDER && Msg.hwnd == this->Handle) {
        TObject *AObject = (TObject*)Msg.wParam;
        AObject->Free();
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender) {
    TButton * ASelectedBtn = dynamic_cast<TButton*>(Sender);
    if (ASelectedBtn) {
        ASelectedBtn->Font->Style = ASelectedBtn->Font->Style.Contains(fsBold)
        ? ASelectedBtn->Font->Style >> fsBold : ASelectedBtn->Font->Style << fsBold;
 
        if (ASelectedBtn->Font->Style.Contains(fsBold)) {
 
            TButton *ACompareBtn = 0;
            for (int i = 0; i < this->ComponentCount; i++) {
                TButton *AButton = dynamic_cast<TButton*>(this->Components[i]);
                if (AButton && AButton->Font->Style.Contains(fsBold) && ASelectedBtn != AButton) {
                    if (ASelectedBtn->Caption == AButton->Caption) {
                        ACompareBtn = AButton;
                    }
                    else {
                        AButton->Font->Style = AButton->Font->Style >> fsBold;
                        ASelectedBtn->Font->Style = ASelectedBtn->Font->Style >> fsBold;
                    }
 
                    break;
                }
            }
            if (ACompareBtn) {
                PostMessage(this->Handle, WM_DELETE_FROM_SENDER, (int)ACompareBtn, 0);
                PostMessage(this->Handle, WM_DELETE_FROM_SENDER, (int)ASelectedBtn, 0);
            }
        }
    }
}
 
//---------------------------------------------------------------------------
0
Модератор
 Аватар для D1973
9965 / 6499 / 2464
Регистрация: 21.01.2014
Сообщений: 27,511
Записей в блоге: 3
22.07.2016, 17:01
Вот так можно без цикла обойтись... Если выбраны правильные кнопки - они исчезают, если неправильные - на полсекунды шрифт на кнопках становится красным и больше ничего не происходит...
Единственно, для этого пришлось использовать не TButton, а TBitBtn
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define Bt ((TBitBtn *)Sender)
  static bool b = false;
  static TBitBtn *Btn;
  if(!b) Btn = Bt;
  else
   if(Btn->Name != Bt->Name && Btn->Caption == Bt->Caption)
    {
      Btn->Visible = false;
      Bt->Visible = false;
    }
   else
    {
      Btn->Font->Color = clRed;
      Bt->Font->Color = clRed;
      this->Update();
      Sleep(500);
      Btn->Font->Color = clWindowText;
      Bt->Font->Color = clWindowText;
   }
  b = !b;
}
Добавлено через 3 минуты
Ух ты не увидел решения от Maluda... Ну это жесть для школьного-то задания
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.07.2016, 17:22
D1973, легкая оптимизация твоего кода, так как bool здесь излишен
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TBitBtn *Bt = dynamic_cast<TBitBtn*>(Sender);
    if (Bt) {
        static TBitBtn *Btn = 0;
 
        if (!Btn) {
            Btn = Bt;
        }
        else {
            if (Btn != Bt && Btn->Caption == Bt->Caption) {
                Btn->Visible = false;
                Bt->Visible = false;
            }
            else {
                Btn->Font->Color = clRed;
                Bt->Font->Color = clRed;
                this->Update();
                Sleep(500);
                Btn->Font->Color = clWindowText;
                Bt->Font->Color = clWindowText;
            }
            Btn = 0;
        }
    }
П.С. При скрытии кнопок со статическим указателем еще соглашусь, при удалении кнопок всё же пробегался бы по циклу. Особенно, если у пользователя они будут размещены на dock панелях, так как при отстыковке-пристыковке адрес объекта может измениться.
1
22.07.2016, 18:19

Не по теме:

Цитата Сообщение от Maluda Посмотреть сообщение
если у пользователя они будут размещены на dock панелях
ой, сомневаюсь я...

0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
22.07.2016, 18:20
Местами проглядывается в последнем приведенном коде нарушение авторских прав
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2016, 18:20

Две кнопки для одной формы
Здравствуйте. Допустим у меня есть форма: &lt;form name=&quot;MyForm&quot; action=&quot;/wp-content/themes/lime/mail.php&quot;...

Как убрать с формы кнопки управления?
Подскажите как убрать с формы кнопки управления, я имею ввиду: закрыть, свернуть, развернуть?

Убрать кнопки с формы с графиком (.NET)
В матлабе создал dll с компонентом .NET, который строит график в отдельном окне, так же как и в самом матлабе по функции plot. ...

Фильтровать те данные, которые выбрал пользователь
У меня есть форма, которая посылает данные, проблема в одном в переменной str, там с помощью &amp; данные идут только по порядку, но...

Узнать какой клон выбрал пользователь
При создании сцены,создаю клоны,записываю их в массив объектов,который висит на главной камеры for (i = 0; i &lt; n; i++) { Boxs...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru