Komponente zur Laufzeit kopieren



  • Hallo,
    wie kann man eine Komponente (z.B. TLabel) während der Laufzeit z.B. 10mal kopieren? Aus "Label1" soll dann einfach "Label2" u.s.w. werden. Alle Eigenschaften und Events sollen bei allen gleich bleiben.

    Danke!



  • Ich zitiere Th69 aus dem anderen Thread:

    Th69 schrieb:

    Steht in der FAQ: Komponenten benutzen - zur Laufzeit erstellen, anzeigen und Events zuweisen

    Da steht, wie das geht.



  • kenne ich, Danke, habe so z.B. eine Komponente zur Laufzeit (ActiveX für eine VNC-Verbindung) erstellt (was zunächst auch prima funktioniert):

    for (int i=1;i<=20;i++)
    	{
    	 //ViewerX-Komponente erzeugen, dem entsprechenden Panel zuweisen
    	 //und den Zugriff in einem Array speichern:
    	 TPanel* PanelX = dynamic_cast<TPanel*>(FindComponent("Panel"+String(i)));
    	 ViewerX[i] = new TCSC_ViewerXControl(PanelX);
    	 ViewerX[i]->Parent = PanelX;
    	 ViewerX[i]->Name = "ViewerX"+IntToStr(i);
    

    weiterhin soll eine Verbindung hiermit aufgebaut werden:

    void TForm1::Verbindung_herstellen(int ViewerXNummer, String Hostname)    
    {
      //zunächst ViewerX-Komponente einblenden, sonst ist kein Connecten möglich!:
      float Faktor = float(Form4->UpDown_Zoomfaktor->Position) / 7;
      TCSC_ViewerXControl* ViewerXX = dynamic_cast<TCSC_ViewerXControl*>(FindComponent("ViewerX" + String(ViewerXNummer)));
    
      ViewerX[ViewerXNummer]->Height=ViewerX_Standard_Height*Faktor;
      ViewerX[ViewerXNummer]->Width=ViewerX_Standard_Width*Faktor;
      ViewerX[ViewerXNummer]->Visible=true;
      if (ViewerX[ViewerXNummer]->Connected == false)  //wenn nicht verbunden, dann..
      {
    	ViewerX[ViewerXNummer]->HostIP=Hostname;
    	//ActivX-VNC-Verbindung herstellen:
    			try
    			{
    			  ViewerX[ViewerXNummer]->ConnectAsync();
    			}
    			catch ( Exception& Excp )
    			{
    			}
    
      }
    }
    

    was so aufgerufen wird:

    Verbindung_herstellen(i, rechnername);
    

    Leider funktioniert der Verbindungsaufbau nicht. Es erfolgt eine Zugriffsverletzung $00005 (utilcls.h, Zeile 3536 "m_Dispatch->Release();").

    Genau der (fast) gleiche Code funktioniert aber, wenn ich in der VCL diese Komponente händisch ins Formular ziehe. 😕
    Hat jemand eine Idee? Danke!


Anmelden zum Antworten