Announcement

Collapse
No announcement yet.

Panel mit Controls, welche Form als Owner erhalten...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Panel mit Controls, welche Form als Owner erhalten...

    Hallo Experten,<BR><BR>
    ich habe eine Komponente, abgeleitet von TCustomPanel mit verschiedenen Controls (Labels, Edits).<BR>
    Die Controls hatten bis jetzt die Panel als Owner. Nachteil ist, das ich diese Controls beim Form nicht mehr in der Compo - Liste habe.<BR>
    Also, wenn ich alle Controls des Formulares ändern will, reicht ein:<PRE>
    for i := 0 to ComponentCout - 1 do ...</PRE>
    auf dem Form nicht mehr aus.<BR>
    Jetzt habe ich den Owner für die Controls auf dem Panel auf das Formular geändert.<BR>
    Damit stehen die Controls natürlich in der DFM und zur Laufzeit bekomme ich eine Exception.<BR>
    Klar, beim Einlesen der DFM werden meine Controls natürlich schon vor meiner Komponente erzeugt, die Kompo will die Controls wieder unter gleichen Namen erzeugen...<BR>
    Ist es nun Stilbruch mit dem Owner oder gibt es eine einfache Lösung.<BR><BR>
    Danke, Frank

  • #2
    Hallo,

    Hast du Sourcen zur verfügung ?
    Normalerweise müsste das funktionieren, hab das nämlich auch schon mal gemacht und das hat funktioniert.

    Gru&#223

    Comment


    • #3
      Hallo Stefan,<BR><BR>
      hab gar nicht mehr damit gerechnet, dass sich jemand meines Problemes annimmt.<BR>
      Hab mal meine Testkomponente Upgeloaded.<BR>
      <a href="http://www.reim-edv.de/download/testpanel.zip">http://www.reim-edv.de/download/testpanel.zip</a><BR>
      Habe auch schon probiert, das mehrfache Erzeugen zu verhindern, indem ich den Aufruf in SetParent verlegt habe. Aber der Effekt ist der Gleiche.<BR>
      Also, erst mal Danke.<BR>
      Fran

      Comment


      • #4
        Hallo Frank,

        Hab mir das Dingen mal angeschaut, sieht schlecht aus.
        Mein Problem hat sich damals etwas anders dargestellt.
        Aber wenn es nur darum geht alle Controls auf einem Formular zu durchlaufen hilft eine simple Rekursion, dann kannst du die Subkomponenten wieder mit Owner = Self erzeugen.
        <br>

        procedure SetCaptions(aComp: TComponent);
        var
        i: Integer;
        begin
        if aComp = nil then
        begin
        for i := 0 to ComponentCount - 1 do
        SetCaptions(Components[i]);
        end
        else
        begin
        for i := 0 to aComp.ComponentCount - 1 do
        begin
        if aComp.Components[i].ComponentCount > 0 then
        SetCaptions(Components[i]);
        if aComp.Components[i] is TLabel then
        TLabel(aComp.Components[i]).Caption := 'Hallo';
        end;
        end;
        end;
        <br>

        Wenn es aber auch darum geht, das die Komponenten zur Designzeit geändert werden sollen, da hast du mir ja schonmal weitergeholfen (SetSubComponent).
        <br>

        Na ja, ich hoffe es hilft wenigstens ein bißchen...
        <br>

        Gruß Stefa

        Comment


        • #5
          Hallo Stefan,

          du hast recht, eine rekursive Proc löst ja das eigentliche Problem.
          Hab jetzt als Owner wieder die Panel und die Proc entsprechend deines Vorschlages umgestellt.
          Danke, und das nächste mal bin ich wieder dran mit Hilte ;-)
          Fran

          Comment

          Working...
          X