![]() |
Neue Komponente entwickeln
Heute ist der Tag :)
Ich möchte erstmals eine neue Komponente entwickeln.. bis jetzt habe ich einige neue Properties hinzugefügt. (Abgeleitet von TShape)
Delphi-Quellcode:
ich möchte jetzt, dass meine neue Eigenschaften im Objektinspektor unter einer gemeinsamen Kategorie,
private
FKK_Rechts : boolean; FKK_Links : boolean; FRM_KK_Rechts : boolean; FRM_KK_Links : boolean; FQuittierung : boolean; FFreigabe : boolean; FStoerung : boolean; FRechts: boolean; { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property KK_Rechts: boolean read FKK_Rechts write FKK_Rechts; property KK_Links: boolean read FKK_Links write FKK_Links; property RM_KK_Rechts: boolean read FRM_KK_Rechts write FRM_KK_Rechts; property RM_KK_Links: boolean read FRM_KK_links write FRM_KK_Rechts; property Quittierung: boolean read FQuittierung write FQuittierung; property Freigabe: boolean read FFreigabe write FFreigabe; property Stoerung: boolean read FStoerung write FStoerung; property Rechts: boolean read FRechts write FRechts; end; procedure Register; implementation procedure Register; begin RegisterComponents('SPS-Visualisierung', [TKlappkasten]); end; nennt man das so ? stehen... die Kategorie soll heissen "SPS" also dann im Objektinspektor SPS.KK_Rechts, SPS.KK_Links, usw... so ähnlich halt wie Pen.Color, Pen.Width, usw. Danke schon mal im Voraus, ich habe da bestimmt demnächst noch vieeeele Fragen :thumb: |
AW: Neue Komponente entwickeln
Mach doch eine Menge draus.
Delphi-Quellcode:
Was jetzt die einzelnen Booleans definieren ergibt sich dann dadurch, ob sie im Set enthalten sind.
type
TSPS = set of (<Deine Werte>); |
AW: Neue Komponente entwickeln
Jupp, der Enum wird einfacher sein.
Dafür gibt es einen Standard-PropertyEditor, der das wie einzelne Booleans (Checkboxen) im OI darstellt. Und bei Kategorie dachte ich erst an Kategorie. :roll: Objektinspektor > Kontextmenü > Anordnen > Nach Kategorie OpenToolsAPI: ![]() ![]() Pen ist eine Klasse, also eine Unterkomponente in deiner Hauptklasse. ![]() |
AW: Neue Komponente entwickeln
Gibt es mehr Infos zu deine Komponente? Was soll sie machen? Usw.
|
AW: Neue Komponente entwickeln
Liste der Anhänge anzeigen (Anzahl: 1)
Danke erstmal für Eure Antworten.
Es geht darum, eine Visualisierung für eine Anlagensteuerung zu entwickeln. Dazu habe ich mir überlegt, ich baue mir für die einzelnen Bestandteile, von jeder Art gibt es auch mehrere einzelne visuelle Komponenten... z.B. Silo, Förderband, Siebmaschine, Elevator usw... so ein Bildchen habe ich mir mal auf einer Form gebastelt...(Anhang) Dieses grafische/technische Element soll dann ein paar Eigenschaften haben, wie z.B. LeerMeldung, Vollmeldung (Die LEDS in dem Bildchen z.B. sollen dann verschiedene Farben zur Laufzeit erhalten. Ich möchte auch gerne die Größe des gesamten Bildchens zur Entwurfszeit verändern können, z.B. ungefähr an die masstabsgetreue Länge eines Förderbandes anpassen, oder die Höhe eines Elevators.. so ein Bildchen habe ich mir mal auf einer Form gebastelt...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); var edit1 : tedit; Silo: tshape; VollMelder: tshape; LeerMelder: tshape; begin Silo := tshape.create(self); with silo do begin Parent := form1; width := 90; height := 200; brush.color := clmoneygreen; shape := strectangle; visible := true; end; VollMelder := tshape.create(self); with Vollmelder do begin Parent := form1; width := 20; height := 20; top := 20; left := 35; brush.color := clred; shape := stCircle; visible := true; end; LeerMelder := tshape.create(self); with LeerMelder do begin Parent := form1; width := 20; height := 20; top := 160; left := 35; brush.color := clyellow; shape := stCircle; visible := true; end; with form1.canvas do begin moveto (0,200); lineto (45,270); lineto (90,200); lineto (0,200); brush.color := clmoneygreen; floodfill(50,210,clblack,fsborder); end; end; Kann ich das so ähnlich auf eine Komponente übertragen, so dass ich dann das ganze Bildchen auf der Form habe, wenn ich die Komponente neu aus der Tool-Palette auf die Form schiebe? Kann ich als Grundlage für die Vererbung ein Panel nehmen und dann die einzelnen Elemente auf das Panel packen? Oder muss ich das bei der Komponentenentwicklung komplett mit Canvas einzeln zeichnen? Dann auf eine Paintbox? Wovon leite ich das ab? TPanel, TPaintbox, Nehme ich dann TPanel oder TPaintbox als Container? Einfach gesagt, ich bräuchte mal ne grobe Anleitung wie man sowas am besten macht, ich sehe glaub ich vor lauter Bäumen den Wald nicht mehr:?: |
AW: Neue Komponente entwickeln
Als Container würd' ich ein TFrame nehmen.
Da kann man andere Komponenten nach Lust und Laune drauf plazieren und schon die Grundlogik drin implementieren. Für jedes separate "Teil", das Du dann auf Deinem Form brauchst, nimmst Du ein Frame und kannst dann die einzelnen Komponenten darauf entsprechend ansprechen. Zuerst machst Du Dir am Sinnvollsten für Silo, Förderband, Siebmaschine, Elevator usw ... jeweils ein Frame. Davon kannst Du dann beliebig viele und beliebige Kombinationen auf dem Formular / den Formularen anordenen. |
AW: Neue Komponente entwickeln
Also ich hatte es mir so vorgestellt, dass Silo, Elevator, Förderband jeweils einzelne Komponenten mit Eigenschaften und Methoden werden.
Also TElevator, TSilo, FFoerderband, sollen also jeweils visuelle Komponenten in der Tool-Palette werden...wie man das dann compiliert und installiert, weiß ich. Und die visuelle Komponente TSilo soll also auch zur Entwurfszeit so aussehen, wie auf dem Bild-Anhang.. |
AW: Neue Komponente entwickeln
Eine wichtige Frage: Kommst Du immer mit rechteckigen, nicht transparenten Controls aus?
Dann würde ich einfach von Panels ableiten und deren Paint überschreiben. Dann kannst Du Deine Controls beliebig zeichnen und ja nach Status des Datenbestandes z.B. LED-Farben steuern. Du könntest einem sichtbaren TvSilo als Property ein Datenobjekt TdSilo zuweisen, dessen Daten sich das Control dann bedienen kann. Ist kein TdSilo zugewiesen, zeichnet sich das Control einfach nur grau. Man könnte das Ganze auch noch weiter treiben. Du könntest ein TdBaustelle haben, die z.B. eine Liste von TdSilos und anderen Objekten beinhaltet. Eine TvBaustelle (großes Panel im Formular) könnte die TdBaustelle benutzen und einfach alle dort vorhandenen Silos und anderen Objekte zeichnen bzw. für jedes Datenobjekt ein passendes visuelles Objekt erzeugen. Dazu müssen die Positionen der Objekte allerdings mit in den Datenobjekten gespeichert sein. Hinzufügungen und Löschungen aus der TdBaustelle.SiloListe müssen ein Neuzeichnen der TvBaustelle veranlassen. ... nur als Überlegung eines möglichen Ansatzes PS: Welches Delphi hast Du? Schreib das mal mit ins Profil. |
AW: Neue Komponente entwickeln
Danke für Eure schnellen Antworten...
ich habe nun mal etwas probiert. Aber ich glaube, ich verstehe es noch nicht mit inherited, constructor und so.. Habe eine Komponente erstellt, compiliert und installiert...beim Compilieren kommt auch kein Fehler. Nun habe ich gedacht, wenn ich die Komponente auf eine Form ziehe, ändert er mir wenigstens die caption von dem Panel, aber nix ;-) :( Hier der Code
Delphi-Quellcode:
unit Silo_aus_Panel; interface uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, graphics; type TSilo_aus_Panel = class(TPanel) private { Private-Deklarationen } //Zugriff nur innerhalb der Komponente protected { Protected-Deklarationen } //Deklarationen sichtbar in innerhalb der unit und abgeleiteten Klassen public { Public-Deklarationen } //Steht nur zur Laufzeit zur Verfügung //Laufzeit Schnittstelle published { Published-Deklarationen } //kommt in Objektinspektor //steht auch im Design-Modus zur Vergügung //keine Schreibgeschützten Eigenschaft reinstellen constructor create; end; procedure Register; implementation constructor Tsilo_aus_Panel.create; var Silo: tshape; VollMelder: tshape; LeerMelder: tshape; begin **** das folgende wird nicht ausgeführt ***** ?????? inherited create(self); caption := 'Neue Caption!'; Silo := tshape.create(self); with silo do begin //Parent := form1; ???? width := 90; height := 200; brush.color := clmoneygreen; shape := strectangle; visible := true; end; end; procedure Register; begin RegisterComponents('SPS', [TSilo_aus_Panel]); end; |
AW: Neue Komponente entwickeln
Delphi-Quellcode:
constructor Create(AOwner: TComponent); override;
destructor Destroy; override; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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