AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene Komponente von TCustomControl > Eigenschaftseditor!
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente von TCustomControl > Eigenschaftseditor!

Ein Thema von cherry · begonnen am 11. Apr 2006 · letzter Beitrag vom 9. Aug 2011
 
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

Re: Eigene Komponente von TCustomControl > Eigenschaftsed

  Alt 18. Apr 2006, 09:05
Zitat von cherry:
Das ist ja einfach wiedermal genial...
Danke
Zitat von PeteSky:
Wirklich tolles Beispiel.
Danke

Zitat von PeteSky:
Aber wie kann ich in meiner eigenen Komponente den StandardPropertyEditor benutzen?
So das neben meinen Strings im OI dei drei Punkte erscheinen [...] ?
Ich verstehe diese Frage nicht ganz.

Die StandardPropertyEditoren werden automatisch verwendet.
Ein Eigenschaft vom Typ TColor bekommt automatisch die [...] um den Farbdialog aufzurufen.
Es gibt auch PropertyEditoren die z.B. an allen eigenschaften vom Typ string hängen und den Namen Caption tragen. Diese sind aber keine StandardPropertyEditoren, sondern einzeln installiert (und vorher programmiert .-)) werden.

Die Drei Punkte bekommt man wenn man in dem Property Editor die GetAttributes Methode implementiert und im ResultSet paDialog zurückgibt. (siehe obiges Beispiel von mir)

Wird der [...] Button gedrückt, so wird die (hoffentlich implementierte) Edit Methode aufgerufen.

Das wars eigentlich.

Hier ein kleines Beispiel, das der Tag Eigenschaft aller Komponenten einen PropertyEditor zuweist. Zusätzlich habe ich noch gezeigt, wie einfach man auch auf mehrere markierte Komponenten reagieren kann.
Also einfach mal instrallieren und ein TLabel, TEdit und TButton aufs Form alle 3 Markieren und dann in der Tag Eigenschaft auf den [...] Button klicken.
In der EditBox erscheint dann der Text:
Zitat:
Folgende Eigenschaften setzen:
Label1.Tag
Edit1.Tag
Button1.Tag
Da auch die Anzeige des Eigenschaftsnamens zur Laufzeit ermittelt wird, kann der PropertyEditor auch anderen Integer Eigenschaften zugewiesen werden.
Delphi-Quellcode:
procedure Register;
begin
  // damit ist der PropertyEditor allen Eingenschaften vom Typ Integer zugewiesen
  RegisterPropertyEditor(TypeInfo(Integer), nil, '', TmyIntegerPropEditor);
end;
Delphi-Quellcode:
///////////////////////////////////////////////////////////////////////////////
// PropertyEditor für Integer
//
// Beispielprogramm zur Komponentenerstellung
//
// Folgende Dinge sind zu sehen:
// - PropertyEditor für Tag Eigenschaft aller Komponenten
// - auf mehrere gleichzeitig markierte Komponenten reagieren :-)
//
// Dieser Quelltext liegt auch auf [url]www.delphipraxis.net[/url]
// ( [url]http://www.delphipraxis.net/topic80394_eigene+komponente+von+tcustomcontrol+eigenschaftseditor.html[/url] )
//
///////////////////////////////////////////////////////////////////////////////
// Das Programm ist Freeware und darf beliebig benutzt und erweitert werden.
// Es wäre nett, wenn dann auch der geänderte Quelltext in obige URL-Adresse
// gesendet wird. Dann haben alle was davon.
// Es wäre auch nett wenn mein (unser) Name in den Dateien enthalten bleibt.
// Das Programm wird von Ihnen auf eigenes Risiko eingesetzt. Ich übernehme
// keine Haftung für Schäden die durch das Programm oder die Benutzung des
// Programms entstanden sind bzw. entstehen.
///////////////////////////////////////////////////////////////////////////////
// (C) 2005, MaBuSE, member of DelphiPraxis.net
///////////////////////////////////////////////////////////////////////////////
// ReleaseNotes:
// v1.0 - 18.04.2006 - MaBuSE: Erste Version war in 5 min programmiert
///////////////////////////////////////////////////////////////////////////////
unit integer_dsgn;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DesignIntf, DesignEditors;

type
  TmyIntegerPropEditor = class(TIntegerProperty)
  public
    // hier wird das Formular aufgerufen
    procedure Edit; override;
    // hier wird bestimmt, die das Property im Objektinspektor angezeigt wird
    function GetAttributes: TPropertyAttributes; override;
  end;

procedure Register;

implementation

procedure Register;
begin
  // Der PropertyEditor TmyIntegerPropEditor (4. Parameter)
  // wird für alle Properties:
  // - vom Typ Integer (1. Parameter)
  // - für alle Komponenten (2. Parameter)
  // - mit dem Namen 'Tag'
  // in der Delphi IDE verwendet.
  // Wenn als 2. Parameter nil übergeben wird, dann wird der PropertyEditor von
  // allen Komponenten verwendet.
  // Wenn als 3. Parameter '' übergeben wird, dann wird der PropertyEditor von
  // allen Eigenschaften des Typs Integer verwendet.
  RegisterPropertyEditor(TypeInfo(Integer), nil, 'Tag', TmyIntegerPropEditor);
end;

{ TmyIntegerPropEditor }

procedure TmyIntegerPropEditor.Edit;
var
  i: Integer;
  s: string;
  cc: string;
begin
  inherited;
  // Wenn gleichzeitig mehrere Komponenten markiert sind,
  // alle Komponenten im Prompt Text des Eingabedialogs anzeigen
  if PropCount > 1 then
  begin
    cc := 'Folgende Eigenschaften setzen:'+#13;
  end
  else
  begin
    cc := 'Folgende Eigenschaft setzen: ';
  end;
  
  for i := 0 to PropCount - 1 do
  begin
    // Für jede markierte Komponente
    cc := cc + GetComponent(i).GetNamePath + '.' + GetName + #13;
  end;

  // aktuellen Wert in String s übernehmen
  s := IntToStr(GetOrdValue);

  // den EingabeDialog mit s aufrufen
  if InputQuery('myIntegerPropertyEditor', cc, s) then
  begin
    // s in Integer umwandeln und Eigenschaft setzen
    SetOrdValue(StrToInt(s));
  end;
end;

function TmyIntegerPropEditor.GetAttributes: TPropertyAttributes;
begin
  // [...] Button anzeigen
  Result := inherited GetAttributes + [paDialog];
end;

end.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
 


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 05:14 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