Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2008, 21:51   #1
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию Проверка (True or False for CheckBox)

Народ, как программно решить следующую задачу: Имеется 2 чекбокса. В случае если свойство одного из чекбоксов - Checked становиться равным True, то при повторном нажатии оставить прежнее состояние (то есть не выполнять Checked = False, (здесь же имееть ввиду то что при повторном нажатии не должны инициироваться никае действия выполняемые при Checked = True - они должны выполняться единожды при первоначальном назначении флага True)).
NeiL вне форума Ответить с цитированием
Старый 30.01.2008, 22:03   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если CheckBox используется только один раз, то можно так:
Код:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if  CheckBox1.Checked then
    begin
    edit1.text:='checked';
    CheckBox1.Enabled:=false;
    end;
end;
puporev вне форума Ответить с цитированием
Старый 30.01.2008, 22:06   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Не совсем понятен вопрос. Сначала говорите что у Вас 2 чекбокса, потом что-то об одном только заговорили. Конкретнее можно?
FaTaL вне форума Ответить с цитированием
Старый 30.01.2008, 22:21   #4
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию

Рассматривается такой вариант. Имеется несколько чекбоксов
Здесь чекбоксы работаю как аналог радиобутонов (в плане перемещения).
Как реализовать нижеописанную возможность, в данном случае (То есть при перемещении в следующии чекбокс предыдущий сбросить в False, а для текущего сделать (код_1). То есть надо сделать:
Когда мы кликаем на чекбокс то его состояние переходит в cbChecked. При следующем клике на этом же чекбоксе если состояние уже равно cbChecked не иницировать никаких действий при этом оставив текущее состояние. Но в том случае если мы чекаем другой чекбокс то для него произвести аналогичные предыдущему действия при этом сбросив состояние предыдущего чекбокса в cbUnchecked


код Pascal/Delphi
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.C(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ControlCount - 1 do
if (Controls[i] is TCheckBox) and (Components[i] <> Sender) and
((Sender as TCheckBox).State = cbChecked) then
(Components[i] as TCheckBox).Checked := False;
end;

***********************КОД1******** **************
procedure TForm1.CheckBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if CheckBox1.Checked
then
begin
CheckBox1.Checked := true;
//тут код состояния Checked
end
else
CheckBox1.Checked := not CheckBox1.Checked;
end;
NeiL вне форума Ответить с цитированием
Старый 30.01.2008, 23:03   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Во первых радиогруппа это то что нужно и что обычно используется в этом случае, и ничего писать ненадо.
Но можно и с чекбоксами сделать. Создать переменную хранящую активный (выбранный) чекбокс. При клике на чекбоксе проверять или это не он, если он - ничего не делаем, если не он - выполняем нужный код и присваиваем этот чекбокс переменной.
Вот как я делал для пунктов меню (хотя там радиогруппу тоже вполне можно было организовать)
Код:
var LastChecked: TMenuItem;

procedure TForm1.N240x320Click(Sender: TObject);
begin
if not N240x320.Checked then
  begin
  N240x320.Checked:=true;
  LastChecked.Checked:=false;
  LastChecked:=N240x320;
  end;
  SetFrame(240,320);//код выполняется в любом случае, так нужно было
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 30.01.2008 в 23:07.
mutabor вне форума Ответить с цитированием
Старый 31.01.2008, 09:42   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Во первых радиогруппа это то что нужно и что обычно используется в этом случае, и ничего писать ненадо.
Цитата:
Сообщение от Yurk@
ЗЫ: А почему ты не хочешь вместо RadioButton использовать RadioGroup ???? Мне кажеться, так будет намного удобнее!
+1
Ставишь RadioGroup и не мучишь себе голову ....
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма остаётся видимой при Visible=False Viteef Общие вопросы Delphi 10 23.02.2015 08:07
CheckBox zzzzz Компоненты Delphi 6 22.07.2008 12:35
Form2.sSkinManager1.Action := false; beegl Компоненты Delphi 2 17.06.2008 17:05
UpdateData(false) в цикле? вывод числа в Edit box Иван36 Помощь студентам 5 31.03.2008 18:33
Panel1.Visible:=true s-force Компоненты Delphi 7 30.08.2007 02:22