AGB  ·  Datenschutz  ·  Impressum  







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

Verwenden des PropertyGrids?

Ein Thema von Alexander · begonnen am 10. Feb 2007 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#1

Verwenden des PropertyGrids?

  Alt 10. Feb 2007, 17:46
Hallo DPler .
Ich plage mich gerade mit dem eigentlich genialen Property-Grid herum, nur funktioniert das nicht so wie gewollt .
Also ich habe ne eigene kleine Klasse:
Delphi-Quellcode:
  TSetting = class
  private
    FVarName : String;
    FDefaultText : String;
    FTitle : String;
    FDescription : String;
    FValueLabel : String; // Im SQL-Text enthaltender Text

    procedure setVarName(s : String);
    function getVarName() : String;
    procedure setDefaultText(s : String);
    function getDefaultText() : String;
    procedure setTitle(s : String);
    function getTitle() : String;
    procedure setDescription(s : String);
    function getDescription() : String;
    procedure setValueLabel(s : String);
    function getValueLabel() : String;
  public
    [System.ComponentModel.Browsable(true)] // Description('bla'),
    property VarName : String read getVarName write setVarName;

    [System.ComponentModel.Browsable(true)]
    property DefaultText : String read getDefaultText write setDefaultText;

    [System.ComponentModel.Browsable(true)]
    property Title : String read getTitle write setTitle;

    [System.ComponentModel.Browsable(true)]
    property Description : String read getDescription write setDescription;

    [System.ComponentModel.Browsable(true)]
    property ValueLabel : String read getValueLabel write setValueLabel;
  end;
Dann eine Instanz davon erzeugt und diese mit selectedObject ans PropertyGrid geklatscht.
Ich dachte eigentlich das wäre es. Nur werden nicht alle Properties angezeigt :shocked:
Das beste ist noch, dass je nach dem wie ich die Properties nenne, immer unterschiedliche nicht angezeigt werden.

Wahrscheinlich mache ich nur eine Kleinigkeit falsch. Sehr merkwürdig das ganze

Als nächstes würde mich interessieren, wie ich den Properties zur Laufzeit andere Namen/Texte und Beschreibungen gebe.
Zur Programmierzeit kann ich das ja zum Beispiel einfach ein Description in die eckigen Klammern setzen (wodurch übrigens auch immer mal wieder ein paar verschwinden ).

Zu guter Letzt wäre es noch wichtig zu wissen, wie ich mehrere Instanzen von Tsetting in das gleiche PropertyGrid werfen kann.

Gerade bei dem letzten Punkt bin ich am zweifeln, ob das überhaupt geht.
Aber erstmal das komische Verhalten in den Griff bekommen (das Problem mit dem merkwürdigen Verhalten von CDATA besteht ja auch noch )

Vielen Dank für eure Bemühungen
Alexander
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Verwenden des PropertyGrids?

  Alt 10. Feb 2007, 17:59
In den Dark ages, in denen ich mich selbst noch mit DfN rum geärgert habe, musste ich feststellen, dass dir immer noch published aufgezwungen wird.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: Verwenden des PropertyGrids?

  Alt 10. Feb 2007, 19:52
Danke Robert . Das Verhalten mit Public ist aber dennoch mehr als sonderbar.
Was würde ich nur ohne Dich machen

Weißt du auch, ob man mehrere Instanzen einer Klasse gleichzeitig in das Grid schmeißen kann?
Ich habe dies bezüglich leider noch nichts im Netz finden können .
Und den Titel links möchte ich wohl auch noch gerne verändern können. Das scheint aber zur Laufzeit nicht wirklich machbar zu sein, oder doch?

PS: Hast du eigentlich noch eine Idee für mein anderes Problem? Ich wollte es morgen noch mal komplett mit Chrome ausprobieren. Vllt. ist es ja ne Delphi Macke
Alexander
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Verwenden des PropertyGrids?

  Alt 10. Feb 2007, 20:07
Zitat von Alexander:
Was würde ich nur ohne Dich machen
Wahrscheinlich würdest du kein .Net benutzen und somit auch keine Probleme mit DfN haben. Aber der Idee folge ich jetzt lieber nicht zu weit.
Zitat:
Weißt du auch, ob man mehrere Instanzen einer Klasse gleichzeitig in das Grid schmeißen kann?
.Net 1.1 ist defintiv zu lange für mich her um hier irgendwas genaues sagen zu können, und es ist auch schon eine Weile her dass ich mit dem PropertyGrid en detail gearbeitet habe.
Was ich dir aber sagen kann ist, dass du praktisch alles im PG anpassen kannst und vieles sogar sehr einfach durch TypeDesigner und/oder TypeEditoren.
Ob es auch in 1.1 geht kann ich dir nicht sagen, da kennt sich TUFKAPL besser aus.
Dieses genaue Ziel würde sich aber einfach durch eine Komposition von den Instanzen als Eigenschaften einer weiteren Klasse sehr easy lösen lassen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#5

Re: Verwenden des PropertyGrids?

  Alt 10. Feb 2007, 20:35
Zitat von Elvis:
Zitat von Alexander:
Was würde ich nur ohne Dich machen
Wahrscheinlich würdest du kein .Net benutzen und somit auch keine Probleme mit DfN haben. Aber der Idee folge ich jetzt lieber nicht zu weit.
.NET wohl schon, aber wohl bei den Problemen noch mehr verzweifeln .

