InsertObject (C++)

From RAD Studio Code Examples
Jump to: navigation, search

Description

For the following example, add a button, a status bar, and a list box to the form. Set the SimplePanel property of the status bar to True, using the object inspector. Also, populate the OnMouseUp event handler for the list box. The following code fills a list box with the names of all components on the form when you click the button. References to the components themselves are inserted along with the names. The components are all inserted at the front of the list, so that the last component added to the form is the first component in the list. When you right-click the name of an object in the list, the component's coordinates are displayed on the status bar. Note that because you are using the right-click, the item need not be selected.

Code

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for (int i = 0; i < ComponentCount; i++)
	ListBox1->Items->InsertObject(0,
                                  Components[i]->Name, 
								  dynamic_cast<TObject *>(Components[i]));
}

void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  if (Button == mbRight)
  {
    TClass ClassRef;
    int Index = ListBox1->ItemAtPos(Point(X,Y), true);
    // Only components that are controls have a position.
    // Make sure the component is a control.
	for (ClassRef = ListBox1->Items->Objects[Index]->ClassType();
         ClassRef != NULL;
         ClassRef = ClassRef->ClassParent())
      if (String(ClassRef->ClassName()) == "TControl")
      {
		TControl *TheObject = dynamic_cast<TControl *>(ListBox1->Items->Objects[Index]);
        StatusBar1->SimpleText =
          TheObject->Name + " is at (" +
          IntToStr(TheObject->Left) + ", " +
          IntToStr(TheObject->Top) + ")";
         break;
      }
    if (ClassRef == NULL) // In case it was not a control
      MessageBeep(0);
  }
}

Uses