Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ampel programmieren (https://www.delphipraxis.net/66389-ampel-programmieren.html)

nastytrouble 29. Mär 2006 06:47


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.

Nicodius 29. Mär 2006 06:54

Re: ampel programmieren
 
Delphi-Quellcode:
  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;
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 ;)

nastytrouble 29. Mär 2006 07:18

Re: ampel programmieren
 
mhh irgentwas funzt da nicht. gibts noch andere wege?

Sharky 29. Mär 2006 07:21

Re: ampel programmieren
 
Zitat:

Zitat von nastytrouble
kann mal jemand bei der ampel hier helfen?...

Zitat:

Zitat von nastytrouble
mhh irgentwas funzt da nicht. gibts noch andere wege?

Hai nastytrouble,

es wäre sehr hilfreich wenn Du uns sagen würdest wo das Problem liegt bzw. was denn nicht funktioniert.

nastytrouble 29. Mär 2006 07:30

Re: ampel programmieren
 
:wall: :wall: :wall: :wall: :wall: die ampel schaltet garnet erst um. das ist das problem. :wall:

Klaus01 29. Mär 2006 07:30

Re: ampel programmieren
 
Delphi-Quellcode:
Procedure wait(Time:Integer);
  Var x:Dword;
Begin
  Time := Time * 20;
  x := GetTickCount ;
  While x - time < GetTickCount do    Application.ProcessMessages;
End;
nur mal so zu darübernachdenken,
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

Kroko1999 29. Mär 2006 07:31

Re: ampel programmieren
 
Delphi-Quellcode:
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;
//EDIT: GELB richtig!

nastytrouble 29. Mär 2006 07:49

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

Kroko1999 29. Mär 2006 07:52

Re: ampel programmieren
 
in Tform1


Grundlagen wären nicht schlecht! :wink:

nastytrouble 29. Mär 2006 07:56

Re: ampel programmieren
 
also als variable. oder wie??? das geht nämlich nicht.

Kroko1999 29. Mär 2006 08:03

Re: ampel programmieren
 
als Variable wenn dort procedure TForm1.Zustand steht :?:

nastytrouble 29. Mär 2006 08:07

Re: ampel programmieren
 
tut mir ja leid aber das geht nicht. oder ich bin zu dumm dafür. :coder2:

Kroko1999 29. Mär 2006 08:10

Re: ampel programmieren
 
Delphi-Quellcode:
TForm1 = class (TForm)
  private
    procedure Zustand (const AMode: Word);
end;
geht immer :!:

Luckie 29. Mär 2006 08:13

Re: ampel programmieren
 
@Kroko: Wann wird denn eine Ampel grün-gelb? ;) Ich kenne nur: Rot, rot-gelb, grün, gelb und wieder rot.

Kroko1999 29. Mär 2006 08:15

Re: ampel programmieren
 
Zitat:

Zitat von Luckie
@Kroko: Wann wird denn eine Ampel grün-gelb? ;) Ich kenne nur: Rot, rot-gelb, grün, gelb und wieder rot.

Sorry, ist lange her, da gab es mal Gelb-Grün, muss natürlich Gelb heißen :cry:

nastytrouble 3. Apr 2006 07:45

Re: ampel programmieren
 
thx hat geholfen. jetz schaltet er von hell zu dunkelgrün um :gruebel: .
mfg nasty

Danny87 3. Apr 2006 08:56

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

edi-design 3. Apr 2006 09:05

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:
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.
hoffe es hilft

mfg andré

nastytrouble 4. Apr 2006 18:34

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.

nastytrouble 4. Apr 2006 18:38

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

gangville 9. Mär 2009 22:21

Re: ampel programmieren
 
Zitat:

Zitat von edi-design
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:
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.
hoffe es hilft

mfg andré


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.

blink182 9. Mär 2009 22:41

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:
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;
MfG blink182

mr_emre_d 10. Mär 2009 00:06

Re: ampel programmieren
 
Zitat:

Zitat von Kroko1999
[delphi]
Procedure wait(const Time:Integer);
var
x: Cardinal;
Begin
x := GetTickCount+Time*400 ;
while GetTickCount<X do
Application.ProcessMessages;
End;

:shock: Ähm, so stimmt das nicht ganz! (EDIT-Wenn ich mich nicht irre-das tue ich aber um diese Zeit öfters:P)

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:
not Application.Terminated -> Die Schleife bricht ab, wenn die Anwendung geschlossen wird!
Ich muss noch erwähnen, dass der Luckie (oder wars doch der Negah :gruebel: ) eine bessere Routine gepostet hat.

MfG :firejump:

BAMatze 10. Mär 2009 05:32

Re: ampel programmieren
 
Zitat:

Zitat von Luckie
@Kroko: Wann wird denn eine Ampel grün-gelb? ;) Ich kenne nur: Rot, rot-gelb, grün, gelb und wieder rot.

Hallo an alle ist zwar etwas offtopic aber die Phase grün-gelb ist aus dem ehemaligen Ostdeutschland bekannt. Die Ampelabfolge hat sich dort um diesen einen Zustand unterschieden zum heute bekannten System.

gangville 10. Mär 2009 06:00

Re: ampel programmieren
 
Zitat:

Zitat von blink182
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:
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;
MfG blink182

danke für die hilfe

könnt ihr nicht mir die delphi dabei nicht hochladen, denn mit den quellcodes braucht man auch eine passende Formen.

mquadrat 10. Mär 2009 10:04

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:

gangville 10. Mär 2009 11:35

Re: ampel programmieren
 
Zitat:

Zitat von mquadrat
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:

hi,

:-D nene ich brauch es für donnerstag.

Den ampel habe ich programiert, aber ich brauche die .img datei.

danke

blink182 10. Mär 2009 12:27

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 (:

gangville 10. Mär 2009 13:27

Re: ampel programmieren
 
Zitat:

Zitat von blink182
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 (:


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.

Luckie 10. Mär 2009 13:28

Re: ampel programmieren
 
Dann mach dir doch mal eben schnell eins mit Paint, anstatt hier lange auf eine Antwort zu warten.

gangville 10. Mär 2009 13:31

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.

Luckie 10. Mär 2009 13:40

Re: ampel programmieren
 
Zitat:

Zitat von gangville
Soll ich vill. mein quelltext euch zeigen?

Kannst du machen, aber bitte nur den teil mit dem Problem und einer Erklärung, was nicht funktioniert und was du bisher probiert hast es zum Laufen zu bringen.

gangville 10. Mär 2009 13:55

Re: ampel programmieren
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von gangville
Soll ich vill. mein quelltext euch zeigen?

Kannst du machen, aber bitte nur den teil mit dem Problem und einer Erklärung, was nicht funktioniert und was du bisher probiert hast es zum Laufen zu bringen.

So jetzt ist mein problem das auto rein zu machen und einen bestimmten quelltesxt zu difinieren, damit das auto dann eine runde fährt(also er verschwindet rechts und kommt sofort wieder links aus und haltet bei der roten ampel.

blink182 10. Mär 2009 13:59

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?

gangville 10. Mär 2009 14:07

Re: ampel programmieren
 
Zitat:

Zitat von blink182
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?

Vielen vielen dank, genau das wollte ich wissen.

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.

Homer S. 19. Mär 2009 09:17

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