Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

Помогите найти ошибку   Найти похожие ветки 

 
Romm ©   (2007-04-14 09:37) [0]


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). Окно с легкостью закрывает и прога работает нормально... ничего не понимаю.. :)


 
ЮЮ ©   (2007-04-14 09:41) [1]

for count:=0 to OptionForm.ComponentCount - 1


 
MBo ©   (2007-04-14 09:42) [2]

for count:=0 to OptionForm.ComponentCount - 1


 
ЮЮ ©   (2007-04-14 09:43) [3]

Когда на форме появится 13-й TCheckBox ошибка будет страшнее :)


 
Romm ©   (2007-04-14 09:48) [4]


> ЮЮ ©   (14.04.07 09:41) [1]


> MBo ©   (14.04.07 09:42) [2]

Оо... спасибо!!!!! Прям как в Анекдоте:
Программист с женой отправились в супермаркет. Сделав все необходимые закупки, они вышли на улицу, и жена сказала:
- Стой здесь и смотри в оба за этими десятью сумками, пока я схожу и разыщу такси.
Когда жена вернулась, то увидела обалдевшего мужа, переставляющего сумки с места на место. Программист:
- Ты сказала, что здесь десять сумок, а я насчитал только 9!
Жена:
- Hо их было десять!
Программист:
- Hет, давай вместе считать: 0, 1, 2, 3...


 
Romm ©   (2007-04-14 12:03) [5]

опс, снова АшиПка...
написал процеДУРУ:

 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;


в чем дело обьясните пожалуйста!


 
ЮЮ ©   (2007-04-14 12:17) [6]

ошибка..:(Обычно она себя идентифицирует значительно шире :)


> написал процеДУРУ:

Во-первых, это метод.
Во-вторых, это метод экземпляра класса 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:20) [7]

гы.. у меня сегодня вопросы не кончатся :))
как связать 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;


 
Romm ©   (2007-04-14 12:25) [8]


> Во-первых, это метод....
> и вызываться соответственно...

вот за ЭТО спасибо ОГРОМНОЕ, а вот за это:
> // надеюсьOptionForm уже создан
>  // хотя вряд ли. Перенеси этот вызов в TMainForm.FormShow
>  
... Я тупой конечно, но не настолько :)))


 
ЮЮ ©   (2007-04-14 12:26) [9]

;{пытаюсь изменить св-во Button1, если кликнули на CheckBox1}

Оно и изменится, если, конечно в CheckBox1.tag стоит не 1, а указательна на Button1, установленные в RunTime. Если же стоит 1, то  Button1 надо сначала найти


 
Romm ©   (2007-04-14 12:30) [10]

Tag я у всех CheckBox"ов проставил с 1 по 12 для определения номера компонента.. Обьясни пожалуста как найти кнопу


 
ЮЮ ©   (2007-04-14 12:31) [11]


> ... Я тупой конечно, но не настолько :)))

Обсуждаемую величину на расстоянии не разглядеть, но:

Если MainForm - главная форма, а OptionForm - плдчиненная и не DataModule, то MainForm создается раньше OptionForm и с моменту выполнения TMainForm.FormCreate OptionForm просто обязан быть nil :)


 
ЮЮ ©   (2007-04-14 12:37) [12]

procedure TOptionForm.CheckBox1Click(Sender: TObject
var
 cb: TChechBox;
 bt: TButton;
begin
 if (Sender = nil) or not (Sender is TCheckBox) then exit;
 cb := TCheckBox(Sender);
 bt := FindComponent("Button" + IntToStr(cb.Tag));
 if (cb = nil)  then exit;
 bt.Enabled := cb.Checked;
 SocketActive[cbTag] := cb.Checked;
end;


 
ЮЮ ©   (2007-04-14 12:39) [13]

bt := TButton(FindComponent("Button" + IntToStr(cb.Tag)));


 
Romm ©   (2007-04-14 12:40) [14]


> ЮЮ ©   (14.04.07 12:31) [11]


дык это ясно. я торопился и "всунул" не туда. И в таком виде.. короч - это все работает. Кроме кнопок и чекбоксов :))


 
Romm ©   (2007-04-14 12:42) [15]

ЮЮ ©   (14.04.07 12:37) [12]
ЮЮ ©   (14.04.07 12:39) [13]

Благодаря Вам я сегодня СТОЛЬКО всего узнал, пасиб...


 
ЮЮ ©   (2007-04-14 12:43) [16]

SocketActive[cbTag].Active := cb.Checked;

Жаже не знаю, исправлять ли свои ошибки. Вдруг и это обидит :)


 
Romm ©   (2007-04-14 12:48) [17]


> Вдруг и это обидит

:)) ты еще точку забыл cb.Tag :))


 
Romm ©   (2007-04-14 13:24) [18]

И вот еще что.. :)
У TComboBox есть свойство, похожее на Tag, но для каждого итема.
Например если выбрать n-й итем, то Socket[n].adress:=Ip_adress[n];


 
Romm ©   (2007-04-14 13:24) [19]

???


 
Romm ©   (2007-04-14 13:42) [20]

Есть такое св-во или нет?! Если нет, то как можно по итему найти нужный адрес??


 
{RASkov}   (2007-04-14 13:48) [21]

> Есть такое св-во или нет?!

ItemIndex? Item.Object?


 
Romm ©   (2007-04-14 14:12) [22]


> ItemIndex?

несколько не то..

> Item.Object?

щас посмотрю..


 
Romm ©   (2007-04-14 14:17) [23]

Такс, а можно число присвоить обьекту? :)


 
{RASkov}   (2007-04-14 16:15) [24]

> [23] Romm ©   (14.04.07 14:17)

Можно
N:=555;
Object[i]:=TObject(N);
Вернуть
Integer(Object[i]);
Что-то в этом духе....


 
Romm ©   (2007-04-14 16:26) [25]


> {RASkov}   (14.04.07 16:15) [24]

ок


 
Romm ©   (2007-04-14 16:53) [26]

Что-то я растерялся совсем и забыл как из строки str удалить 3 первых символа... Напомните, люди добрые :)


 
Romm ©   (2007-04-14 17:02) [27]

Оп, придумал:

Edit1.Text:=Copy(Mes,2,Length(Mes)-1);

правильно написал?А то я сегодня столько ачепяток делаю.. :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.041 c
2-1176795034
Angelka
2007-04-17 11:30
2007.05.06
Работа с Timer


2-1176815726
ppcumax
2007-04-17 17:15
2007.05.06
Как удалить первую строку из Memo?


15-1176086186
Slider007
2007-04-09 06:36
2007.05.06
С днем рождения ! 7 апреля


15-1175495841
xayam
2007-04-02 10:37
2007.05.06
Построение дерева исходного кода


15-1176183399
Megabyte
2007-04-10 09:36
2007.05.06
Нынешнее состояние "начинающим"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский