Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизОбращение к объектам, расположенным на MDIChild из MdiMain Найти похожие ветки
← →
Cosinus © (2005-02-18 15:12) [0]Есть главная модальная форма, из которой в рантайм создаются 4 MdiChild окна, с тремя TChart на каждом. Формы создаются, как экземпляры созданной в дезайнтайм формы
type
TStatus_fm = class(TForm)
TempChart: TChart;
Temp: TLineSeries;
VoltChart: TChart;
LineSeries1: TLineSeries;
AmpChart: TChart;
LineSeries2: TLineSeries;
end;
Что то никак я не пойму, как получить доступ к этим TСhart?
← →
Семен Сорокин © (2005-02-18 15:16) [1]
for _i := 0 to MDIChildCount-1 do
if MDIChildren[_i] is TStatus_fm then
TStatus_fm(MDIChildren[_i]).VoltChart....
← →
Cosinus © (2005-02-18 15:23) [2]
> Семен Сорокин © (18.02.05 15:16) [1]
Я думал так сделать. Но неужели только перебором? Я же знаю имя созданной в рантайм формы("Status"+(index=set[1,2,3,4])). Знаю (или нет?) имена всех TChart. Имена остаются такие же, как я их задал в дизайнтайм? Неужели оперируя этими данными нельзя сделать прямое обращение?
← →
Семен Сорокин © (2005-02-18 16:04) [3]
> Я думал так сделать. Но неужели только перебором?
А что Вас смущает?, даже если этих форм 1000 (в чём я сомневаюсь) - это будет длиться миллисекунды.
> Я же знаю имя созданной в рантайм формы("Status"+(index=set[1,2,3,4])).
А что Вам стоит написать нечто такой ф-ии:
GetFormByName("Status1") ?
> Знаю (или нет?) имена всех TChart. Имена остаются такие
> же, как я их задал в дизайнтайм?
да
> Неужели оперируя этими данными нельзя сделать прямое обращение?
можно, если Вы сохраните ссылку на форму в отдельной переменной, ибо та же ф-я FindComponent (FindControl) использует банальный перебор.
← →
Cosinus © (2005-02-18 16:07) [4]Ага, ясно.
Спасибо.
← →
Cosinus © (2005-02-18 16:43) [5]
> Семен Сорокин © (18.02.05 16:04) [3]
Хм... Может я туплю? Access violation на последнем End;procedure TMain_fm.SetData(Str:string);
var
aData:aStr;
Param:aParam;
i,j:word;
begin
aData:=StrParse(Str);
if aData[5]="250" then
begin
Param:=DataParse(aData[6]);
for i:=0 to MDIChildCount-1 do
if MDIChildren[i].Tag=StrToInt(aData[1]) then
with TStatus_fm(MDIChildren[i]) do
for j:=0 to ComponentCount-1 do
if Components[j] is TChart then
begin
if Param[1]<>"" then VoltChart.Series[0].AddXY(VoltChart.Series[0].Count,StrToInt(param[1]));
if Param[2]<>"" then AmpChart.Series[0].AddXY(AmpChart.Series[0].Count,StrToInt(param[2]));
if Param[3]<>"" then TempChart.Series[0].AddXY(TempChart.Series[0].Count,StrToInt(param[3]));
end;
end;
end;
← →
Семен Сорокин © (2005-02-18 16:50) [6]>if MDIChildren[i].Tag=StrToInt(aData[1]) then
я бы все же добавил проверку на тип формы
не вижу смысла в этом цикле:
for j:=0 to ComponentCount-1 do
if Components[j] is TChart then
Вы же все равно явно используете имена: VoltChart, AmpChart...
и к тому же получается что тело
begin
if Param[1]<>"" then VoltChart.Series[0].AddXY(VoltChart.Series[0].Count,StrToInt(param[1]));
if Param[2]<>"" then AmpChart.Series[0].AddXY(AmpChart.Series[0].Count,StrToInt(param[2]));
if Param[3]<>"" then TempChart.Series[0].AddXY(TempChart.Series[0].Count,StrToInt(param[3]));
end;
выполнится 3 (если чартов 3) раза.
>StrToInt(aData[1])
StrToIntDef
>...Series[0].
точно есть Series у каждого чарта?
← →
Cosinus © (2005-02-18 16:59) [7]
> Семен Сорокин © (18.02.05 16:50) [6]
Цикл остался от предыдущего варианта, просто не убрал пока...
Сейчас убрал и проверил на наличие Series. Есть. Все данные правильные, трассировал всю процедуру пошагово, AV вылетает на последнем, завершающем процедуру, End.
← →
Семен Сорокин © (2005-02-18 17:04) [8]CallStack чего показывает?
есть ли события на Series"ы по добавлению элементов или у самих чартов?
← →
Cosinus © (2005-02-18 17:05) [9]Со
StrToIntDef
не вылетает. Ясно, значит что то просто не так с данными(хотя проверял же при трассировке?!). Видимо под вечер пятницы в предверие карпоративной вечеринки в честь пятилетия конторы уже совсем не думается:)))
Спасибо огромное за помощь, видимо буду завтра разбираться.
← →
QuasiLamo © (2005-02-18 17:31) [10]если
var f1,f2,f3,f4:TStatus_fm;
иf1:=TStatus_FM.Create;
то наверно так
f1.VoltChart.(далее по интуиции)
Или возможно их удобнее будет в дин. массиве хранить...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c