Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Oneill
5 / 5 / 1
Регистрация: 30.11.2011
Сообщений: 238
Записей в блоге: 1

Работа с множеством кнопок

05.09.2012, 21:12. Показов 1587. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Решил доделать игрушку, камекадзе.
Может кто знает.
Тоесть дано поле, 5 клеток в ширину и 10 в высоту. Пользователь должен сделать ход, нажать на клетку, если в клетки нет мины то открывается следующий ряд... я ряды сделал из кнопок...
Тоесть когда пользователь прошел 1 ряд, 2 ряд включается (button.enabled:=true а первый отключается...
Так вот у меня какой вопрос... Для того чтобы провернуть эту операцию в каждую кнопку приходится вписывать примерно такой код
Delphi
1
2
3
4
5
6
7
8
9
if button1.caption=' ' then showmessage('FAIL!') else
                                        begin
                                            button1.enabled:=false;
                                            ...
                                            button5.enabled:=false;
                                            button6.enabled:=true;
                                            ...
                                            button10.enabled:=true;
                                         end;
Такая вот бред.. Но ладно что прописывать в каждую кнопку. так там еще и номера кнопок менять приходится... короче просто ппц сколько геммора, И ЭТО НЕ ПРАВЕЛЬНО С ТОЧКИ ЗРЕНИЯ кода... Пожалуйста помогите как "автоматизировать" сее действие!
P.S Мина это символ пробела в Капшене кнопки

Добавлено через 5 минут
Есть еще такой вариант... который конечно в 100500 раз лучше предыдущего. но всеравно не то...
Delphi
1
2
3
4
5
6
7
if Button1.Caption=' 1' then ShowMessage('FAIL!') else;
 begin
    for i:=1 to 5 do
    TButton(FindComponent('button'+inttostr(i))).Enabled:=False;
    for i:=6 to 10 do
    TButton(FindComponent('button'+inttostr(i))).Enabled:=true;
 end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2012, 21:12
Ответы с готовыми решениями:

Работа с множеством
Составить множество, состоящее из английских букв, входящих в текст. Распечатать его в том порядке, в котором буквы встречаются в тексте.

Построить биекцию между множеством N и множеством чётных чисел
Друзья, нужна помощь в построении биекции, как это сделать? :scratch:

Работа с множеством изображений
Здравствуйте лучшие программисты! Начал писать калькулятор для шкафов, столкнулся с двумя проблемами (ответы в поисковиках искал месяц):...

14
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
05.09.2012, 21:58
Ты кнопки сразу ставишь на форму или создаёшь динамически? Скорее всего сразу. Такой массив кнопок лучше создавать динамически. Тем более, что они рядами стоят. Прям матрицей.
Но если сразу, тогда можно в свойство Tag каждой кнопки прописать номер её ряда. И тогда можно сделать одно событие Click на все кнопки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Procedure Button1Click(Sender: TObject);
Begin
  If (Sender as TButton).Caption = ' 1' Then ShowMessage('FAIL!') else;
  begin
    n:=(Sender as TButton).Tag;
 
    for i:=0 to ComponenCount-1 do
    If Component[i] is TButton Then
    With Component[i] as TButton Do
    If Tag = n Then Enabled:=False Else 
    If Tag = (n+1) Then Enabled:=True;
  end;
End;
Событие OnClick всех кнопок указываешь на этот код. И всё.
2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33393 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,900
Записей в блоге: 12
05.09.2012, 22:21
Oneill, делаешь свой метод EnableRow:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
  private
    { Private declarations }
    procedure EnableRow(ARow : Integer; Value : Boolean = True);
  // ...
 
procedure TForm1.EnableRow(ARow : Integer; Value : Boolean);
var i : Integer;
begin
  for i := 1 to SizeY do
    (FindComponent(Format('Button%d', [Pred(ARow) * SizeY + i])) as TButton).Enabled := Value;
 
end;
, и одним движением весь ряд Enable-ишь/Disable-ишь:

Delphi
1
2
3
4
5
6
  // Разрешаем второй ряд
  EnableRow(2);
 
  // А так - гасим второй, включаем первый:
  EnableRow(2, False);
  EnableRow(1);
, ну, идея понятна, надеюсь. SizeY - количество кнопок в одном ряду, если что...
1
 Аватар для Oneill
5 / 5 / 1
Регистрация: 30.11.2011
Сообщений: 238
Записей в блоге: 1
06.09.2012, 18:01  [ТС]
а n это какой тип переменой?
0
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
06.09.2012, 18:03
Oneill, integer
1
 Аватар для Oneill
5 / 5 / 1
Регистрация: 30.11.2011
Сообщений: 238
Записей в блоге: 1
06.09.2012, 18:04  [ТС]
окей, я попробовал интеджер, но компилятор ругается на эту строку

Delphi
1
  for i:=0 to ComponenCount-1 do
типа
Кликните здесь для просмотра всего текста
[DCC Error] Unit1.pas(92): E2003 Undeclared identifier: 'ComponenCount'
[DCC Error] Unit1.pas(93): E2003 Undeclared identifier: 'Component'
[DCC Error] Unit1.pas(93): E2015 Operator not applicable to this operand type
[DCC Error] Unit1.pas(94): E2015 Operator not applicable to this operand type
[DCC Warning] Unit1.pas(104): W1019 For loop control variable must be simple local variable
[DCC Warning] Unit1.pas(112): W1019 For loop control variable must be simple local variable
[DCC Fatal Error] Project2.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
06.09.2012, 18:05
А ComponenCount у тебя какого типа?
0
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
06.09.2012, 18:06
Delphi
1
for i:=0 to ComponenTCount-1 do
люди совсем обленились.. дали ГОТОВЫЙ код. а им уже очепятку сложно исправить.
вчитывайся хотя бы в код.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.09.2012, 18:07
Да и переменную i нужно описать как Integer.
Delphi
1
2
Var
  n,i : Integer;
0
 Аватар для Oneill
5 / 5 / 1
Регистрация: 30.11.2011
Сообщений: 238
Записей в блоге: 1
06.09.2012, 18:09  [ТС]
ВА-ХА-ХА блин, ну ты Петросян конечно! уважение (+1)
Тебе не лень было писать несколько слов за место 1?

Добавлено через 25 секунд
ОДИНОЧКА
Спасиб)
Но всеравно ошибка. =(

Добавлено через 1 минуту
ComponentCount красным подчеркнут.
0
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
06.09.2012, 18:10
Цитата Сообщение от Oneill Посмотреть сообщение
Но всеравно ошибка.
удали delphi
1
 Аватар для Oneill
5 / 5 / 1
Регистрация: 30.11.2011
Сообщений: 238
Записей в блоге: 1
06.09.2012, 18:10  [ТС]
Сорри) Просто натура берет свое))))) СПАСИБО ОГРОМНОЕ ВСЕМ)
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
06.09.2012, 18:11
ComponenCount или ComponentCount, как больше нравится опиши и присвой ему что-нить.
0
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
06.09.2012, 18:12
Цитата Сообщение от Nutserus Посмотреть сообщение
ComponenCount или ComponentCount, как больше нравится опиши и присвой ему что-нить.
лолшто? с TComponent.ComponentCount ознакомься.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.09.2012, 18:12
Блин, я совсем напартачил:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Procedure TForm1.Button1Click(Sender: TObject);
Var
 i,n : Integer;
