Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: можно ли обращаться к компонентам в среде BorlandC в цикле?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Mozart
суть проблемы.
есть 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
zltigo
Цитата(Mozart @ Apr 18 2008, 20:54) *
среда разработки BorlandC++ 6.0 в WinXp

Moderator
Вы хоть чуть-чуть дайте себе труд узнать где находится BCC и где программирование DSP, прежде, чем писать. Тему перенес.
Aesthete Animus
Цитата(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) + " панель";
}


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

простите не заметил 05.gif ... сделаю всё возможное чтобы это не повторилось...

Цитата
Но лично я, для успокоения души создавал еще один массив, в который копировал нужные элементы, и работал уже с этим массивом.

у меня тоже потом появилась такая мысль... а другой способ есть?? может быть это как-то можно сделать стандратами языка??
Aesthete Animus
Цитата(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"
Mozart
Цитата(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);
   }

спасибо!!!
Aesthete Animus
2Mozart
Всегда пожалуйста smile.gif
sigmaN
Цитата(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 всех панелей на форме)";
        }
    }

Вообще универсальный метод))
Эххх Делфи вспомнил smile.gif Там всё также было )
AHTOXA
Цитата(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]);
sigmaN
Цитата(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, на сколько я помню.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.