Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

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

Komponente erstellen (TMyRadioGroup)

  Alt 31. Mär 2014, 13:47
Delphi-Version: XE
Hallo,
ich habe folgende PN bekommen:
Zitat:
Hallo aus Aachen,
ich brauche eine erweiterte Komponente in Delphi - habe aber leider nicht DIE Ahnung.
Ziel: "TRadioGroup" mit zusätzlich einem "TButton" (z.B. ObenLinks im Rahmen) zum "un-checken" aller "RadioButtons".
Schriebest Sie/Du so etwas als AuftragsArbeit? ...die Kosten?
MfG
...
Da ich Fragen, die ins Forum gehören nicht per PN beantworte, hier nun für alle

Das Problem ist so klein, das es keine Auftragsprogrammierung wert ist.
Du leitest eine Komponente (z.B. TMyRadioGroup) von TRadioGroup ab und erzeugst im Constructor einen Button oder was Du auch immer magst. Dann nur noch die Eigenschaften entsprechend initialisieren und fertig.
Im Destructor wird der wieder entfernt.

Wenn Du auch von "außen" also dem Objekt-Inspektor auf die Eigenschaften des Buttons zugreifen möchtest, so reicht dazu eine Zeile property name: ObjektTyp read Variable; So könnte es z.B. aussehen:
Delphi-Quellcode:
unit MyRadioGroup;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, ExtCtrls;

type
  TMyRadioGroup = class(TRadioGroup)
  private
    FClearButton: TButton;
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure ClearButtonClick(Sender: TObject);
  published
    // Eigenschaft im Objektinspektor
    property ClearButton: TButton read FClearButton;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TMyRadioGroup]);
end;

{ TMyRadioGroup }

procedure TMyRadioGroup.ClearButtonClick(Sender: TObject);
begin
  // Auswahl Löschen
  ItemIndex := -1;
end;

constructor TMyRadioGroup.Create(AOwner: TComponent);
begin
  inherited;
  // ClearButton anlegen und initialisieren
  FClearButton := TButton.Create(Self);
  FClearButton.Name := 'ClearButton';
  FClearButton.Parent := Self;
  FClearButton.Caption := '-';
  FClearButton.Width := 14;
  FClearButton.Height := 14;
  FClearButton.Top := 0;
  FClearButton.Left := Width - FClearButton.Width;
  FClearButton.Anchors := [akTop, akRight];
  FClearButton.OnClick := ClearButtonClick;
end;

destructor TMyRadioGroup.Destroy;
begin
  // ClearButton Freigeben
  FClearButton.Free;
  FClearButton := nil;

  inherited;
end;

end.
Wie wird nun so eine Kompoente installiert?
Da zu erstellen wir uns ein Package (z.B. MyComponents.dpk) in dem wir die Komponente (z.B. MyRadioGroup.pas) einbinden.

So könnte es z.B. aussehen:
Delphi-Quellcode:
package MyComponents;

{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'Package zum Einbinden meiner Komponenten (TMyRadioGroup)'}
{$IMPLICITBUILD ON}

requires
  rtl,
  vcl;

contains
  MyRadioGroup in 'MyRadioGroup.pas';

end.
Die beiden Dateien habe ich Dir nochmal als Anhang zur Verfügung gestellt.
In ein Verzeichnis speichern.
*.dpk aufrufen.
Im Projektmanager auf MyComponents.bpl rechtsklicken und "Installieren" wählen.
Es wurd nun kompiliert und installiert.
Nun ist die Komponente im der Komponentenpalette unter Beispiele zu finden und kann verwendet werden.

ABER: Bevor das Projekt, das die Komponente verwendet kompiliert werden kann muss der Suchspfad in den Optionen um das Verzeichnis mit den *.dpk und *.pas oder *.dcu, *.dpc und *.bpl Dateien erweitert werden.
Sonst gibt es nur die Fehlermeldung, dass er die Datei MyRadioGroup nciht gefunden hat.

viel Spaß.

Ach ja zum Thema:
Code:
Schriebest Sie/Du so etwas als AuftragsArbeit? ...die Kosten?
Falls wir uns mal auf den Delphi-Tagen sehen, kannst du mir ja eine Cola ausgeben

MaBuSE
Angehängte Dateien
Dateityp: zip MyRadioGroup.zip (82,5 KB, 19x aufgerufen)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat