Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1222435595
workbench
2008-09-26 17:26
2008.11.02
Uninstall


2-1221750527
cruiser
2008-09-18 19:08
2008.11.02
GroupBox и компоненты


2-1222322940
Vitaliy_____
2008-09-25 10:09
2008.11.02
Сохранение массива в файл


15-1220713385
deadteachers
2008-09-06 19:03
2008.11.02
Хочу принять участие!


1-1201073162
Unknown user
2008-01-23 10:26
2008.11.02
Control has not parent window





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский