![]() |
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:
Wo muß hier die paint routine rein
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. Kann ich in die paint routine diesen quelltext eingeben?
Delphi-Quellcode:
Die ampel sollte im objekinspektor 2 eigenschaften haben
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); 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? |
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.
|
AW: Ampel komponete
danke für deine antwort
|
AW: Ampel komponete
Wie kriege ich es jetzt hin das man im objektinspector die verschiedenen phasen auswählen kann?
|
AW: Ampel komponete
Mit einer Enumeration:
Du deklarierst über deiner Klasse den Typ
Delphi-Quellcode:
dann ein published-property in deiner Klasse:
type
TAmpelphase=(apErstePhase, apZweitePhase, ..);
Delphi-Quellcode:
Natürlich musst du noch FAmpelphase in private deklarieren, sowie die Setter-Methode
property Ampelphase: TAmpelphase read FAmpelphase write SetAmpelphase; //die Setter-methode kannst du auch weglassen
Beides sollte auch die Klassenvervollständigung Strg-Shift-C machen. Die Setter Methode:
Delphi-Quellcode:
procedure SetAmpelphase(const value: TAmpelphase);
|
AW: Ampel komponete
und was mus jetzt in die setter methode kann ich da jetzt die einzelnen ampelphasen zeichnen lassen?
|
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" ;) |
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.
|
AW: Ampel komponete
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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