Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите найти ошибку


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо