Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как отключить все Checkbox'ы на форме?

Ответить
Настройки темы
Delphi - Как отключить все Checkbox'ы на форме?

Пользователь


Сообщения: 132
Благодарности: 8

Профиль | Отправить PM | Цитировать


У меня на форме стоит около 800 Chekbox'ов - вопрос,как можно отключить их по нажатию одной кнопки?
Сперва пошел обычным путем,каждый чекбокс писал отдельно и уже через 20 чекбоксов мне это начало надоедать.Подкините мне функцию для снятия и для включения этих чекбоксов ?! А то 800 строчек да и еще писать одно и тоже,это уже перебор

-------
If Begin then End; else End.


Отправлено: 00:09, 06-06-2009

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата R.M.L:
А то 800 строчек да и еще писать одно и тоже,это уже перебор »
...а 800 чекбоксов не перебор?
Мне на ум приходит только вариант,если идентификаторы ваших чекбоксов прописать таким образом,чтобы все их можно было перебрать простым инкрементом в цикле.Тогда в цикле можно вызывать GetDlgItem и SendMessage с параметрами BM_SETCHECK, BST_UNCHECKED,и после делать инкремент идентификатора,тем самым переходя на следующий контрол.

ADD.
Сейчас подумал,что можно поиграться с функцией FindWindowEx,и возможно это даст результат(неуверен,ибо сам не пробовал).
Второй параметр функции - hwndChildAfter: Handle to a child window. The search begins with the next child window in the Z order.
Это значит,что можно сперва вне цикла получить описатель первого чекбокса,сделать с ним всё,что нужно,а потом войти в цикл и начать вызывать ту же FindWindowEx,передавая ей в качестве второго параметра возращённый ею же результат.Каждый раз.
Однако повторю,что это не проверено мною на практике,поэтому может быть ошибочным.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Последний раз редактировалось DillerInc, 06-06-2009 в 14:23.


Отправлено: 13:16, 06-06-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 132
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата DillerInc:
если идентификаторы ваших чекбоксов прописать таким образом,чтобы все их можно было перебрать простым инкрементом в цикле.Тогда в цикле можно вызывать GetDlgItem и SendMessage с параметрами BM_SETCHECK, BST_UNCHECKED,и после делать инкремент идентификатора,тем самым переходя на следующий контрол. »
таким же успехом можно подумать и о тегах <TAG>. А как вы в цикле тогда обозначите типы идентификаторов?

Я думаю здесь все дело в массивах - просто тип массива выдает ошибку
я сегодня пробовал так

finctuion UncheckedAll (Unchecked:Tcheckbox):tcheckbox;
var
Unchecked:Array of Array [1..800] of TCheckbox;


дальше не мыслью как ...

-------
If Begin then End; else End.


Отправлено: 16:22, 06-06-2009 | #3


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar Test.rar
(1.6 Kb, 17 просмотров)

R.M.L, Дельфя затуманила ваш разум.Бросайте её как можно скорее.Серьёзно.

Моя догадка насчёт функции FindWindowEx похоже оказалась верной.Прилагаю свой исходник на ассемблере и скомпилированный файл.Изучайте.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 22:26, 06-06-2009 | #4


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата DillerInc:
Дельфя затуманила ваш разум. »
Ну зачем так сразу критично...
Мне она нравится, но о вкусах не спорят... Я конечно понимаю, что асм как библия для программирования, но пока для меня это как высшая математика...
Цитата R.M.L:
У меня на форме стоит около 800 Chekbox'ов - вопрос,как можно отключить их по нажатию одной кнопки? »
Очень просто...
Пример снятия отметки с чекбоксов...
Код: Выделить весь код
unit Unit1;

interface

uses
  Classes,
  Controls,
  Forms,
  StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    chk1: TCheckBox;
    chk2: TCheckBox;
    chk3: TCheckBox;
    chk4: TCheckBox;
    chk5: TCheckBox;
    chk6: TCheckBox;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  i: integer;
begin
  // Перебираем чекбоксы на форме
  for i:= 1 to ComponentCount - 1 do
     if (Components[i] is TCheckBox) and (Components[i] as TCheckBox).Checked then
  (Components[i] as TCheckBox).Checked:= False;
end;

end.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:43, 07-06-2009 | #5


Пользователь


Сообщения: 132
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата DillerInc:
Дельфя затуманила ваш разум.Бросайте её как можно скорее.Серьёзно. »
Да ну )) вы думаете у Ассемблеристов никогда не возникает подобных головоломок?!
Я из вашего кода понял только вызов библиотек и переменные на чекбоксы.Остальное как ежик в тумане )


Цитата Serega:
Очень просто...
Пример снятия отметки с чекбоксов... »
СПАСИБО БОЛЬШОЕ +10
Я не программист и работаю совсем в иной сфере,вот и время от времени у меня возникают такие вопросы на которых у меня нет хоть 30 процентного ответа.Честно скажу,такой метод я бы никогда не узнал если не ваш исходник.Мой друган с первого звонка че та намикал про циклы While Repeat то я искал выход через массив обектов.Ок спасибо , отальное доделаю сам - на первом чекб. галочка осталась.

-------
If Begin then End; else End.


Отправлено: 07:19, 07-06-2009 | #6


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата R.M.L:
на первом чекб. галочка осталась. »
надо исправить с i:=1 на i:=0

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 07:38, 07-06-2009 | #7


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата R.M.L:
Да ну )) вы думаете у Ассемблеристов никогда не возникает подобных головоломок?! »
...язык тут не при чём.Здесь главное понимать основные принципы.Хотя бы то,что есть только три основных типа данных: байт,слово и двойное слово.
Цитата R.M.L:
Я из вашего кода понял только вызов библиотек и переменные на чекбоксы. »
...мой код построен на вызове WinAPI-функции FindWindowEx,которая перебирает дочерние окна родителя.И далее идёт обработка результатов этой функции.Всё очень просто.
Цитата R.M.L:
Я не программист и работаю совсем в иной сфере »
...я тоже

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 11:58, 07-06-2009 | #8


Пользователь


Сообщения: 132
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата DillerInc:
...я тоже »
это уже слишком ))

Цитата Serega:
надо исправить с i:=1 на i:=0 »
даа я так и сделал спасибо вам ( вы у меня уже в списке скорой помощи,если еще возникнут у меня вопросы то я от вас не отстану )) учтите

-------
If Begin then End; else End.


Отправлено: 21:44, 07-06-2009 | #9


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата R.M.L:
если еще возникнут у меня вопросы то я от вас не отстану )) учтите »
не напугаете...
Цитата R.M.L:
Я не программист и работаю совсем в иной сфере »
Цитата DillerInc:
...я тоже »
ну и я... по образованию инженер-механик и работаю в строительной конторе по профессии...

mozgabyte,
вы создайте, свою тему, больше шансов получить помощь...

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 00:59, 08-06-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как отключить все Checkbox'ы на форме?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
как проверить, выбран ли System.Windows.Forms.CheckBox или нет? alexey_a AutoIt 2 13-11-2009 12:39
[решено] Как узнать изменено ли значение checkbox malev AutoIt 5 21-10-2009 13:40
Delphi - Как создать кнопку на форме VovanZ Программирование и базы данных 4 23-05-2009 17:42
[решено] Как проверить Checkbox, как в Input писать только определенные символы leprecon AutoIt 4 21-05-2009 23:02
Delphi - [решено] Delphi | Как сделать, чтобы в дочерней форме... Madmech Программирование и базы данных 8 30-09-2006 18:56




 
Переход