AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unterproperty in Objektinstpektor

Ein Thema von Taladan · begonnen am 2. Sep 2003 · letzter Beitrag vom 5. Sep 2003
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Unterproperty in Objektinstpektor

  Alt 2. Sep 2003, 18:00
Du meinst am ersten Beispiel von Leuselator..? Ok, das hat nix mit "Unterproperties" zu tun.. Hätte mir den Code vielleicht doch _vor_ dem posten genauer anschaun solln..
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#12

Re: Unterproperty in Objektinstpektor

  Alt 2. Sep 2003, 20:00
@Nimoe: Nicht so Hitzig mein Bester - im Teil 2 (nach oder:)
verwende ich ein Set und das mach durchaus ein Plus+ im Objectinspector
und statt hier rumzutösen, gib ihm doch einfach ein besseres Beispiel...
Tim Leuschner
  Mit Zitat antworten Zitat
Nimoee

Registriert seit: 20. Aug 2003
Ort: Darmstadt
131 Beiträge
 
Delphi 5 Professional
 
#13

Re: Unterproperty in Objektinstpektor

  Alt 3. Sep 2003, 06:29
hallo,

der Fehler liegt bei dir, nicht bei mir! Anstatt deinen Fehler zuzugeben hackst du jetzt auf mir rum! Kein schöner Zug....

nimoee
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#14

Re: Unterproperty in Objektinstpektor

  Alt 3. Sep 2003, 07:39
Also nochmal: ich habe kein Problem damit, wenn hier jemand sagt, ich hätte Mist gebaut!

Nur wäre es in meinen Augen sinnvoller, das ganze für den eigentlichen Fragesteller auch produktiv zu gestalten, indem man ihm ein besseres Beispiel gibt, als sich vornehm, wissend lächelnd hinzustellen, d'raufzuzeigen und zu sagen: "Dös is aber Falsch!"

Das bringt dem Fragesteller sehr wenig. Du verschwendest nun schon den 6. Beitrag an diesen Thread, ohne ein einziges Produktives Wort für den Fragesteller zu schreiben. Das kann man noch nichtmal als Besserwisserei abtun. Daher meine Reaktion. Die wird in gleicher Situation auch immer wieder so kommen!

Wenn Du unserem Freund also etwas hilfreiches zu sagen hast, dann tu es!
Wenn Du mir mitteilen möchtest, das Dir mein Bemühen, anderen hier zu helfen, so gut ich es eben kann, nicht passt, dann sag auch dies!
Tim Leuschner
  Mit Zitat antworten Zitat
Nimoee

Registriert seit: 20. Aug 2003
Ort: Darmstadt
131 Beiträge
 
Delphi 5 Professional
 
#15

Re: Unterproperty in Objektinstpektor

  Alt 3. Sep 2003, 07:52
hallo,

ich versuch jetzt 6 Beiträge lang eine Antwort zu bekommen, wie man das macht. Bist du schon mal auf den Gedanken gekommen, dass ich das auch nicht kann?

Antwort: nur Polemik ( vielleicht liegt das auch an meinem Ton! )
Vielleicht wärs günstig, wenn du das nochmal step bei step erklärst!

nimoee
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#16

Re: Unterproperty in Objektinstpektor

  Alt 3. Sep 2003, 08:09
@Nimoee: wenn du gleich gesagt hättest, dass du auch keine Ahnung hast wie das geht, anstatt den Eindruck zu vermitteln du wüsstest es, sagst es aber nicht wäre es vielleicht einfacher gewesen...

Aber ok, dann geb ich mal Code-Beispiele für beide Möglichkeiten:

1) Enumerations-Typ
Delphi-Quellcode:
  TMyEnumeration = (meFirst, meSecond, meThird, meFourth);

  TMyObject = class(TComponent)
    private
      FMyEnumeration: TMyEnumeration;
    published
      property MyEnumeration: TMyEnumeration read FMyEnumeration write FMyEnumeration;
  end;
2) TPersisten-Nachfolger
Delphi-Quellcode:
  TMyPersistentObject = class(TPersistent)
    private
      FIntegerProperty: Integer;
      FStringProperty: String;
      FColorProperty: TColor;
    public
      procedure Assign(Source: TPersistent); override;
    published
      property StringProperty: String read FStringProperty write FStringProperty;
      property IntegerProperty: Integer read FIntegerProperty write FIntegerProperty;
      property ColorProperty: TColor read FColorProperty write FColorProperty;
      {...}
  end;

  TMyObject = class(TComponent)
    private
      FMyPersistentObject: TMyPersistentObject;
      procedure SetMyPersistentObject(const Value: TMyPersistentObject);
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
    published
      property MyPersistenObject: TMyPersistentObject read FMyPersistentObject write SetMyPersistentObject;
  end;


{ TMyPersistentObject }

procedure TMyPersistentObject.Assign(Source: TPersistent);
begin
  if (Source <> nil) and (Source is TMyPersistentObject) then
  with TMyPersistentObject(Source) do
  begin
    Self.FIntegerProperty := FIntegerProperty;
    Self.FStringProperty := FStringProperty;
    Self.FColorProperty := FColorProperty;
  end
  else
    inherited Assign(Source);
end;

{ TMyObject }

constructor TMyObject.Create(AOwner: TComponent);
begin
  inherited;
  FMyPersistentObject := TMyPersistentObject.Create;
end;

destructor TMyObject.Destroy;
begin
  FMyPersistentObject.Free;
  inherited;
end;

procedure TMyObject.SetMyPersistentObject(const Value: TMyPersistentObject);
begin
  FMyPersistentObject.Assign(Value);
