Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Eigene Komponente...... (https://www.delphipraxis.net/15384-eigene-komponente.html)

Vale 27. Jan 2004 16:48


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:
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.....
Ehrlich gesagt peil ich schon teilweise selber net ganz durch.
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?

MrKnogge 27. Jan 2004 17:19

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 !

Hansa 27. Jan 2004 17:24

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.

Jens Schumann 27. Jan 2004 17:32

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.
Komponententutorial

Vale 27. Jan 2004 21:37

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?

scp 27. Jan 2004 21:49

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 04:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz