Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы
Старый 25.02.2009, 20:23   #1
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию Не могу сделать перебор компонентов в С++ по примеру из Delphi

Возникла необходимость писать на C++ Builder,а писал всегда на Delphi и с нюансами его синтаксиса знаком плохо.

Не получается перебрать все компоненты и присвоить их свойствам некоторые значения (выборочно).

Например В Delphhi я делал так:

Код:
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k:integer;
begin
//                                 Цикл по перебору всех компонент
 for i:=0 to ComponentCount-1 do 
  begin
//                                 присвоить Caption всех кнопок какое-то значение
   if (Components[i] is TButton) then  (Components[i] as TButton).Caption:='Кнопка';
//                                 присвоить Caption всех меток какое-то значение
   if (Components[i] is TLabel) then  (Components[i] as TLabel).Caption:='Метка';

   if (Components[i] is TMainMenu) then
    begin
//                                 присвоить Caption всех меню и под меню какое-то значение
      for j:=0 to (Components[i] as TMainMenu).Items.Count-1 do
       begin
       (Components[i] as TMainMenu).Items[j].Caption:='Гл.Меню';
        for k:=0 to (Components[i] as TMainMenu).Items[j].Count-1 do
         (Components[i] as TMainMenu).Items[j].Items[k].Caption:='Под Меню';
       end;

    end;
  end;
end;
Как правильно это сделать на С++ ?

Пробовал что-то с typedef, но не могу правильно это сделать, всегда выходят ошибки при компиляции.
Конкретно в данном случае: Как проверить тип компонента (Temp) и если это нужный тип, обратиться к соотв. свойству

Код:

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
	Application->OnHint = ShowHint;
 int I;

  TComponent *Temp;

  for (I = MainForm->ComponentCount - 1; I >= 0; I--)

  {
    Temp = MainForm->Components[I];
    // only move components that are not controls
    if (dynamic_cast<TControl *>(Temp) == NULL)
    {
          // не визуальный компонент
              Memo1->Lines->Add(Temp->Name);// это прбная строка, я пытался угодать синтаксис
             // Вот тут я хотел отбирать их и работать с ними
            //типа (typedef TButton Temp)->Caption = 'Это кнопка';
    } else
          // визуальный компонент
              Memo1->Lines->Add(Temp->Name);// 
    {
    }
  }

}

Последний раз редактировалось CahekG; 25.02.2009 в 20:29.
CahekG вне форума
Старый 10.03.2009, 18:02   #2
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
Радость

Короче сам нашел как это сделать

Я в общем загружаю из текстового файла надписи/цвета/шрифты для кнопок, меток, пунктов меню и Hint`ов - чтоб потом к примеру на машине без C++ (и без меня) можно было оформление дорабатывать

Вот упрощенный вариант чего я хотел от людей узнать то. Получить доступ к компонентам на форме по индексу компонента.
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 int i=0;
 for (i=0;i<Form1->ComponentCount;i++)
 {
  if (Form1->Components[i]->ClassNameIs("TLabel"))
   ((TLabel *)(Form1->Components[i]))->Caption="Это Метка";

  if (Form1->Components[i]->ClassNameIs("TButton"))
  {
   ((TButton *)(Form1->Components[i]))->Caption="Это кнопка";
   ((TButton *)(Form1->Components[i]))->Font->Size=16;
  }

 }
}
CahekG вне форума
Закрытая тема
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу сделать цифровые часы sid Общие вопросы Delphi 25 16.12.2009 05:06
помогите пожалуйста,не могу сделать.срочняк! дайкири Паскаль, Turbo Pascal, PascalABC.NET 4 10.01.2009 16:43
Запрос никак сделать не могу... Arkuz БД в Delphi 1 08.12.2008 17:59
как сделать перебор ??? akasex Общие вопросы Delphi 2 13.06.2008 08:27
как вы думаете можно с помощью delphi написать online игру ну к примеру как muonline 0pex Свободное общение 9 28.06.2007 13:20


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS