Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
ВнизGroupBox и компоненты Найти похожие ветки
← →
cruiser © (2008-09-18 19:08) [0]Здравствуйте. Есть вопрос по сабжу.
На компоненте GroupBox есть несколько радиобатонов и чекбоксов. Как сделать что бы по нажатию например некой кнопки стали бы неактивными компоненты на GropBox? Сейчас ипользую функцию groupbox.enabled:=false, но это не то, т.к. компоненты не "затеняются", а просто к ним нет доступа. Надо бы именно "затенять". Спасибо.
← →
Правильный$Вася (2008-09-18 19:56) [1]пройтись в цикле по компонентам формы и посмотреть у них Parent=групбокс
при нужном - затенить
← →
{RASkov} © (2008-09-18 20:18) [2]> пройтись в цикле по компонентам формы и посмотреть у них
> Parent=групбокс
Да прямо по контролам этого гроупбокса и пройтись циклом....
← →
скгшыук (2008-09-18 20:18) [3]а как пройтись по компонентам всей формы? можно подробнее?
← →
cruiser © (2008-09-18 20:19) [4]сорри. как сделать это?
← →
Юрий Зотов © (2008-09-18 20:40) [5]> cruiser © (18.09.08 20:19) [4]
for i := 0 to GropBox.ControlCount - 1 do
GropBox.Controls[i].Enabled := False; // или True
← →
cruiser © (2008-09-18 20:55) [6]спасибо. попробую так.
← →
cruiser © (2008-09-21 21:42) [7]Здравствуйте! В продолжение темы. Ваш совет помог, но я столкнулся с проблемой. Так как у меня на групбоксах все компоненты это чекбоксы, то как мне сделать, что бы при групбокс enable:=false все чекбоксы находящиеся на этом групбоксе сбрасывали свои чеки в false? И возможно ли это сделать без утомительного перечисления в процедуре каждока чекбокса отдельно?
← →
{RASkov} © (2008-09-21 21:57) [8]> [7] cruiser © (21.09.08 21:42)
> все чекбоксы находящиеся на этом групбоксе сбрасывали свои
> чеки в false?
См [5] и немного подумай)
> И возможно ли это сделать без утомительного перечисления
> в процедуре каждока чекбокса отдельно?
Сам-то как думаешь? Не смешно теперь? :)
И чем же тебя так утомляет сиё деяние?)
А вот:
> как мне сделать, что бы при групбокс enable:=false
Это нужно перекрыть метод SetEnabled, т.е. новый контрол нужно породить от TGroupBox.... Это не сложно :)
← →
cruiser © (2008-09-21 22:28) [9]
> > [7] cruiser © (21.09.08 21:42)
> > все чекбоксы находящиеся на этом групбоксе сбрасывали
> свои
> > чеки в false?
>
> См [5] и немного подумай)
Думал и не раз :) Но ничего так и не смог сделать. Даже элементарно пытался по нажатию на кнопку на форме в групбоксе чекать чекбоксы - ничего не выходит. Не могу понять как до них добраться, кроме того что бы все перечислять отдельно (в программе в нескольких группбоксах по 20-30 чеков) . Даже в цикл for to никак не могу запихать чекбоксы что бы их зачекать .
← →
{RASkov} © (2008-09-21 22:31) [10]> [9] cruiser © (21.09.08 22:28)
Сейчас пример "накидаю" :)
← →
{RASkov} © (2008-09-21 23:09) [11]Вот примерно так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TGroupCheckBox = class(TGroupBox)
protected
procedure SetEnabled(Value: Boolean); override;
public
procedure SetEnabledChecks(const Val: Boolean);
end;
TForm1 = class(TForm)
CheckBox1: TCheckBox;
procedure CheckBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Gcb: TGroupCheckBox;
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ TCheckBox }
procedure TGroupCheckBox.SetEnabledChecks(const Val: Boolean);
var N: Integer;
begin
for N:=0 to ControlCount-1 do
if Controls[N] is TCheckBox then TCheckBox(Controls[N]).Enabled:=Val;
end;
procedure TGroupCheckBox.SetEnabled(Value: Boolean);
var N: Integer;
begin
inherited;
SetEnabledChecks(Value);
if not Value then begin
for N:=0 to ControlCount-1 do
if Controls[N] is TCheckBox then begin
Controls[N].Tag:=ORD(TCheckBox(Controls[N]).Checked);
TCheckBox(Controls[N]).Checked:=False;
end;
end else
for N:=0 to ControlCount-1 do
if Controls[N] is TCheckBox then
TCheckBox(Controls[N]).Checked:=Boolean(Controls[N].Tag);
end;
//---------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
Gcb:=TGroupCheckBox.Create(Self);
CheckBox1.Checked:=True;
with Gcb do begin
Parent:=Self;
Left:=50;
Top:=50;
Width:=120;
Height:=170;
end;
for N:= 0 to 9 do
with TCheckBox.Create(Gcb) do begin
Parent:=Gcb;
Left:=10;
Top:=15*N+10;
Caption:="Check № "+IntToStr(N);
end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Gcb.Enabled:=CheckBox1.Checked;
end;
end.
← →
{RASkov} © (2008-09-21 23:13) [12]Может TCheckListBox лучше подойдет вместо "извращения" выше? :)
← →
cruiser © (2008-09-21 23:18) [13]Спасибо огромное! На счет CheckListBox - уже рассматривал этот компонент, но не подходит по соображениям вида интерфейса программы. Спасибо еще раз большое!!!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c