Announcement

Collapse
No announcement yet.

Unterkomponente im Objektinspektor

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

  • Unterkomponente im Objektinspektor

    Hallo,

    Ich habe folgendes Problem:

    Ich will eine neue Komponente entwickeln. Diese ist von TCustomPanel abgeleitet.

    Auf diesem Panel sollen mehrere Label- (TLabel) und EditKomponeneten (TEdit) enthalten sein.
    Diese Labels und Edits möchte ich im Objektinspector bearbeiten können.

    Mir ist bekannt, das der OI nur Eigenschaften aus dem published Bereich anzeigt, und dies auch nur, wenn die Objekte mindestens von TPersistent abgeleitet sind.

    Wenn ich mir eine eigene Klasse schreibe, die direkt von TPersistent abgeleitet wird funktioniert das auch. Jedoch bei den Label und Edits nicht.

    Kann mir hier jemand weiterhelfen ??

    Danke schon mal im voraus.

    Gruß Stefan Laut

  • #2
    Ich gehe mal davon aus das dein Probelm darin liegt, das deine TEdit und TLabel Propertys im Objektinspekor zwar angezeigt werden. Wenn du im Objektinspektor aber die Werte der Propertys dieser Untergeordneten Komponenten änderst sind sie, wenn du das Projekt neu lädst oder in der erzeugten Exe, wieder auf den Standardwerten. Falls das nicht dein Problem ist, wirst du auf dieses Probelm mit Sicherheit auch noch stossen (-:

    Das Probelm läßt sich dadurch lösen, dass du für jede untergeordnet Komponente die Methode SetSubcomponent(True) aufrufst. Näheres dazu findest du in der Delphi Hilfe

    Comment


    • #3
      Hy Stefan,<BR><BR>
      <PRE>
      unit MyPanel;<BR>
      interface<BR>
      uses
      SysUtils, Classes, Controls, StdCtrls, ExtCtrls;<BR>
      type
      TMyPanel = class(TCustomPanel)
      private
      FLabel1: TLabel;
      { Private-Deklarationen }
      protected
      { Protected-Deklarationen }
      public
      constructor Create(AOwner: TComponent); override;
      { Public-Deklarationen }
      published
      property Label1: TLabel read FLabel1 write FLabel1;
      { Published-Deklarationen }
      end;<BR>
      procedure Register;<BR>
      implementation<BR>
      procedure Register;
      begin
      RegisterComponents('red', [TMyPanel]);
      end;<BR>
      constructor TMyPanel.Create(AOwner: TComponent);
      begin
      inherited;
      Label1 := TLabel.Create(Self);
      with Label1 do
      begin
      SetSubComponent(True);
      Caption := 'Mein Label';
      Parent := Self;
      Left := 10;
      Top := 10;
      end;
      end;
      end.
      </PRE>
      bei dieser Mini - Komponente kann ich den Label1 im OI bearbeiten.<BR><BR>
      Fran

      Comment


      • #4
        Vielen Dank Leute,

        Hat funktioniert. Mir hat die Methode SetSubComponent gefehlt.

        Gruß Stefan Lau

        Comment


        • #5
          Sorry Leute,

          bei mir daheim hat's funktioniert. In der Firma, wo ich es brauche benutzen wir allerdings noch Delphi 5. Diese Funktion gibt es aber erst ab Delphi 6.

          Habt ihr vielleicht noch andere Lösungsvorschläge ?

          Gruß Stefan Lau

          Comment


          • #6
            ggf. unterkomponenten nicht public machen. Und eigene Properties einfügen (public) die dann die Werte dann in die Unterkomponenten Kopieren

            Comment


            • #7
              Eben genau das möchte ich ja umgehen, das ich die ganzen Properties kopieren muss nur um sie dann weiterzuleiten an die tatsächliche SubKomponent

              Comment


              • #8
                Also die Methode SetSubComponent macht ja nix anderes als dafür zu sorgen, dass im Property ComponentStyle, das jede Komponente hat, das Flag csSubComponent gesetzt ist. Sollte es dieses Property oder dieses Flag in D5 nicht geben, stehen die chancen gut, das D5 sowas noch garnicht kann.

                An sonsten mußt du einen anderen Weg finden dafür zu sorgen, dass ComponentStyle deiner Unterkomponenten csSubComponent zurückgibt. Vielleicht kannst du ja für deinen Komponente eine eigene Klasse von TEdit etc. ableiten und den Wert von ComponentStyle in der abgeleiteten Klasse beeinflussen. Ein einfaches Include(FComponentStyle,csSubComponent) im Constructur nach inherited könnte möglicherweise schon genügen, wenn der Wert nicht an anderer Stelle überschieben wird

                Comment

                Working...
                X