|
|
  |
можно ли обращаться к компонентам в среде BorlandC в цикле? |
|
|
|
Apr 18 2008, 18:54
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
суть проблемы. есть 4ре компонента размещённые на форме, к примеру Panel1, Panel2, Panel3, Panel4. и есть массив который выводится на эти панели к примеру int temp[4]; можно ли написать следующий код в цикле Код Panel1->Caption = IntToStr(temp[0]); Panel2->Caption = IntToStr(temp[1]); Panel3->Caption = IntToStr(temp[2]); Panel4->Caption = IntToStr(temp[3]); среда разработки BorlandC++ 6.0 в WinXp
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 18 2008, 21:01
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Цитата(Mozart @ Apr 18 2008, 22:54)  суть проблемы. есть 4ре компонента размещённые на форме, к примеру Panel1, Panel2, Panel3, Panel4. и есть массив который выводится на эти панели к примеру int temp[4]; можно ли написать следующий код в цикле Код Panel1->Caption = IntToStr(temp[0]); Panel2->Caption = IntToStr(temp[1]); Panel3->Caption = IntToStr(temp[2]); Panel4->Caption = IntToStr(temp[3]); среда разработки BorlandC++ 6.0 в WinXp В принципе, если переменные Panel1..Panel4 описаны в классе одна за другой, можно так: Код TPanel **panels = &this->Panel1;
for (int i = 0; i < 4; i++) { panels[i]->Caption = IntToStr(i) + " панель"; } Но лично я, для успокоения души создавал еще один массив, в который копировал нужные элементы, и работал уже с этим массивом.
|
|
|
|
|
Apr 18 2008, 21:18
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(zltigo @ Apr 19 2008, 00:25)  Moderator Вы хоть чуть-чуть дайте себе труд узнать где находится BCC и где программирование DSP, прежде, чем писать. Тему перенес. простите не заметил  ... сделаю всё возможное чтобы это не повторилось... Цитата Но лично я, для успокоения души создавал еще один массив, в который копировал нужные элементы, и работал уже с этим массивом. у меня тоже потом появилась такая мысль... а другой способ есть?? может быть это как-то можно сделать стандратами языка??
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 18 2008, 21:46
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Цитата(Mozart @ Apr 19 2008, 01:18)  у меня тоже потом появилась такая мысль... а другой способ есть?? может быть это как-то можно сделать стандратами языка?? Ну я же и говорю... Допустим, у нас форма описана как: Код class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TPanel *Panel2; TPanel *Panel3; TPanel *Panel4; private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; Тогда (в методе класса TForm1) (&this->Panel1)[0] это this->Panel1, (&this->Panel1)[1] это this->Panel2, и т.д. Повторюсь, это все верно только если Panel1..Panel4 описаны в классе последовательно. Если нет, то помочь может пожалуй только создание дополнительно массива. Описать это все массивом как поле класса мне не представляется возможным, там не случайно вставлена строчка "IDE-managed Components"
|
|
|
|
|
Apr 18 2008, 22:29
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Aesthete Animus @ Apr 19 2008, 01:46)  Ну я же и говорю... Допустим, у нас форма описана как: Код class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TPanel *Panel2; TPanel *Panel3; TPanel *Panel4; private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; Тогда (в методе класса TForm1) (&this->Panel1)[0] это this->Panel1, (&this->Panel1)[1] это this->Panel2, и т.д. Повторюсь, это все верно только если Panel1..Panel4 описаны в классе последовательно. Если нет, то помочь может пожалуй только создание дополнительно массива. Описать это все массивом как поле класса мне не представляется возможным, там не случайно вставлена строчка "IDE-managed Components" всё допёрло... если в классе панели описаны не последовательно, то что собственно мешает нам собственными руками их переставить местами и пересобрать проект? вот такой получился проект, при чём местами переставил, и всё ок... Код TPanel **ptrPanel; ptrPanel = &Panel1; for (int i =0; i < 4; i++) { ptrPanel[i]->Caption = IntToStr(i); } спасибо!!!
Сообщение отредактировал Mozart - Apr 18 2008, 22:43
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 20 2008, 22:25
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата(Mozart @ Apr 18 2008, 21:54)  суть проблемы. есть 4ре компонента размещённые на форме, к примеру Panel1, Panel2, Panel3, Panel4. и есть массив который выводится на эти панели к примеру int temp[4]; можно ли написать следующий код в цикле Код Panel1->Caption = IntToStr(temp[0]); Panel2->Caption = IntToStr(temp[1]); Panel3->Caption = IntToStr(temp[2]); Panel4->Caption = IntToStr(temp[3]); среда разработки BorlandC++ 6.0 в WinXp К примеру вот такой код Код for(int i=0;i<Form1->ComponentCount;i++){ ShowMessage(Form1->Components[i]->Name); } покажет имена всех компонентов на форме. А вот такой: Код TPanel *Panel; for(int i=0;i<Form1->ComponentCount;i++){ if(Form1->Components[i]->Name=="Panel1") Panel=(TPanel *)Form1->Components[i]; Panel->Caption="Изменился caption"; } Ндаа, неудобно по имени Panel1, Panel2... Щас по классу обратимся к ним: Код TPanel *Panel; for(int i=0;i<Form1->ComponentCount;i++){ if((AnsiString)Form1->Components[i]->ClassName()=="TPanel"){ Panel=(TPanel *)Form1->Components[i]; Panel->Caption="Изменился caption всех панелей на форме)"; } } Вообще универсальный метод)) Эххх Делфи вспомнил  Там всё также было )
--------------------
The truth is out there...
|
|
|
|
|
Apr 21 2008, 04:58
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Mozart @ Apr 19 2008, 00:54)  можно ли написать следующий код в цикле Код Panel1->Caption = IntToStr(temp[0]); Panel2->Caption = IntToStr(temp[1]); Panel3->Caption = IntToStr(temp[2]); Panel4->Caption = IntToStr(temp[3]); среда разработки BorlandC++ 6.0 в WinXp Вот для Дельфи: Код for i := 0 to 3 do Form1.FindComponent('Panel' + IntToStr(i+1)).Caption := IntToStr(temp[0]);
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 21 2008, 08:00
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата(AHTOXA @ Apr 21 2008, 07:58)  Вот для Дельфи: Код for i := 0 to 3 do Form1.FindComponent('Panel' + IntToStr(i+1)).Caption := IntToStr(temp[0]); Разницы нет - и на билдере такое прокатит без проблем) Кстати код as is работать сейчас не будет. Нехватает приведения к типу, у TComponent нет caption, на сколько я помню.
--------------------
The truth is out there...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|