AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi property mit Combobox im Objektinspektor (Typ String)
Thema durchsuchen
Ansicht
Themen-Optionen

property mit Combobox im Objektinspektor (Typ String)

Ein Thema von danielA · begonnen am 4. Jul 2003 · letzter Beitrag vom 13. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#1

property mit Combobox im Objektinspektor (Typ String)

  Alt 4. Jul 2003, 12:20
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:
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;
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.

Gruß Daniel
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 4. Jul 2003, 12:34
Wo ist denn das da her ? Ist das eine Unit, oder ein Package ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3
  Alt 4. Jul 2003, 12:52
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:
// Beispiel
  RegisterPropertyEditor(TypeInfo(String), TMeineKomponente,
      'MeineAuswahl', TComponentMeineAuswahlEditor);
Hier noch die Klasse des Editors:
Delphi-Quellcode:
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;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#4
  Alt 4. Jul 2003, 13:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#5
  Alt 13. Mai 2004, 11:18
Zitat von sakura:
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:
// Beispiel
  RegisterPropertyEditor(TypeInfo(String), TMeineKomponente,
      'MeineAuswahl', TComponentMeineAuswahlEditor);
Hier noch die Klasse des Editors:
Delphi-Quellcode:
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;
......
So, das hab ich gleich mal versucht. Hab die "DesignIntf" eingebunden und meine Proc Register sieht so aus:

Code:
procedure Register;
begin
  RegisterComponents('QuickRep 4 (SK)',[TSKQRAdressLabel]);
  RegisterPropertyEditor(typeinfo(string), TSKQRAdressLabel, 'Strings', TAdressLabelPropertyEditor);
end;
Als ich dann den Type "TAdressLabelPropertyEditor" deklarieren wollte ging es nicht. Der Code:

Code:
type TAdressLabelPropertyEditor = class(TStringProperty)
  public
    procedure GetValues(Proc: TGetStrProc); override;
    function GetAttributes: TPropertyAttributes; override;
  end;
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

Frage: Reicht das was du geschrieben hast um ne Property vom Typ String auszulesen und zu schreiben?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

Re: property mit Combobox im Objektinspektor (Typ String)

  Alt 13. Mai 2004, 11:26
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]

......

P.S.: Du musst nicht immer gleich den kompletten Beitrag zitieren
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#7

Re: property mit Combobox im Objektinspektor (Typ String)

  Alt 13. Mai 2004, 11:48
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:
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.
Aus der Hauptunit hab ich den PropertyEditor komplett entfernt, aber der Fehler kommt immernoch
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8

Re: property mit Combobox im Objektinspektor (Typ String)

  Alt 13. Mai 2004, 11:52
Erster Teil okay.

Zweiter Teil: Hast Du den Suchlink genutzt? Dann wärst Du auch bei folgendem Beitrag gekommen: Komponenten unter Delphi 6 und neuer

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#9

Re: property mit Combobox im Objektinspektor (Typ String)

  Alt 13. Mai 2004, 12:02
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.
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#10

Re: property mit Combobox im Objektinspektor (Typ String)

  Alt 13. Mai 2004, 12:05
Hast Du auch das gemacht?

Zitat:
Daraus ergibt sich, dass dass das Package DesignIde.dcp zu dem Komponentenpackage hinzugefügt werden muss.
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:25 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