![]() |
ampel programmieren
Liste der Anhänge anzeigen (Anzahl: 1)
kann mal jemand bei der ampel hier helfen?
Delphi-Quellcode:
unit ampel;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Shape1: TShape; sh_red: TShape; sh_yellow: TShape; sh_green: TShape; switch: TButton; procedure switchClick(Sender: TObject); private { Private-Deklarationen} public { Public-Deklarationen} end; var Form1: TForm1; implementation {$R *.DFM} Procedure wait(Time:Integer); Var x:Dword; Begin Time := Time * 20; x := GetTickCount ; While x - time < GetTickCount do Application.ProcessMessages; End; procedure TForm1.switchClick(Sender: TObject); begin wait(3); sh_green.Visible := false; sh_yellow.Visible := true; wait(3); sh_yellow.Visible := false; sh_red.Visible := true; wait(3); sh_yellow.Visible := true; wait(3); sh_red.Visible := false; sh_yellow.Visible := false; sh_green.Visible := true; end; end. |
Re: ampel programmieren
Delphi-Quellcode:
application.progessApplication (schlagt mich ich bin zu müede und kan ndas wort application nicht mehr schreiben ^^) fehlt da immer nach den schaltungen hischreiben und wuppi ;)
wait(3);
sh_green.Visible := false; sh_yellow.Visible := true; wait(3); sh_yellow.Visible := false; sh_red.Visible := true; wait(3); sh_yellow.Visible := true; wait(3); sh_red.Visible := false; sh_yellow.Visible := false; sh_green.Visible := true; |
Re: ampel programmieren
mhh irgentwas funzt da nicht. gibts noch andere wege?
|
Re: ampel programmieren
Zitat:
Zitat:
es wäre sehr hilfreich wenn Du uns sagen würdest wo das Problem liegt bzw. was denn nicht funktioniert. |
Re: ampel programmieren
:wall: :wall: :wall: :wall: :wall: die ampel schaltet garnet erst um. das ist das problem. :wall:
|
Re: ampel programmieren
Delphi-Quellcode:
nur mal so zu darübernachdenken,
Procedure wait(Time:Integer);
Var x:Dword; Begin Time := Time * 20; x := GetTickCount ; While x - time < GetTickCount do Application.ProcessMessages; End; GetTickCount gibt Dir die Anzahl der Millisekunden seit dem Start des Computers aus. (Aus der Hilfe: GetTickCount is a Cardinal function used to retrieve the number of milliseconds since the computer was started.) Die ziehst von dieser Zahl x*20 Millisekunden ab, was eine sehr kurze Zeitdauer ist. Deine switch Methode wird in 240ms durchlaufen, da brauchst Du ein schnelles Auge. Grüße Klaus |
Re: ampel programmieren
Delphi-Quellcode:
//EDIT: GELB richtig!
Procedure wait(const Time:Integer);
var x: Cardinal; Begin x := GetTickCount+Time*400 ; while GetTickCount<X do Application.ProcessMessages; End; procedure TForm1.Zustand(const AMode: Word); procedure _Set (AC1,AC2,AC3: TColor); begin sh_red.Brush.Color := AC1; sh_Yellow.Brush.Color := AC2; sh_Green.Brush.Color := AC3; end; begin case AMode of 0: _Set (clRed,$408080,clGreen); // ROT 1: _Set (clRed,clYellow,clGreen); // Rot-Gelb 2: _Set (clMaroon,$408080,clLime); // Grün 3: _Set (clMaroon,clYellow,clGreen); // Gelb end; end; procedure TForm1.switchClick(Sender: TObject); begin Zustand (0); wait(3); Zustand (1); wait(3); Zustand (2); wait(3); Zustand (3); wait(3); Zustand (0); end; |
Re: ampel programmieren
wo soll der zustand definiert werden?
[Warnung] ampel.pas(34): Vorzeichenbehaftete und -lose Typen werden kombiniert - beide Operanden werden erweitert [Fehler] ampel.pas(39): Undefinierter Bezeichner: 'Zustand' [Fehler] ampel.pas(39): '=' erwartet, aber ')' gefunden [Fehler] ampel.pas(42): Undefinierter Bezeichner: 'sh_red' [Fehler] ampel.pas(43): Undefinierter Bezeichner: 'sh_Yellow' [Fehler] ampel.pas(44): Undefinierter Bezeichner: 'sh_Green' [Fehler] ampel.pas(57): Undefinierter Bezeichner: 'Zustand' [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'ampel.pas' kann nicht compiliert werden |
Re: ampel programmieren
in Tform1
Grundlagen wären nicht schlecht! :wink: |
Re: ampel programmieren
also als variable. oder wie??? das geht nämlich nicht.
|
Re: ampel programmieren
als Variable wenn dort procedure TForm1.Zustand steht :?:
|
Re: ampel programmieren
tut mir ja leid aber das geht nicht. oder ich bin zu dumm dafür. :coder2:
|
Re: ampel programmieren
Delphi-Quellcode:
geht immer :!:
TForm1 = class (TForm)
private procedure Zustand (const AMode: Word); end; |
Re: ampel programmieren
@Kroko: Wann wird denn eine Ampel grün-gelb? ;) Ich kenne nur: Rot, rot-gelb, grün, gelb und wieder rot.
|
Re: ampel programmieren
Zitat:
|
Re: ampel programmieren
thx hat geholfen. jetz schaltet er von hell zu dunkelgrün um :gruebel: .
mfg nasty |
Re: ampel programmieren
hi,
ich musste zu meiner schulzeit auch mal eine ampel programmieren. warum machst du das ganze nicht einfach mit einem timer? bei dem ButtonClick aktivierst du den timer und am ende des timers deaktivierst du denselbigen wieder. im timer musst du mehrere if-abfragen schreiben die überprüfen, welche shapes gerade sichtbar sind und dementsprechend die anderen shapes sichtbar machen. ich will dir nicht den code präsentieren, da ich denke, dass man am meisten lernt, wenn man sich den code selbst zusammen bastelt ;-) aber ich geb dir eine kleine pseudocode vorgabe: Im Timer: Wenn die ampel grün ist dann - mach grün unsichtbar und gelb sichtbar. Wenn aber die ampel gelb ist dann - mach gelb unsichtbar und rot sichtbar. Wenn aber die ampel rot ist dann - mach gelb sichtbar. Wenn aber die ampel rot und gelb ist dann - mach rot und gelb unsichtbar und grün sichtbar. Deaktiviere Timer. Ich hoffe, damit kannst du was anfangen ;-) gruss daniel |
Re: ampel programmieren
das is so ne nette anfänger aufgabe in delphi im schulunterricht,
hab hier mal meine version zu der aufgabe angehangen plus code, is aus den ganz zeitigen anfängen, von daher müsste es eingeltich verstämndlich sein. EDIT: Anhängen ging leider nich meine Internetverbindung spinnt mal wieder, muss leider der code reichen
Delphi-Quellcode:
hoffe es hilft
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) rasen: TImage; rasen_2: TImage; rasen_3: TImage; rasen_4: TImage; Ampel_3: TImage; Ampel_2: TImage; Ampel_4: TImage; ampel_1: TImage; auto: TImage; pb_start: TBitBtn; Timer: TTimer; pb_stop: TBitBtn; Timer_auto: TTimer; auto_2: TImage; timer_auto2: TTimer; procedure pb_startClick(Sender: TObject); procedure TimerTimer(Sender: TObject); procedure pb_stopClick(Sender: TObject); procedure Timer_autoTimer(Sender: TObject); procedure timer_auto2Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; strasse: integer =1; i :integer = 1; rechts: integer =1; unten:integer =1; implementation {$R *.dfm} procedure TForm1.pb_startClick(Sender: TObject); begin timer.Enabled := true; pb_start.Enabled := false; pb_stop.Enabled := true; end; procedure TForm1.TimerTimer(Sender: TObject); begin case strasse of 1: Case i of 1: Begin // Ampeln auf Grün ampel_4.Picture.LoadFromFile('./grün_waage.bmp'); ampel_3.Picture.LoadFromFile('./grün_waage.bmp'); timer_auto.Enabled := true; //Ampeln auf Rot ampel_1.Picture.LoadFromFile('./rot_senk.bmp'); ampel_2.Picture.LoadFromFile('./rot_senk.bmp'); //umschalten auf Gelb i := i + 1; End; 2: Begin // Ampeln auf Gelb ampel_4.Picture.LoadFromFile('./gelb_waage.bmp'); ampel_3.Picture.LoadFromFile('./gelb_waage.bmp'); //Ampeln auf Rot/Gelb ampel_1.Picture.LoadFromFile('./rotgelb_senk.bmp'); ampel_2.Picture.LoadFromFile('./rotgelb_senk.bmp'); //umschalten auf rot i := 1; strasse := 2; End; End; 2: Case i of 1: Begin // Ampeln auf Rot ampel_4.Picture.LoadFromFile('./rot_waage.bmp'); ampel_3.Picture.LoadFromFile('./rot_waage.bmp'); //Ampeln auf Grün ampel_1.Picture.LoadFromFile('./grün_senk.bmp'); ampel_2.Picture.LoadFromFile('./grün_senk.bmp'); timer_auto2.Enabled := true; //umschalten auf Gelb i := i + 1; End; 2: Begin // Ampeln auf Gelb ampel_4.Picture.LoadFromFile('./rotgelb_waage.bmp'); ampel_3.Picture.LoadFromFile('./rotgelb_waage.bmp'); //Ampeln auf Rot/Gelb ampel_1.Picture.LoadFromFile('./gelb_senk.bmp'); ampel_2.Picture.LoadFromFile('./gelb_senk.bmp'); //umschalten auf rot i := 1; strasse := 1; End; End; End; end; procedure TForm1.pb_stopClick(Sender: TObject); begin timer.Enabled := false; pb_stop.Enabled := false; pb_start.Enabled := true; timer_auto.Enabled := false; timer_auto2.Enabled := false; auto.Left := 400; auto_2.Top := 272; end; procedure TForm1.Timer_autoTimer(Sender: TObject); begin auto.Left := auto.left - 10; if auto.Left < -130 then Begin auto.Left := 650; rechts := 2; End; if rechts = 2 then if auto.left = 400 then Begin timer_auto.Enabled := false; auto.left := 400; rechts := 1; End; end; procedure TForm1.timer_auto2Timer(Sender: TObject); begin auto_2.top := auto_2.top - 10; if auto_2.top < -129 then Begin auto_2.top := 445; unten := 2; End; if unten = 2 then if auto_2.Top < 280 then Begin timer_auto2.Enabled := false; auto_2.Top := 272; unten := 1; End; end; end. mfg andré |
Re: ampel programmieren
ich musste das auch in der schule machen^^. danke für die antworten.
@ Danny87: ich kapier das mit den timern nich. deswegen wollte ich was anderes machen. und da kam bei mir nur dummfug raus siehe grün->dunkelgrün und zurück^^. naja wir hams dann nachher aufgelöst. aber ich kann mit den timern nich umgehen. |
Re: ampel programmieren
ahso bevor ich das vergesse
Danke für die vielen hilfreichen antworten, ich denke ich habe viel dazugelernt(in anderen bereichen). MFG nasty |
Re: ampel programmieren
Zitat:
hi, Könntest du mir bitte die delphi datei mit dem auto zuschicken. Ich muss nämlich ein auto mit einer ampel programmieren, sodass das auto bei rot an der selben stelle bleibt. Ich hoffe du kannst mir helfen. danke im voraus. |
Re: ampel programmieren
das hier isn Code von nem Auto aus nem Delphibuch, hoffe das posten ist hier okay.
Das Auto ist relativ klein gezeichnet, kannste dir aber vergrößern, in dem du das n, bei x+n bzw y+n mit einem faktor muliplizierst
Delphi-Quellcode:
MfG blink182
var
x:Integer; y:Integer; procedure Zeichnen(canv: TCanvas; colr: LongINt); begin with canv do begin pen.color:=colr; brush.color:=colr; RecTangle(x+2, y+1,x+6,y+4); RecTangle(x+2,y+14,x+6,y+17); RecTangle(x+16,y+2,x+20,y+4); RecTAngle(x+16,y+14,x+20,y+16); MoveTo(x+4,y+4); LineTo(x+4,y+6); MoveTo(x+4,y+12); LineTo(x+4,y+14); MoveTo(x+18,y+4); LineTo(x+18,y+7); MoveTo(x+18,y+11); LineTo(x+18,y+14); MoveTo(x,y+6); LineTo(x+14,y+6); LineTo(x+22,y+8); LineTo(x+22,y+10); LineTo(x+14,y+12); LineTo(x,y+12); LineTo(x,y+6); Ellipse(x+9,y+7,x+13,y+11); end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin zeichnen(form1.canvas,clBtnFace); x:=x+5; zeichnen(form1.canvas,clBlack); end; procedure TForm1.Button1Click(Sender: TObject); begin y:=50; x:=40; timer1.enabled:=True; end; |
Re: ampel programmieren
Zitat:
X = GetTickCount + Time*400 -> Wenn ich Time = 1 (sek) setze, hieße das X = GTC + 1*400 -> 400 != 1000 ( da 1 Sek = 1000 ms ) ! Ich würde Folgendes vorschlagen:
Code:
procedure Wait( const Time: Cardinal ); // Time = Unsigned type -> weil keiner -1 Sek warten will :P
var x: Cardinal; begin x := GetTickCount; while ( x + Time*1000 >= GetTickCount ) and ( not Application.Terminated ) do Application.ProcessMessages; end;
Code:
Ich muss noch erwähnen, dass der Luckie (oder wars doch der Negah :gruebel: ) eine bessere Routine gepostet hat.
not Application.Terminated -> Die Schleife bricht ab, wenn die Anwendung geschlossen wird!
MfG :firejump: |
Re: ampel programmieren
Zitat:
|
Re: ampel programmieren
Zitat:
könnt ihr nicht mir die delphi dabei nicht hochladen, denn mit den quellcodes braucht man auch eine passende Formen. |
Re: ampel programmieren
Alles was das Form zum Code braucht ist ein Timer mit dem Namen Timer1 und ein Button mit dem Namen Button1 ;)
Aber wenn du um 07:00 Uhr fragst, dann hättest du es garantiert für heute in der Schule gebraucht. Also eh zu spät :freak: |
Re: ampel programmieren
Zitat:
:-D nene ich brauch es für donnerstag. Den ampel habe ich programiert, aber ich brauche die .img datei. danke |
Re: ampel programmieren
wozu brauchst du jetzt beim Programmieren ein Image, versteh jetzt nicht so ganz was du willst?
Meinst du vllt ein JPEG o.ä.? Naja vllt gibts ja auch noch ne andere Verwendung für .img, also irgendwelche CD-ähnlichen-Images, die mir unbekannt ist (: |
Re: ampel programmieren
Zitat:
hi, ja ich brauche eine jpeg. ein kleines auto oder sowas. ich werde ihn dann zum fahren simulieren. in delphi kann man ja icons hochladen. |
Re: ampel programmieren
Dann mach dir doch mal eben schnell eins mit Paint, anstatt hier lange auf eine Antwort zu warten.
|
Re: ampel programmieren
Ich habe jetzt eine funktionierende ampel, aber verstehe nicht, wie ich es mit dem auto machen soll.
So hier meinen quelltext
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) pnHintergrund: TPanel; btnSchaltung: TButton; Panel1: TPanel; Panel2: TPanel; Timer1: TTimer; pnGruen: TShape; pnGelb: TShape; pnRot: TShape; procedure btnRotClick(Sender: TObject); procedure btnGelbClick(Sender: TObject); procedure btnGruenClick(Sender: TObject); procedure btnGelb1Click(Sender: TObject); procedure btnSchaltungClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.btnRotClick(Sender: TObject); begin pnRot.Brush.Color :=clred; pnGelb.Brush.color := clblack; pnGruen.Brush.color := clblack; end; procedure TForm1.btnGelbClick(Sender: TObject); begin pnGelb.Brush.color := clyellow; pnGruen.Brush.color := clblack; end; procedure TForm1.btnGruenClick(Sender: TObject); begin pnGruen.Brush.color := clgreen; pnRot.Brush.color := clblack; pnGelb.Brush.color := clblack; end; procedure TForm1.btnGelb1Click(Sender: TObject); begin pnGelb.Brush.color := clyellow; pnGruen.Brush.color := clNone; end; procedure TForm1.btnSchaltungClick(Sender: TObject); begin if ((pnRot.Brush.color = clRed) and (pnGelb.Brush.color = clBlack) and (pnGruen.Brush.color = clBlack)) then begin pnGelb.Brush.color := clyellow; pnRot.Brush.color := clred; pnGruen.Brush.color := clblack; end else if ((pnRot.Brush.color = clred) and (pnGelb.Brush.color = clyellow) and (pnGruen.Brush.color = clblack)) then begin pnGelb.Brush.color := clblack; pnRot.Brush.color := clblack; pnGruen.Brush.color := clgreen; end else if ((pnRot.Brush.color = clblack) and (pnGelb.Brush.color = clblack) and (pnGruen.Brush.color = clgreen)) then begin pnGelb.Brush.color:=clyellow; pnGruen.Brush.color:=clblack ; pnRot.Brush.color:=clblack; end else if ((pnRot.Brush.color = clblack) and (pnGelb.Brush.color = clyellow) and (pnGruen.Brush.color = clblack)) then begin pnGelb.Brush.color := clblack; pnRot.Brush.color := clred; pnGruen.Brush.color := clblack; end end; procedure TForm1.Timer1Timer(Sender: TObject); begin btnSchaltung.Click end; end. |
Re: ampel programmieren
Zitat:
|
Re: ampel programmieren
Zitat:
|
Re: ampel programmieren
sollte ja normal nicht so schwer sein?
ich hab dir den Code gepostet, wie du ein Auto malen kannst, dass fährt auch, dass ist durch den timer geregelt. Jetzt kannst du dir aus Spaß z.b. Die Form weiß malen, da nen graues Rechteck als Straße drauf und da malst du dann das Auto drauf. Dann hast du dein Ampel sicher irgendwo positioniert nehm ich mal an. Dann kannst du den X-Wert im Timer prüfen ob er an der Position der Ampel ist oder halt kurz davor, wie du willst. Und dann prüfst du ob die Ampel rot ist und wenn sie rot ist, erhöhst du den X-Wert nicht mehr. Ich weiß jetzt nicht, wo da großartig ein Problem sein soll. Wie Luckie schon sagte, schildere mal dein Problem^^ Randabfrage geht ja so ähnlich, also wenn x>Form.width dann x->0? |
Re: ampel programmieren
Zitat:
Und danke für die Antworten an alle, hat mir sehr geholfen. Leider muss ich das bei alten delphi 7.0 betreiben, da das rad 2009 pro nicht kompatibel ist. |
Re: ampel programmieren
Hallo zusammen,
Es handelt sich um Delphi 5!!! ich habe hier eine Ampelkreuzung mit 2 Ampeln dies klappt soweit. Ich bitte um eure hilfe, wie ich das auf 4 Ampeln mit Autos erweitere. Außerdem sollten die Ampeln wie in echt schalten ;). Bitte beachtet das ich ein anfänger bin ;). Poste einfach mal den Quelltext:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; shpRed1: TShape; shpYellow1: TShape; shpGreen1: TShape; shpYellow2: TShape; shpRed2: TShape; shpGreen2: TShape; Shape9: TShape; Shape10: TShape; Shape11: TShape; Shape12: TShape; Shape13: TShape; Shape14: TShape; Shape15: TShape; Shape16: TShape; Shape17: TShape; Shape18: TShape; Shape19: TShape; Shape20: TShape; Shape21: TShape; Shape22: TShape; Shape23: TShape; Shape24: TShape; Shape25: TShape; Shape26: TShape; Shape27: TShape; Shape28: TShape; Shape29: TShape; Shape30: TShape; Shape32: TShape; Shape33: TShape; Shape34: TShape; Shape35: TShape; Shape36: TShape; Shape37: TShape; Shape38: TShape; Shape39: TShape; Shape31: TShape; Shape40: TShape; Shape41: TShape; Shape42: TShape; Shape43: TShape; Shape44: TShape; Shape45: TShape; Shape46: TShape; Shape47: TShape; Shape48: TShape; Shape49: TShape; Shape50: TShape; Shape51: TShape; Shape52: TShape; Shape53: TShape; Shape54: TShape; Shape55: TShape; Shape56: TShape; Shape57: TShape; Shape59: TShape; Shape60: TShape; Shape61: TShape; Shape62: TShape; Shape63: TShape; Shape64: TShape; Shape65: TShape; Shape66: TShape; Shape67: TShape; Shape68: TShape; Button1: TButton; Timer1: TTimer; procedure shpRed2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.shpRed2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Close; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if shpGreen2.Brush.Color = clblack then begin Timer1.interval := 3000; shpRed2.Brush.Color := clred; shpYellow2.Brush.Color := clblack; shpGreen2.Brush.Color := clnone; shpRed1.Brush.Color := clred; shpYellow1.Brush.Color := clblack; shpGreen1.Brush.Color := clnone; end else if shpYellow2.Brush.Color = clblack then begin Timer1.interval := 3000; shpRed2.Brush.Color := clred; shpYellow2.Brush.Color := clyellow; shpGreen2.Brush.Color := clnone; shpRed1.Brush.Color := clred; shpYellow1.Brush.Color := clyellow; shpGreen1.Brush.Color := clnone; end else if shpRed2.Brush.Color = clred then begin Timer1.interval := 3000; shpRed2.Brush.Color := clnone; shpYellow2.Brush.Color := clnone; shpGreen2.Brush.Color := cllime; shpRed1.Brush.Color := clnone; shpYellow1.Brush.Color := clnone; shpGreen1.Brush.Color := cllime; end else if shpGreen2.Brush.Color = cllime then begin Timer1.interval := 3000; shpRed2.Brush.Color := clblack; shpYellow2.Brush.Color := clyellow; shpGreen2.Brush.Color := clblack; shpRed1.Brush.Color := clblack; shpYellow1.Brush.Color := clyellow; shpGreen1.Brush.Color := clblack; end end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 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