Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Ampel komponete (https://www.delphipraxis.net/158392-ampel-komponete.html)

fox67 15. Feb 2011 17:49

Ampel komponete
 
Hallo ich würde gerne eine ampel komponete erstellen. bis jetzt habe ich noch nie eigene komponenten erstellt, deshalb habe ich mir von allenmöglichen seiten tutorials angeschaut doch keins hatt mir so wirklich geholfen.
Delphi-Quellcode:
unit GraphicControl1;

interface

uses
  SysUtils, Classes, Controls;

type
  TAmpel = class(TGraphicControl)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Additional', [TAmpel]);
end;

end.
Wo muß hier die paint routine rein
Kann ich in die paint routine diesen quelltext eingeben?
Delphi-Quellcode:
canvas.pen.color := clwindowframe;
canvas.brush.color := clwindowframe;
canvas.rectangle(0,0,TAmbel.hight,TAmpel.width);//Ampelkasten
canvas.pen.color := clblack;
canvas.brush.color := clblack;
canvas.circle(5,40,35,35); //Ampelleuchten im auszustand
canvas.circle(5,80,35,35);
canvas.circle(5,120,35,35);
Die ampel sollte im objekinspektor 2 eigenschaften haben
einmal wo man die ampelphasen auswählen kann und einmal bei dem man die ausschält und sie dann gelb blinkt. wie kann ich dass alles verwirklichen?

DeddyH 15. Feb 2011 18:01

AW: Ampel komponete
 
Die Paint-Methode sollte im protected-Abschnitt überschrieben werden. Eigenschaften, die im OI erscheinen sollen, gehören in den published-Abschnitt. Und den Code kannst Du natürlich ins Paint schreiben.

fox67 15. Feb 2011 18:04

AW: Ampel komponete
 
danke für deine antwort

fox67 15. Feb 2011 18:33

AW: Ampel komponete
 
Wie kriege ich es jetzt hin das man im objektinspector die verschiedenen phasen auswählen kann?

WM_CLOSE 15. Feb 2011 18:59

AW: Ampel komponete
 
Mit einer Enumeration:
Du deklarierst über deiner Klasse den Typ
Delphi-Quellcode:
type
  TAmpelphase=(apErstePhase, apZweitePhase, ..);
dann ein published-property in deiner Klasse:
Delphi-Quellcode:
property Ampelphase: TAmpelphase read FAmpelphase write SetAmpelphase; //die Setter-methode kannst du auch weglassen
Natürlich musst du noch FAmpelphase in private deklarieren, sowie die Setter-Methode
Beides sollte auch die Klassenvervollständigung Strg-Shift-C machen.

Die Setter Methode:
Delphi-Quellcode:
procedure SetAmpelphase(const value: TAmpelphase);

fox67 15. Feb 2011 20:34

AW: Ampel komponete
 
und was mus jetzt in die setter methode kann ich da jetzt die einzelnen ampelphasen zeichnen lassen?

jfheins 15. Feb 2011 20:38

AW: Ampel komponete
 
In die Settermethode kommt
1. Setzen des privaten Felds
2. ein Invalidate()
Letzteres bewirkt - im Gegensatz zu einem Paint() Aufruf - dass das Control nciht sofort neu gezeichnet wird, sondern nur wenn wieder "Zeit ist" ;)

David Martens 16. Feb 2011 09:03

AW: Ampel komponete
 
Du mußt dann natürlich auch in der Paint Methode die Phasen abfragen und entsprechend die Kreise zeichnen. Und damit das beim Erstellen der Komponente auch wohldefiniert ist muß beim Create die Phase gesetzt sein, oder du gibst der Property ein default.

Deep-Sea 16. Feb 2011 11:00

AW: Ampel komponete
 
Zitat:

Zitat von jfheins (Beitrag 1081999)
In die Settermethode kommt [...]

Als erstes sollte man dazu noch abfragen, ob der neue Wert auch wirklich anders ist als der aktuelle, damit man nicht sinnlos neu zeichnen muss. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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