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