Entwickler-Ecke
Sonstiges (Delphi) - Fehler: Undefinierter Bezeichner SetPause()
Zlatan - Mi 16.02.11 16:55
Titel: Fehler: Undefinierter Bezeichner SetPause()
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 - 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 - 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
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: 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 - 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. :nixweiss:
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. :idea:
cu
Narses
HenryHux - 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 :
http://www.spolwig.de/is/u-sequenzen/delphi_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 - Mi 16.02.11 17:16
Meinst du so was?
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: 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 - 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
Zlatan - 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 - 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... :gruebel:
Zlatan hat folgendes geschrieben : |
| Alles klar, |
Leider ist offensichtlich überhaupt nix klar, denn ich bin mal gespannt, wie du deine "Automatik" wieder beenden willst... 8)
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
Zlatan - 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 - Mi 16.02.11 17:47
Moin!
Zlatan hat folgendes geschrieben : |
| ICh setze einfach einen Button, der AutomatikAus true macht |
OK, der Code ist oben in deinem Quelltext allerdings noch nicht enthalten. :nixweiss:
Zlatan hat folgendes geschrieben : |
| Funktioniert!!! |
Hab ich nicht bestritten, ist aber weit weg von brauchbar, oder gar gut. :?
Zlatan hat folgendes geschrieben : |
| Hast du schon mal gedownloadet? |
Wozu, ich kann´s mir auch so vorstellen. Deine Signalfolge hat allerdings nix mit einer Ampel (jedenfalls nicht in Deutschland) zu tun. ;)
cu
Narses
Zlatan - Mi 16.02.11 17:49
Da hast du wohl recht :)
ISt ja aber nur ein kleiner fehler
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!