Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.037 c
3-1107796391
MakedoneZ
2005-02-07 20:13
2005.03.06
TDBGrid и Table


14-1108480019
Luzer
2005-02-15 18:06
2005.03.06
Как сделать локалку из модемного соединения?


1-1109074067
syscoder
2005-02-22 15:07
2005.03.06
Компонент TStringGrid


6-1104150481
Oleggar
2004-12-27 15:28
2005.03.06
передача данных


1-1107949114
Aleksandr.
2005-02-09 14:38
2005.03.06
Как правильно массив байт привести к integer?





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