Begin
  If (Sender as TButton).Caption = ' 1' Then ShowMessage('FAIL!') else;
  begin
    n:=(Sender as TButton).Tag;
 
    for i:=0 to ComponentCount-1 do
    If Component[i] is TButton Then
    With Component[i] as TButton Do
    If Tag = n Then Enabled:=False Else 
    If Tag = (n+1) Then Enabled:=True;
  end;
End;
Смотри первую строку - это событие кнопки. Там же есть у тебя TForm1 ?
Или покажи свой код этой процедуры.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2012, 18:12
Помогаю со студенческими работами здесь

Работа с множеством точек
Здравствуйте, уважаемые пользователи мат.пакета Maple. Появилась необходимость обратиться к Вам за помощью. У меня есть некоторое...

Работа с множеством (HashSet и т.д.)
Предположим есть класс Person public class Person { public string firtsName; public string lastName; } Необходимо...

Работа со множеством IP-адресов на одном сервере
Прошу помочь разобраться в следующих вопросах: Если я арендую дедик или VDS, мне провайдер выделяет несколько IP адресов (можно сколько...

Работа с множеством set из элементов string
Помогите пожалуйста, не могу понять как работать со значениями string в set. Создать множество set из количества студентов вашей группы....

Работа с множеством экземпляров класса "Дни недели"
Создать класс «Дни недели». Этот класс является ключом(key) в LinkedHashSet Значением (value) является Integer При заполнении...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru