| Autor |
Beitrag |
Zlatan
      
Beiträge: 175
|
Verfasst: Mi 16.02.11 16:55
In diesem Quelltext ist ein Fehler(alles andere ist richtig)
soll eine automatische ampel werden
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button4Click(Sender: TObject); begin AutomatikAus:=false; repeat Button1Click(Sender); SetPause(500); Button2Click(Sender); SetPause(500); Button3Click(Sender); SetPause(500); until AutomatikAus=true; end;
end. |
Moderiert von Narses: Titel geändert, war: "Fehler".
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mi 16.02.11 17:02
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button4Click(Sender: TObject); begin AutomatikAus:=false; repeat Button1Click(Sender); SetPause(500); Button2Click(Sender); SetPause(500); Button3Click(Sender); SetPause(500); until AutomatikAus=true; end; |
Was denn für eine Art von Fehler?
Wenn du einen Compilationsfehler meinst, würde ich mal dadrauf tippen, dass du die OnClick Prozeduren der Buttons falsch aufrufst. Versuche es mit ButtonX.Click.
Ansonsten müsstest du mal die Prozedur SetPause zeigen und uns erklären, wann AutomatikAus auf true gesetzt wird.
Lg
|
|
Zlatan 
      
Beiträge: 175
|
Verfasst: Mi 16.02.11 17:07
DEr Fehler ist undefinierter Bezeichner: SetPause
Hier ist der komplette Text
ICh habe aber auch noch eine 2.Unit
Ist für dieses Problem aber eher unwichtig
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: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls, uZeit;
type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Rot: TShape; Gelb: TShape; Gruen: TShape; Button1: TButton; Button2: TButton; Button3: TButton; BitBtn1: TBitBtn; Button4: TButton; procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private public end;
var Form1: TForm1; AutomatikAus : boolean;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject); begin Close; end;
procedure TForm1.FormCreate(Sender: TObject); begin Rot.Hide; Gelb.Hide; Gruen.Hide ; end;
procedure TForm1.Button1Click(Sender: TObject); begin Rot.Visible:=true; Gelb.Visible:=false; Gruen.Visible:=false; end;
procedure TForm1.Button2Click(Sender: TObject); begin Gelb.Visible:=true; Rot.Visible:=false; Gruen.Visible:=false; end;
procedure TForm1.Button3Click(Sender: TObject); begin Gruen.Visible:=true; Rot.Visible:=false; Gelb.Visible:=false; end;
procedure TForm1.Button4Click(Sender: TObject); begin AutomatikAus:=false; repeat Button1Click(Sender); SetPause(500); Button2Click(Sender); SetPause(500); Button3Click(Sender); SetPause(500); until AutomatikAus=true; end;
end. |
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 16.02.11 17:13
Moin!
Zlatan hat folgendes geschrieben : | | DEr Fehler ist undefinierter Bezeichner: SetPause |
Der Compiler kennt keine Prozedur/Methode dieses Namens.
Du hast aber soweiso einen Konzept-Fehler in deinem Ansatz: Die repeat-Schleife ist hier falsch. In einer ereignisorientierten Anwendung solltest du das mit einer TTimer-Komponente lösen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mi 16.02.11 17:14
Zlatan hat folgendes geschrieben : | DEr Fehler ist undefinierter Bezeichner: SetPause
Hier ist der komplette Text |
Du hast einfach irgendeine Prozedur in deinen Quelltext geschrieben, die es so nicht std mäßig gibt und wunderst dich, wieso er das nicht compiliert.
Ich vermute mal stark, dass du dir von der Seite die Übung geholt hast : www.spolwig.de/is/u-...lphi_ueb/ueb_1.3.htm .
Das ist aber eine Aufgabe, in der du die Komponenten selber schreiben musst.
Lg
Moderiert von Narses: Zitat gekürzt.
|
|
Zlatan 
      