end;
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#17

Re: Unterproperty in Objektinstpektor

  Alt 3. Sep 2003, 12:07
Lol - komische Art zu betteln :)
Tim Leuschner
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#18

Re: Unterproperty in Objektinstpektor

  Alt 3. Sep 2003, 12:48
Also zur Vollständigkeit auch noch ein einfacher Propertyeditor, der zeigt, wie man zur Entwurfszeit in der IDE die Auswahl von möglichen Werten für ein Property einschränkt (Code so nicht funktional - fehlt z.b.Create/Destroy von TMeineKomponente etc) aber sollte das Prinzip veranschaulichen:

Delphi-Quellcode:
type
  TMeinPropertyTyp = TWinControl;

  TMeinPropertyEditor = class(TComponentProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValues(Proc: TGetStrProc); override;
  end;

  TMeineKomponente = Class(TWincontrol)
  private
    FKumpel : TMeinPropertyTyp;
  published
    property MeinKumpel :TMeinPropertyTyp read FKumpel write FKumpel;
  end;

  function LieferPropertyString(EinControl: TControl): String; // wird vom Editor aufgerufen

  procedure Register;

implementation

function LieferPropertyString(EinControl: TControl): String; // wird vom Editor aufgerufen
begin
  if Assigned(EinControl)
    then Result := EinControl.Name
    else Result := '';
end;

function TMeinPropertyEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paMultiSelect, paValueList, paSortList, paRevertable];
end;

procedure TMeinPropertyEditor.GetValues(Proc: TGetStrProc);
var
  i,j: Integer;
  SchonDa : Boolean;
  UnserParent : TWinControl;
  WirSelbst : TComponent;
  DerKonkurent : TComponent;
  DerKandidat : TControl;
begin
  WirSelbst := nil;
  // wir gehen alle Componenten des
  // Designers durch, bis wir uns selbst
  // gefunden haben...
  for i := 0 to Designer.Form.ComponentCount - 1 do begin
    WirSelbst := Designer.Form.Components[i];
    if (WirSelbst is TMeineKomponente) and
       ((WirSelbst as TComponent)=GetComponent(0))
    then break; // wir haben uns selbst gefunden
  end;
  // nun suchen wir nach möglichen Kumpels für uns,
  // aber nur wenn sie das selbe Parent haben (z.B.
  // WirSelbst liegen auf einem Panel und wollen nur
  // Komponenten als Kumpel zulassen, die auch auf diesem
  // Panel liegen...
  UnserParent := (WirSelbst as TMeineKomponente).Parent;
  for i := 0 to UnserParent.ControlCount-1 do begin
    DasControl := UnserParent.Controls[i];
    if (DasControl is TWincontrol) and not
       ((DasControl is TMeinPropertyEditor) or // keine Inzucht!
        (DasControl is TButton)) // Buttons sollen es auch nicht seein!
    then begin
      // Nun checken wir, ob unser potentieller Kumpel schon einen anderen
      // Freund unserer Art hat - wenn ja, dann fliegt er aus der Auswahl...
      SchonDa := False;
      for j := 0 to Designer.Form.ComponentCount-1 do begin
        DerKonkurent := Designer.Form.Components[j];
        if (DerKonkurent is TMeineKomponente) then begin
          if ((DerKonkurent as TMeineKomponente).MeinKumpel = (DerKandidat as TWincontrol)) then begin
            SchonDa := True;
          end;
        end;
      end;
      // wenn der Kandidat noch keinen Freund unserer Art hat,
      // dann kommt er in die Liste des Objectinspetors:
      if not SchonDa
        then Proc(LieferPropertyString(DasControl));
    end;
  end;
  Proc(LieferPropertyString(nil)); // bin gerade nicht sicher, ob das nötig ist
end;

// nun noch den PropertyEditor bei der IDE anmelden:
procedure Register;
begin
  RegisterPropertyEditor(TypeInfo(TMeinPropertyTyp),
                         TMeineKomponente, //sagt IDE, für welche Komponentenklasse
                                            //der Editor zu verwenden ist
                        'MeinKumpel', // sagt IDE wie das Property dort heisst
                         TMeinPropertyTyp);
end;
voila - Nun könnte man eine Komponente TMeineKomponente bauen, die zur entwurfszeit auf ein Panel "geworfen", im Objektinspektor im Property "MeinKumpel" nur all die Controls zur auswahl anbietet, die:
1. Kein TButton sind (willkürlich gewähltes Beispiel ohne Sinn)
2. Nicht vom Typ TMeineKomponente sind, und
3. noch keinen Freund vom Typ TMeineKomponente haben, bei dem sie als "MeinKumpel" aufgeführt sind.

hoffe, das hilft ein wenig weiter, bei der Entwicklung von eigenen saugeilen Komponenten
Tim Leuschner
  Mit Zitat antworten Zitat
Nimoee

Registriert seit: 20. Aug 2003
Ort: Darmstadt
131 Beiträge
 
Delphi 5 Professional
 
#19

Re: Unterproperty in Objektinstpektor

  Alt 5. Sep 2003, 06:32
Hallo,

das klappt, nur werden die Parameter auf der IDE Seite nicht übernommen.
Woran liegt das? Weiss das jemand.
Bei einfachen Properties funktioniert das Ganze problemlos.
Auch zur Laufzeit alles O.K.

nimoee
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#20

Re: Unterproperty in Objektinstpektor

  Alt 5. Sep 2003, 10:02
Keep slow Nimoee, dein Tonfall ist sehr provizierend und du bist der der Hilfe sucht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz