![]() |
Delphi-Version: XE
Komponente erstellen (TMyRadioGroup)
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe folgende PN bekommen: Zitat:
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
Delphi-Quellcode:
So könnte es z.B. aussehen:
property name: ObjektTyp read Variable;
Delphi-Quellcode:
Wie wird nun so eine Kompoente installiert?
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. 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:
Die beiden Dateien habe ich Dir nochmal als Anhang zur Verfügung gestellt.
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. 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:
Falls wir uns mal auf den Delphi-Tagen sehen, kannst du mir ja eine Cola ausgeben :thumb:
Schriebest Sie/Du so etwas als AuftragsArbeit? ...die Kosten?
MaBuSE |
AW: Komponente erstellen (TMyRadioGroup)
Das dürfte nicht nur mit Delphi XE sondern ab Delphi 2 funktionieren.
|
AW: Komponente erstellen (TMyRadioGroup)
Nur weil du Spaß an etwas hast, bedeutet dies nicht, dass es unmoralisch ist dafür einen Obulus zu verlangen. Probleme sindgroß/klein, jedoch immer nur im Auge des Betrachters. Grade wenn etwas für dich kein Problem ist, stell eine Rechnung :D
Das waren jetzt vielleicht 3 Stunden Delphi und Artikel schönen :D Nichts gegen opensource aber ein bisschen Geld für die richtigen Menschen ist wirklich keine Schande... edit: funktioniert übrigens ab Delphi 2 |
AW: Komponente erstellen (TMyRadioGroup)
Zitat:
Zitat:
Ich habe schon viel Wissen und Problemlösungen aus der DP entnommen (auch für die Firma), so dass mein Chef mir erlaubt auch ab und zu etwas Zeit zu investieren um anderen zu Helfen. Ich werde hier schon gut bezahlt, also warum soll ich dann wegen so einer Kleinigkeit Geld verlangen? Das war auch nicht als Auftragsarbeit zu verstehen, sondern als Hilfestellung um die Komponente selbst weiter zu entwickeln. Das ist auch der Grund, warum ich auf solche PNs nicht per PN, sondern öffentlich antworte. Das mache ich schon immer so. Ich entferne nur den Hinweis (Namen) auf den Fragesteller. Der Fragesteller bekommt dann eine PN mit dem Link auf den Artikel. So haben alle etwas davon. Viele Grüße ps: Abgesehen davon darf er mir ja auf den Delphi Tagen eine Cola ausgeben :stupid: pps: ... und nochmal 10 min um deine Nachicht zu beantworten. Du darfst mir also auch auf den Delphi Tagen eine Cola ausgeben :P |
AW: Komponente erstellen (TMyRadioGroup)
Ich geb uns auf den Delphi-Tagen eine Cola aus :)
|
AW: Komponente erstellen (TMyRadioGroup)
Zitat:
Wenn das OnClick via Event "ordentlich" extrern verfügbar sein soll, dann braucht man noch ein OnClickEvent in der Hauptkomponente, welches z.B. im ClearButtonClick aufgerufen wird. Wenn der Button über den OI beinflussbar sein soll (z.B. Ändern der Caption), dann muß diese Eigenschaft entweder ebenfalls als Property in die Hauptkomponente, wo die Getter und Setter den Wert dann an die Subkomponente weiterreicht (so kann man leicht und geziehlt nur einige Eigenschaften freigeben), oder man muß dem OI sagen, daß er diese Komponente, welche er in dem Property vorfindet, ebenfalls verwalten soll (z.B. SetSubComponent). |
AW: Komponente erstellen (TMyRadioGroup)
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Delphi-Quellcode:
.
property ClearButton: TButton read FClearButton;
Aber diese eine Zeile ist der einfachste Weg die Eigenschaften des Buttons zu ändern. z.B. Caption Zitat:
mit der Zeile
Delphi-Quellcode:
wird eine Eigenschaft ClearButton erzeugt. Diese enthält alle Eigenschaften des Buttons. Man kann sie mit dem + vor der Eigenschaft aufklappen. (siehe Screenshots im Anhang)
property ClearButton: TButton read FClearButton;
Das ist der schnellste Weg alle Eigenschaften zur Verfügung zu stellen. Sicherlich nicht der beste, aber ein möglicher. Wenn Du verhindern willst, z.B.
Delphi-Quellcode:
aufzurufen, kommst Du um "deinen" Weg nicht herum.
MyRadioGroup1.ClearButton.Free;
Aber dann hätte ich mehr als 10 Min. für das Beispiel gebraucht. Wie das geht habe ich ja schon im Forum geschrieben: ![]() Zitat:
Im Moment ist das OnClick Ereignis vorbelegt. Um es zu ändern müsste man im Quellcode z.B. folgendes schreiben:
Delphi-Quellcode:
...
MyRadioGroup.ClearButton.OnClick := MeineNeueOnClickMethode; ... |
AW: Komponente erstellen (TMyRadioGroup)
Zitat:
So sollte es aussehen: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 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