Beiträge: 175
|
Verfasst: Mi 16.02.11 17:16
Meinst du so was? 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: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151:
| unit uZeit;
interface
uses Windows, Messages, Sysutils, Forms;
type TZeit = class (TObject) protected Startzeit, Stopzeit, Laufzeit : longint; public function GetDatum : string; virtual; function GetUhrzeit: string; virtual; function GetStart : longint; virtual; function GetStop : longint; virtual; function GetStopZeit: longint; virtual; function GetStopZeitForm : string; virtual; procedure SetPause (millisec : longint); virtual; procedure Start; virtual; procedure Stop; virtual; end;
var Zeit : TZeit;
implementation
procedure TZeit.Start;
begin startzeit := 0; startzeit := GetTickCount; end;
procedure TZeit.Stop;
begin stopzeit := 0; stopzeit := GetTickCount; Laufzeit := Stopzeit - Startzeit ; end;
function TZeit.GetStart : longint;
begin Result := Startzeit; end;
function TZeit.GetStop : longint;
begin Result := Stopzeit; end;
function TZeit.GetStopZeit : longint;
begin Result := Laufzeit ; end;
function TZeit.GetStopZeitForm : string;
begin if Laufzeit < 1000 then Result := '0:' + inttostr(Laufzeit) else begin Result := inttostr(Laufzeit DIV 1000) +':' + inttostr(Laufzeit MOD 1000) end; end;
function TZeit.GetDatum : string;
begin Result := DateToStr(now) end;
function TZeit.GetUhrzeit : string;
begin Result := TimeToStr(now) end;
procedure TZeit.SetPause(millisec : longint);
var zeit1 : longint; begin zeit1 := GetTickCount; repeat application.ProcessMessages; until ((GetTickCount - zeit1) > millisec); end;
initialization Zeit := TZeit.create; end. |
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mi 16.02.11 17:22
Die Prozedur SetPause ist in einer Klasse.
Das heißt, dass du sie nicht einfach wie eine normale Prozedur aufrufen kannst.
Dazu solltest du dich ein bisschen mit dem Thema ObjektOrientierte Programmierung beschäftigen, gibt sehr viele gute Tutorials dazu.
Wenn du dich allerdings (noch) nicht damit beschäftigen willst, dann schreib dir einfach eine Prozedur, die das gleiche macht.
Sprich so =)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure SetPause(millisec : longint); var zeit1 : longint; begin zeit1 := GetTickCount; repeat application.ProcessMessages; until ((GetTickCount - zeit1) > millisec); end; |
Lg
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 16.02.11 17:22
Moin!
Zlatan hat folgendes geschrieben : | | Meinst du so was? |
Du hast den Namen des Objekts nicht mit angegeben, probier das mal so:
Delphi-Quelltext
Aber nochmal: die repeat-Schleife gehört (so) nicht in einer ereignisorientierte Anwendung! Hier ein FAQ-Beitrag dazu.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Zuletzt bearbeitet von Narses am Mi 16.02.11 17:37, insgesamt 1-mal bearbeitet
|
|
Zlatan 
      
Beiträge: 175
|
Verfasst: Mi 16.02.11 17:24
Alles klar, habe den Fehler gefunden:
Es muss heißen:
Zeit.SetPause
und nicht nur SetPause
--- Moderiert von Narses: Beiträge zusammengefasst---
Ich setze meine Ampel mal als Download rein 
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 16.02.11 17:41
Moin!
Zlatan hat folgendes geschrieben : | habe den Fehler gefunden:
Es muss heißen:
Zeit.SetPause |
Das hab ich doch oben schon geschrieben...
Zlatan hat folgendes geschrieben : | | Alles klar, |
Leider ist offensichtlich überhaupt nix klar, denn ich bin mal gespannt, wie du deine "Automatik" wieder beenden willst... denn du setzt nirgendwo die Variable wieder auf TRUE
Ein letztes mal, vielleicht sind ja doch nicht alle Synapsen verstopft: Der Ansatz mit der repeat-Schleife ist hier ein klarer Konzeptfehler! Mach das besser mit einem Timer.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Zlatan 
      
Beiträge: 175
|
Verfasst: Mi 16.02.11 17:43
Das Beenden ist einfach:
ICh setze einfach einen Button, der AutomatikAus true macht
Funktioniert!!!
Hast du schon mal gedownloadet?
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 16.02.11 17:47
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Zlatan 
      
Beiträge: 175
|
Verfasst: Mi 16.02.11 17:49
Da hast du wohl recht
ISt ja aber nur ein kleiner fehler
|
|