![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите найти ошибку
Romm © (2007-04-14 09:37:00)
var
OptionForm: TOptionForm;
ArCheckBox: array[1..12] of TCheckBox;
procedure TOptionForm.FormCreate(Sender: TObject);
var
num,count:Byte;
begin
num:=0;
for count:=0 to OptionForm.ComponentCount do
begin
if (Components[count] is TCheckBox) then
begin
inc(num);
ArCheckBox[num]:=TCheckBox(Components[count]);
end;
end;
end;
проект компилируется, но при запуске проги вылетает окно с сообщением о ошибке: List index out of bounds (30). Окно с легкостью закрывает и прога работает нормально... ничего не понимаю.. :)
Romm (2007-04-14 12:20:00) [21]гы.. у меня сегодня вопросы не кончатся :))
как связать 2 компонента, например CheckBox и Button.
А если точнее, как изменить свойство любой n-кнопы если выбран n-CheckBox??
пробовал так:
procedure TOptionForm.CheckBox1Click(Sender: TObject);//процедура для 12-ти CheckBox'ов
begin
if TCheckBox(Sender).Checked then
begin
TButton(TCheckBox(Sender).Tag).Enabled:=true;{пытаюсь изменить св-во Button1, если кликнули на CheckBox1}
SocketActive[TCheckBox(Sender).Tag]:=true;
end
else
begin
TButton(TCheckBox(Sender).Tag).Enabled:=false;
SocketActive[TCheckBox(Sender).Tag]:=false;
end;
end;
ЮЮ (2007-04-14 12:17:00) [22]ошибка..:(Обычно она себя идентифицирует значительно шире :)
> написал процеДУРУ:
Во-первых, это метод.
Во-вторых, это метод экземпляра класса TOptionForm, в котором используются "левые" глобальные переменные MainForm и OptionForm
В соответствии с выше сказанным, метод класса TOptionForm должен выглядеть примерно так:
procedure TOptionForm.LoadList( ComboBox: TComboBox);
var
F:TIniFile;
i:Byte;
begin
ComboBox.Clear;
F:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'option.ini');
for i:=1 to 12 do
if SocketActive[i] then
begin
ComboBox.Items.Add(F.ReadString(IntToStr(i),'name','Computer #'+IntToStr(i)));
end;
F.Free;
end;
и вызываться соответственно
procedure TMainForm.FormCreate(Sender: TObject);
begin
OptionForm.LoadList(ComboBox1); // надеюсьOptionForm уже создан
// хотя вряд ли. Перенеси этот вызов в TMainForm.FormShow
end;
Romm (2007-04-14 12:03:00) [23]опс, снова АшиПка...
написал процеДУРУ:
public
{ Public declarations }
SocketActive : array[1..12] of Boolean;
procedure LoadList;
procedure TOptionForm.LoadList;
var
F:TIniFile;
i:Byte;
begin
MainForm.ComboBox1.Clear;
F:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'option.ini');
for i:=1 to 12 do
if OptionForm.SocketActive[i] then
begin
MainForm.ComboBox1.Items.Add(F.ReadString(IntToStr(i),'name','Computer #'+IntToStr(i)));
end;
F.Free;
end;
в если вызывать ее из данной формы - все Ок. Пытаюсь вызвать из главной формы - ошибка..:(
procedure TMainForm.FormCreate(Sender: TObject);
begin
OptionForm.LoadList;
end;
в чем дело обьясните пожалуйста!
Romm (2007-04-14 09:48:00) [24]
> ЮЮ © (14.04.07 09:41) [1]
> MBo © (14.04.07 09:42) [2]
Оо... спасибо!!!!! Прям как в Анекдоте:
Программист с женой отправились в супермаркет. Сделав все необходимые закупки, они вышли на улицу, и жена сказала:
- Стой здесь и смотри в оба за этими десятью сумками, пока я схожу и разыщу такси.
Когда жена вернулась, то увидела обалдевшего мужа, переставляющего сумки с места на место. Программист:
- Ты сказала, что здесь десять сумок, а я насчитал только 9!
Жена:
- Hо их было десять!
Программист:
- Hет, давай вместе считать: 0, 1, 2, 3...
ЮЮ (2007-04-14 09:43:00) [25]Когда на форме появится 13-й TCheckBox ошибка будет страшнее :)
MBo (2007-04-14 09:42:00) [26]for count:=0 to OptionForm.ComponentCount - 1
ЮЮ (2007-04-14 09:41:00) [27]for count:=0 to OptionForm.ComponentCount - 1