Не работает для всех форм проекта
Помогите пжлста понять в чем дело?
Есть код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i, j;
String tmpStr, tmpStr2;
TRadioGroup *rdg;
TComboBox *cmb;
TListBox *lb;
TLabel *lbl;
TEdit *ed;
TButton *btn;
TCheckBox *chb;
TRadioButton *rb;
Memo1->Clear();
Memo2->Clear();
Memo3->Clear();
Memo1->Lines->Add("Êîëè÷åñòâî êîìïîíåíòîâ â Application - "+IntToStr(Application->ComponentCount));
for (i=0; i<Application->ComponentCount; i++)
{
Memo1->Lines->Add(Application->Components->Name);
tmpStr = Application->Components->ClassName();
if (tmpStr.Pos("Form") > 0)
{
Memo1->Lines->Add("Êîëè÷åñòâî êîìïîíåíòîâ íà ôîðìå - "+IntToStr(Application->Components->ComponentCount));
for (j=0; j<Application->Components->ComponentCount; j++)
{
tmpStr2 = Application->Components->Name+"_"+Application->Components->Components[j]->Name;
Memo2->Lines->Add("#define rs"+tmpStr2);
tmpStr2 = Application->Components->Components[j]->ClassName();
// åñëè Label
if (tmpStr2.Pos("Label") > 0)
{
lbl = (TLabel*)FindComponent(Application->Components->Components[j]->Name);
tmpStr2 = "rs"+Application->Components->Name+"_"+lbl->Name+"_Caption \""+
lbl->Caption+"\"";
Memo3->Lines->Add(tmpStr2);
continue;
}
// åñëè Edit
if (tmpStr2.Pos("Edit") > 0)
{
ed = (TEdit*)FindComponent(Application->Components->Components[j]->Name);
tmpStr2 = "rs"+Application->Components->Name+"_"+ed->Name+"_Text \""+
ed->Text+"\"";
Memo3->Lines->Add(tmpStr2);
continue;
}
// åñëè Button
if (tmpStr2.Pos("TButton") > 0)
{
btn = (TButton*)FindComponent(Application->Components->Components[j]->Name);
tmpStr2 = "rs"+Application->Components->Name+"_"+btn->Name+"_Caption \""+
btn->Caption+"\"";
Memo3->Lines->Add(tmpStr2);
continue;
}
// åñëè CheckBox
if (tmpStr2.Pos("TCheckBox") > 0)
{
chb = (TCheckBox*)FindComponent(Application->Components->Components[j]->Name);
tmpStr2 = "rs"+Application->Components->Name+"_"+chb->Name+"_Caption \""+
chb->Caption+"\"";
Memo3->Lines->Add(tmpStr2);
continue;
}
// åñëè RadioButton
if (tmpStr2.Pos("TRadioButton") > 0)
{
rb = (TRadioButton*)FindComponent(Application->Components->Components[j]->Name);
tmpStr2 = "rs"+Application->Components->Name+"_"+rb->Name+"_Caption \""+
rb->Caption+"\"";
Memo3->Lines->Add(tmpStr2);
continue;
}
} // end of for
}
}
//
for (i=0; i<Memo2->Lines->Count; i++)
{
tmpStr = Memo2->Lines->Strings + " "+IntToStr(i+1);
Memo2->Lines->Strings = tmpStr;
}
}
Его задача перебрать все компоненты на всех формах и собрать их
Captionы, Textы и т.д.
Работает если на 1-й и 2-формах есть компоненты с одинаковыми именами. Или если есть на 1-й но нет на 2-й.
Если же есть компоненты одного класса но разных имен, то вылезает Ексепшн.
Помогите?
Заранее спасибо
Оформляйте исходник по правилам. Читать неудобно.
Вообщем исправьте на
Код:
Application->Components->FindComponent(.......);
Код:
String SenderInfo="";
TObject* Sender=(TObject*)Application->Components->FindComponent(.......);
if(IsPublishedProp(Sender, "Caption"))
{
SenderInfo=GetStrProp(Sender, "Caption");
}
if(IsPublishedProp(Sender, "Text"))
{
SenderInfo=SenderInfo+" "+GetStrProp(Sender, "Text");
}
ShowMessage(SenderInfo);
TObject* Sender=(TObject*)Application->Components->FindComponent(.......);
if(IsPublishedProp(Sender, "Caption"))
{
SenderInfo=GetStrProp(Sender, "Caption");
}
if(IsPublishedProp(Sender, "Text"))
{
SenderInfo=SenderInfo+" "+GetStrProp(Sender, "Text");
}
ShowMessage(SenderInfo);
Всем большое спасибо. Разобрался
Код:
void GetSubComponents(TComponent *Parent) {[
/*
Здесь перебирай подкомпоненты компонента Parent
Это избавит тебя от кода вида Application->Components->Components[j]->Components[k];
*/
}
/*
Здесь перебирай подкомпоненты компонента Parent
Это избавит тебя от кода вида Application->Components->Components[j]->Components[k];
*/
}