Autor Beitrag
supersass1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 18.02.08 18:17 
Hallo,

ich habe mir vorgenommen eine Ampel zu basteln, als Obejkt-orientierte Delphi aufgabe.

Ich habe 4 units, das reine Fesnter (AmpelGUI), eine uZentrale, uAmpel, uLampe.

Es gibt 2 Ampeln, die ienen einspurigen Verkehr regeln sollen, im Prinzip bin ich fertig, nur wenn er in uLampe ist, und die Prozedur an; aufruft, weiß ich nicht, wie ich ShpXXX.Brush.Color (habe mehrere Shapes) anmalen kann, da dort immer steht undefinierter Bezeichner

Was kann ich tun, habt ihr eine Idee?

Projekt liegt im Anhang, viele liebe Grüßed


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 18.02.2008 um 18:24
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 18.02.08 19:13 
Nun ja, du müsstest beim Erzeugen eines Ampel-Objekts und der dazugehörigen Farben das bzw. die dazugehörigen Objekte an den Konstruktor übergeben und in den Objekten speichern.
Dann kannst du später einfach darauf zugreifen.

Dann ist mir noch ein kleiner Fehler aufgefallen:
ausblenden Delphi-Quelltext
1:
if geklickt = false then					
Richtig wäre:
ausblenden Delphi-Quelltext
1:
if not geklickt then					
Genauer wird das hier erklärt:
www.delphi-treff.de/...olean-werten/page/4/
supersass1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 18.02.08 21:32 
ja danke dir schonmal, theoretisch ist mir das klar, aber wie kann ich das machen?

ich kann in der uLampe doch nicht einfach schreiben:
ShpRot1.Brush.Color := Farbe... :?:



//Edit1

Ich könnte in der uZentrale alle Shapes unter dem Typen TZentrale speichern, ungefähr so:
ausblenden Delphi-Quelltext
1:
ShpRot1: TShape;					


Und dann in der HaupUnit (AmpelGUI)
ausblenden Delphi-Quelltext
1:
Zentrale.ShpRot1 := ShpRot1					

setzen, doch nun müsst ich das ganz nochmal für uAmpel und uLampe machen, das ist ziemlich umständlich, geht das nicht schöner?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 18.02.08 22:05 
Wie gesagt, ich würde das per Parameter im Konstruktor machen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
constructor TAmpel.Create(uRot, uGelb, uGruen: TShape);
begin
  inherited create;
  RoteLampe := TLampe.Create(uRot, clRed);
  GelbeLampe := TLampe.Create(uGelb, clYellow);
  GrueneLampe := TLampe.Create(uGruen, clGreen);
end;


 TLampe = class(TObject)
 private
  { Private-Deklarationen }
  fDisplay: TShape;
  fColor: TColor;


constructor TLampe.Create(uDisplay: TShape; uColor: TColor);
begin
  inherited Create;
  fDisplay := uDisplay;
  fColor := uColor;
end;

procedure TLampe.an;
begin
  fDisplay.Color := fColor;
end;

procedure TLampe.aus;
begin
  fDisplay.Color := clBtnColor;
end;
supersass1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 18.02.08 22:23 
ich hab das soweit verstanden, und weiß jetzt auch was du meinst ;)
aber leider bekomm ich immer noch eine Exception, aber warum?

neues Projekt liegt im Anhang



//Edit hat sich erledigt, ich hab den Wert für die Ampel1 und Ampel2 nicht übergeben, sondern quasi ne neue erstellt.

Nun hab ich folendes Program:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 Ampel1.RotEinschalten;
  Ampel2.GruenEinschalten;
  Sleep(1000);
  Ampel1.GelbEinschalten;
  Ampel2.GelbEinschalten;
  Sleep(1000);
  Ampel1.GruenEinschalten;
  Ampel2.RotEinschalten;
heißt es in der uZentrale, doch leider macht er nichts, wenn er "schläft", er refresht die Anzeige nicht einmal.


//edit2
ich habs schon gelöst, hinter LAmpe.an fehlte folgdendes:
ausblenden Delphi-Quelltext
1:
2:
  fDisplay.Brush.Color := clBlack;
  fDisplay.Refresh;


Nun muss ich Timer einbauen, und gut is ;)
Einloggen, um Attachments anzusehen!