Zitat:
Was ich dir aber sagen kann ist, dass du praktisch alles im PG anpassen kannst und vieles sogar sehr einfach durch TypeDesigner und/oder TypeEditoren.
Ich habe hier gerade, was interessantes gefunden:
http://www.codeproject.com/csharp/wd...yGridUtils.asp
Bleibt nur noch die Frage, ob es .NET 1.1 tauglich ist . Werde ich morgen mal ausprobieren.

Zitat:
Dieses genaue Ziel würde sich aber einfach durch eine Komposition von den Instanzen als Eigenschaften einer weiteren Klasse sehr easy lösen lassen.
Schon, aber es sind stehts eine unterschiedliche Anzahl an Instanzen. Daher ist es wohl nicht so einfach möglich. Oder habe ich die falsch verstanden?
Alexander
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#6

Re: Verwenden des PropertyGrids?

  Alt 11. Feb 2007, 11:46
Sooo. Ich probiere schon den ganzen Morgen am CustomPropertyGrid von CodeProject.com herum.
Leider kann ich die DisplayName Attribute noch immer nicht ändern .

Irgendetwas scheine ich falsch zu machen. Dabei dachte ich, dass ich den C# Code auf CodeProject vollständig übersetzt habe.

Hier mal mein Code:
Delphi-Quellcode:
  TSetting = class
  private
    FVarName : String;
    FDefaultText : String;
    FDefaultTextDisplayName : String;
    FTitle : String;
    FDescription : String;
    FValueLabel : String; // Im SQL-Text enthaltender Text

    procedure setVarName(s : String);
    function getVarName() : String;
    procedure setDefaultText(s : String);
    function getDefaultText() : String;
    procedure setTitle(s : String);
    function getTitle() : String;
    procedure setDescription(s : String);
    function getDescription() : String;
    procedure setValueLabel(s : String);
    function getValueLabel() : String;

    function getDefaultTextDisplayName() : String;
    procedure setDefaultTextDisplayName(s : String);

  published
    [Description('VarName'), System.ComponentModel.Browsable(true), DisplayName('Hallo')]
    property VarName : String read getVarName write setVarName;
//////////////////////////////////////
    [PropertyAttributesProvider('DynamicPropertyAttributesProvider'), System.ComponentModel.Browsable(true)]
    property DefaultText : String read getDefaultText write setDefaultText;

    [System.ComponentModel.Browsable(true)]
    property defaultTextDisplayName : String read getDefaultTextDisplayName write setDefaultTextDisplayName;
////////////////////////////////////////
    [System.ComponentModel.Browsable(true)]
    property Title : String read getTitle write setTitle;

    [System.ComponentModel.Browsable(true)]
    property Description : String read getDescription write setDescription;

    [System.ComponentModel.Browsable(true)]
    property ValueLabel : String read getValueLabel write setValueLabel;
  public
    procedure DynamicPropertyAttributesProvider(var attributes : PropertyAttributes);
  end;
{...}
procedure TSetting.DynamicPropertyAttributesProvider(var attributes : PropertyAttributes);
begin
  attributes.DisplayName := defaultTextDisplayName;
// attributes.IsReadOnly := dynamicPropertyIsReadOnly;
// attributes.IsBrowsable := dynamicPropertyIsVisible;
end;


{...}
{PropertyGrid erzeugen usw.}
constructor TSqlVarFrm.Create;
begin
  inherited Create;
  InitializeComponent;
  propertyGrid := FormsUtils.CustomPropertyGrid.Create;
 // statusBarEx := FormsUtils.StatusBarEx.Create;

  propertyGrid.CommandsVisibleIfAvailable := true;
  propertyGrid.ExpandOnTab := false;
  propertyGrid.LargeButtons := false;
  propertyGrid.LineColor := System.Drawing.SystemColors.ScrollBar;
  propertyGrid.Location := System.Drawing.Point.Create(0, 48);
  propertyGrid.Name := 'propertyGrid';
  propertyGrid.Size := System.Drawing.Size.Create(456, 272);
  propertyGrid.TabIndex := 3;
  propertyGrid.Text := 'customPropertyGrid1';
  propertyGrid.ViewBackColor := System.Drawing.SystemColors.Window;
  propertyGrid.ViewForeColor := System.Drawing.SystemColors.WindowText;
  propertyGrid.Dock := DockStyle.Fill;
  propertyGrid.Parent := self;

  FSqlVar := TSetting.Create;
  FSqlVar.VarName := 'Var';
  FSqlVar.DefaultText := 'Default';
  FSqlVar.Title := 'Titel';
  FSqlVar.Description := 'Desc';
  FSqlVar.ValueLabel := 'Label';
  FSqlVar.defaultTextDisplayName := 'Hallo Welt';

  PropertyGrid.SelectedObject := FSqlVar;
  propertyGrid.Refresh;
defaultTextDisplayName taucht zwar im PropertyGrid auf. Ich setze es ja im Code direkt auf einen Namen. Dann sollte dieser ja eigentlich als DisplayName von DefaultText auch direkt übernommen werden. Wenn ich das (wie in der Demo des Projektes auf CodeProject.com) zur Laufzeit verändere, dann klappt es auch nicht (auch mit einem Refresh danach nicht).

Ein direktes DisplayName-Attribut im Code in der TSettings-Klasse zeigt im Übrigen auch keine Wirkung.

Was habe ich nun wieder falsch gemacht? .
Wahrscheinlich läuft ja beim PropertyAttributesProvider irgendwas falsch (an der markierten Stelle im Code).
Oder doch wieder ne Delphi Eigenart?
Alexander
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:15 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