Форум: "Начинающим";
Текущий архив: 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.042 c