![]() |
property mit Combobox im Objektinspektor (Typ String)
Hallo alle zusammen,
ich versuche gerade einer Komponente ein property vom Typ String hinzuzufügen, in dem die möglichen Werte bereits an anderer Stelle definiert wurden. Wie erreiche ich, daß mir im Objektinspektor nur diese Werte in einer Combobox dargestellt werden so wie Fieldname bei TFieldelementen z.B. DataField in TDBEdit. Ich vermute mal, daß es irgendwie so funktionieren muß.
Delphi-Quellcode:
Ich währe euch unendlich Dankbar wenn ihr mir hier weiterhelfen könnt, denn ich grübel hier schon eine halbe Ewigkeit,wie ich das lösen könnte.
private
FMeineAuswahl : String; Function GetMeineAuswahl: String; published // Refferenz auf die Klasse, die die Strings in einer Collection hält property MeineReferenz : TMeineKompo read FMeineReferenz write FMeineReferenz; // hier soll sich im Objektinspektor die Combobox öffnen property MeineAuswahl : String read GetMeineAuswahl write FMeineAuswahl; . . . Function MeineKlasse.GetMeineAuswahl: String; begin if assigned(FMeineReferenz) then begin for i:=0 to FMeineReferenz.Collection.count-1 do begin ??? end; end; end; Gruß Daniel |
Wo ist denn das da her ? Ist das eine Unit, oder ein Package ?
|
Dazu musst Du einen Property-Editor schreiben und registrieren. Hier ein kleines Beispiel, aber leider nicht die Zeit, es großartig zu erklären.
In der Procudure Register, in welcher Du Deine Komponente registrierst, musst Du nach deren Registrierung den Editor registrieren.
Delphi-Quellcode:
Hier noch die Klasse des Editors:
// Beispiel
RegisterPropertyEditor(TypeInfo(String), TMeineKomponente, 'MeineAuswahl', TComponentMeineAuswahlEditor);
Delphi-Quellcode:
...:cat:...
type
TComponentMeineAuswahlEditor = class(TStringProperty) public procedure GetValues(Proc: TGetStrProc); override; function GetAttributes: TPropertyAttributes; override; end; function TComponentMeineAuswahlEditor.GetAttributes: TPropertyAttributes; begin // the property editor will provide a sorted list of possible values Result := [paValueList, paSortList]; end; procedure TComponentMeineAuswahlEditor.GetValues(Proc: TGetStrProc); begin // for each possibility call proc with the string Proc('Wert 1'); Proc('Wert 2'); Proc('Wert 3'); Proc('Wert 4'); Proc('Wert 5'); Proc('Wert 6'); end; |
Hallo nochmal
Danke erstmal für die schnellen Antworten @Hansa Der Quelltext da oben ist selbstverständlich kein Realer Quelltext. Ich wollte damit nur mein Problem verdeutlichen. Das was ich damit erreichen will, soll an mehreren Stellen in einer eigenen Komponentensammlung Anwendung finden. Bisher nötige ich den Nutzer dieser Komponenten, die entsprechenden Werte immer wieder neu einzutippen, was nicht gerade auf viel gegenliebe stößt. @sakura Ich werde mir das gleich mal anschauen. Jetzt habe ich ja einen realen Ansatz, Danke. Gruß Daniel |
Zitat:
Code:
Als ich dann den Type "TAdressLabelPropertyEditor" deklarieren wollte ging es nicht. Der Code:
procedure Register;
begin RegisterComponents('QuickRep 4 (SK)',[TSKQRAdressLabel]); RegisterPropertyEditor(typeinfo(string), TSKQRAdressLabel, 'Strings', TAdressLabelPropertyEditor); end;
Code:
Problem: Der Type "TStringProperty" ist undefiniert. Hab zwar die Unit gefunden (DesignEditors.pas) aber wenn ich die einbinde, findet er in der Unit DesignEditors.pas die Datei "Proxies.dcu /.pas" nicht. Was soll ich machen?? Kann die Datei nirgends finden
type TAdressLabelPropertyEditor = class(TStringProperty)
public procedure GetValues(Proc: TGetStrProc); override; function GetAttributes: TPropertyAttributes; override; end; Frage: Reicht das was du geschrieben hast um ne Property vom Typ String auszulesen und zu schreiben? |
Re: property mit Combobox im Objektinspektor (Typ String)
Property-Editoren müssen ab Delphi 6 in eine eigene Unit! Zusätzlich musst Du zwei Packages erstellen. Ein Design-Time-only Package mit Komponente und Editoren und ein Run-Time-only Package OHNE Property-Editoren. Dann verschwindet auch die Fehlermeldung. [dp]proxies*[/dp]
...:cat:... P.S.: Du musst nicht immer gleich den kompletten Beitrag zitieren :roll: |
Re: property mit Combobox im Objektinspektor (Typ String)
Also ich hab jetzt ein Package in dem ich unter "Optionen/Beschreibung/Verwenden für" die Einstellung von "Entwurf und Laufzeit" in "Entwurf" geändert hab.
Hab ne neue Unit angelegt: uSKQRAdressLabelPropEd.pas
Code:
Aus der Hauptunit hab ich den PropertyEditor komplett entfernt, aber der Fehler kommt immernoch
unit uSKQRAdressLabelPropEd;
interface uses DesignIntf, DesignEditors; type TAdressLabelPropertyEditor = class(TStringProperty) public procedure GetValues(Proc: TGetStrProc); override; function GetAttributes: TPropertyAttributes; override; end; procedure Register; implementation procedure Register; begin RegisterPropertyEditor(typeinfo(string), TSKQRAdressLabel, 'Strings', TAdressLabelPropertyEditor); end; end. |
Re: property mit Combobox im Objektinspektor (Typ String)
Erster Teil okay.
Zweiter Teil: Hast Du den Suchlink genutzt? Dann wärst Du auch bei folgendem Beitrag gekommen: ![]() ...:cat:... |
Re: property mit Combobox im Objektinspektor (Typ String)
Hab ich auch so gemacht:
2 Packages pSKQRComposDesign.dpk als Entwurf Mit 2 Komponenten (Ganz normal, ohne irgendwas von einem PropertyEditor drin) und eine Unit für den PropEditor (Die Unit die ich grad gepostet habe pSKQRComposRun.dpk als Laufzeit Dort hatte ich beide Units (Die mit den Komponenten) eingebunden. Die hat er jedoch im DesignPackage gefunden und hinzugefügt, die die da auch vorhanden sind. |
Re: property mit Combobox im Objektinspektor (Typ String)
Hast Du auch das gemacht?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz