![]() |
Eigene Komponente......
Hi.....
so........dann mal meine Fragen! Also ich möchte für mein Projekt ne eigene Komponente erstellen. Das ist ein rechteckiges Panel......mit nem runden Shape drauf. Wenn man solche drei untereinander stellt....dann siehts wie ne ampel aus......nur zum mal vorstellen! Des hab ich jetzt mal alles in ne eigene klasse gemacht, hat soweit auch ganz gut geklappt. Jetzt möchte ich eine Eigenschaft Farbe haben, wo ich zwischen meinen sechs vorgegebenen Farben auswählen kann. Aber irgendwie bekomm ich des mit der property nicht mehr hin! Ich post mal meinen Quelltext......aber net erschrecken.......
Code:
Ehrlich gesagt peil ich schon teilweise selber net ganz durch.
unit ZeichneU;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TFarbe = TColor; TZeichnePanel = class(TPanel) protected Licht: TShape; fColor: TColor; procedure setColor(c: TColor); procedure myOnResize(Sender: TObject); public constructor Create(AOwner: TComponent); override; procedure Paint; override; published property Farbe: TColor read fcolor write setcolor; end; // of TZeichnePanel procedure Register; var rot: TFarbe; gruen: TFarbe; blau: TFarbe; gelb: TFarbe; rosa: TFarbe; tuerkis: TFarbe; implementation constructor TZeichnePanel.Create(AOwner: TComponent); begin inherited Create(AOwner); Width := 30; Height := 30; Top := 100; Left := 100; setcolor(fcolor); Licht := TShape.Create(Self); //Shape,Kreis Licht.Parent := Self; Licht.Width := 29; Licht.Height := 29; Licht.Shape := stCircle; Licht.Top := 1; Licht.Left := 1; Licht.Brush.Color := fcolor; OnResize := myOnResize; end; procedure TZeichnePanel.Paint; begin canvas.Brush.Color := clsilver; canvas.Pen.color := clblack; canvas.rectangle(0,0,50,50); end; procedure TZeichnePanel.setColor(c: TColor); var x:integer; begin if c = rot then fcolor := clred; if c = gruen then fcolor := cllime; if c = gelb then fcolor := clyellow; if c = blau then fcolor := clblue; if c = rosa then fcolor := clfuchsia; if c = tuerkis then fcolor := clteal; Licht := TShape.Create(Self); //Shape,Kreis //Licht.Parent := Self; Licht.Brush.Color := fcolor; Randomize; //Zufall für Farben!! x := random(6); case x of 0: fcolor := clred; 1: fcolor := cllime; 2: fcolor := clblue; 3: fcolor := clyellow; 4: fcolor := clfuchsia; 5: fcolor := clteal; end; end; procedure TZeichnePanel.myOnResize(Sender: TObject); begin paint; end; Procedure Register; begin RegisterComponents('Standard',[TZeichnePanel]); end; end. Ehrlich gesagt peil ich schon teilweise selber net ganz durch. Steht teilweise absoluter schwachsinn drin..... Steht teilweise absoluter schwachsinn drin.....weiß ich auch selber, aber so macht er wenigstens irgendwas Es geht um die TFarbe.......hab schon alles mögliche ausprobiert. Habs auch scho mit record probiert bin aber auch net weit gekommen. Ich möcht also nur......das wenn ich die Komponente auf meine Oberfläche ziehe....... ich unter Farbe meine sechs zur auswahl habe.....und das SHAPE auch dementsprechend die farbe hat!? Hoffe mal das jmd. wenigstens geblickt hat was ich will! Na denn..........kann mir "nixblicker" jemand helfe? |
Re: Eigene Komponente......
Servus Valeri !
Ehrlich gesagt, hab ich nicht verstanden was du möchtest ? Was willst du mit der property verändern ? die Farbe der Ampel, oder die "Random-Farben" ? falls letzteres, so brauchst du 6 propertis, eine pro Farbe ! |
Re: Eigene Komponente......
Du versuchst viel zu viel auf einmal. Ein Panel, ein Shape, die Farben etc. Und das alles mit einer neuen Komponente und möglichst im OI einstellbar. Auf Anhieb sehe ich zwar keinen Fehler, aber ich würde zuerst mal versuchen NUR das Panel einzufärben und DANACH Schritt für Schritt weiterzumachen.
|
Re: Eigene Komponente......
Hallo Vale,
es sieht so aus, als ob Du Deine erste Komponente entwickeln möchtest. In deinem Source sind soviele Ungereimtheiten, dass Dir nur raten kann: Arbeite ein Komponententutorial durch. ![]() |
Re: Eigene Komponente......
Hi.....
erstmal danke für die Tipps! @MrKnogge Ich möchte mit der Property Farbe, das Shape auf meinem Panel umfärben. Und zwar sollen da die sechs Farben zur auswahl stehn, die ich ausgewählt habe. Müsste eigentlich so gehn, habs scho so ähnlich gemacht, nur habe ich die Farbe dann mit ner Combobox ausgewählt, jetzt möcht ich es aber direkt als Eigenschaft ansprechen können. Sollt ichs dann vielleicht doch lieber so machen....
Code:
type
TFarbe = record rot: TColor; blau: TColor; gelb: TColor; .... end; ....oder hat jemand nen besseren Vorschlag? |
Re: Eigene Komponente......
Also am einfachsten kann man einen Enumtyp für den OI verwenden:
Delphi-Quellcode:
type
TFarbe = (fbRot, fbGruen, fbBlau, fbGelb, fbRosa, fbTuerkis); const Farben : array[TFarbe] Of TColor = (clRed, clLime, clBlue, clYellow, clFuchsia, clTeal); TZeichnePanel = class(TPanel) protected Licht: TShape; fFarbe: TFarbe; fColor: TColor; procedure setColor(c: TFarbe); procedure myOnResize(Sender: TObject); public constructor Create(AOwner: TComponent); override; procedure Paint; override; published property Farbe: TFarbe read fFarbe write setcolor; end; // of TZeichnePanel //... procedure TZeichnePanel.setColor(c: TFarbe); begin fFarbe := c; fcolor := Farben[c]; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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 by Thomas Breitkreuz