Autor |
Beitrag |
hazard999
      
Beiträge: 162
Win XP SP2
VS 2010 Ultimate, CC.Net, Unity, Pex, Moles, DevExpress eXpress App
|
Verfasst: Mo 30.06.08 15:47
de.wikipedia.org/wik...ierte_Programmierung
Ist schon ein bisschen ein älterer Ansatz, den älteren Mitglieder hier dürfte das noch durchaus ein Begriff sein.
Globale Variablen sind so ein Relikt aus dieser Zeit.
Und wenn man den Counter Public gesetzt hätte, würde das dazu nicht viel unterschied machen.
OO ist nur ein Konzept. Man muss es auch richtig anwenden.
_________________ MOV EAX, Result;MOV BYTE PTR [EAX], $B9;MOV ECX, M.Data;MOV DWORD PTR [EAX+$1], ECX;MOV BYTE PTR [EAX+$5], $5A;MOV BYTE PTR [EAX+$6], $51;MOV BYTE PTR [EAX+$7], $52;MOV BYTE PTR [EAX+$8], $B9;MOV ECX, M.Code;MOV DWORD PTR [EAX+$9], ECX
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Di 01.07.08 16:39
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Di 01.07.08 18:20
Nein, tut mir leid, ist es aber nicht
Ich werde es nochmal erklären
Habe einen String (als Beispiel mal "wert1") , dieser String soll mit einer Zahl gefüllt werden, aber nicht immer mit der gleichen!
So beim ersten mal als Beispiel "1" und beim zweiten mal "3" und beim dritten mal "40", die Zahlen die ich eingeben möchte, also um die der String verändert werden soll habe ich schon vorgegeben.
Nun muss halt der Timer, nachdem er aktiviert wurde, nacheinander all diese Werte in den String reinschreiben.
Und beim einfügen des letzten strings wird der Button1 dann deaktiviert mit Hilfe des Befehls : button1.enabled:=false;
Mfg Sithlord
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 01.07.08 18:30
Hallo,
noch ein Versuch
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var TimerIndex: Integer;
const TimerValueCount = 6; TimerValues: array[0..TimerValueCount-1] of Integer = (1, 3, 40, 120, 412, 1021);
procedure TForm1.FormCreate(Sender: TObject); begin TimerIndex := 0; end;
procedure TForm1.TimerTimer(Sender: TObject); var S: String; begin S := 'Wert: '+TimerValues[TimerIndex]; inc(TimerIndex);
end; |
Geht das in die richtige Richtung?
Grüße,
Yogu
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Di 01.07.08 22:12
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mi 02.07.08 10:26
Hi,
Wie variabel sind denn die ausgeführten Codestücke? Muss eine Methode mit unterschiedlichen Parametern aufgerufen werden oder unterschiedliche Methoden?
Hier mal ein Entwurf für Variable Prozeduren: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure DoSomething(aParameter: Integer); begin
end;
procedure DoSomething2(aParameter: Integer); begin
end;
const Prozeduren: Array[0..1] of procedure(aParameter: Integer) of Object = (DoSomething, DoSomething2); Parameter: Array[0..1] of Integer = (5, 723); Zeiten: Array[0..1] of Integer = (1000, 23000); procedure Timer1Timer(Sender: TObject); begin Prozeduren[TimerNr](Parameter[TimerNr]); Inc(TimerNr); Timer1.Interval := Zeiten[TimerNr]; end; |
So, bin mir nich ganz sicher, ob das so geschluckt wird, das Array mit den Prozeduren drin als const zu deklarieren. ansonsten müsste mans halt als var und dann zur Laufzeit belegen. Durch das Array hätte man jedenfalls den Überblick, welche Prozeduren aufgerufen werden.
Yugo hat folgendes geschrieben: | 1, 3, 40, 120, 412, 1021 |
Kann es sein, dass dein Zufallszahlengenerator die Form '2^n +-x' hat?
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 02.07.08 11:35
Jerk hat folgendes geschrieben: | Hast du dir echt Delphi gekauft um dann mit solchen Problemen an zu kommen |
Was soll das denn?
_________________ Na denn, dann. Bis dann, denn.
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Mi 02.07.08 20:23
Das frage ich mich auch - ich find eure Antworten ganz toll- ehrlich.
Was ich nicht ausstehen kann, ist, wenn immer jemand unsinnige Antworten/Fragen schreibt.
Nicht jeder ist so gut im Programmieren - nur weil hier Delphi - Asse sind, und ich nur ein Halblaie, brauchen die Asse nicht ihre Künste unter die Nase reiben - sorry, empfinde ich aber so
Tut mir leid - es ist aber so. Ich lerne nur von Online Tutorials - mein kleines Wissen reicht für meine 15 Jahre vollkommen aus...
Ich werde trotzdem das von Jerk mal probieren- danke.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var Step : Integer; Werte : Array[1..3] of Integer; Str : String; ... Step := 0; Werte[1] := 1; Werte[2] := 3; Werte[3] := 40; ... procedure TForm.Timer1Timer(Sender: TObject); begin inc(Step,1); Str := 'WAS AUCH IMMER' + inttostr(Werte[Step]); if Step = 3 then begin Button1.Enabled :=false; Timer1.Enabled :=false; end; end; |
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 02.07.08 20:57
Jerk: Was ist denn an deinem Quelltext so viel anders als an meinem? Ich denke, es ist besser, die Werte als Konstanten zu deklarieren. Der Rest ist doch jetzt wirklich so ziemlich gleich ...
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Do 03.07.08 18:00
Ich meinte mit dem obrigen Post das wenn jemand "Anfänger" ist, da schließe ich mich nicht aus, ist evtl das "kaufen" von Delphi 7 Pro SE etwas zu früh. Ich würde lieber zu ner Version raten die Gratis ist...
Mehr wollte ich damit nicht sagen.
Ich entschuldige mich dafür.
@Yogu
Ich dachte nur das die Werte nicht unbedingt konstant sind bei ihm, kann ja sein das sie sich je nach schwierigkeitsgrad oder Level verändern. Außerdem war ja noch die Sache mit dem Button aber im Prinzip sind die Codes so ziemlich identisch von der Funktion.
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 03.07.08 20:18
Achso - ne, die Version war für mich völlig gratis, das zum GB geschenkt bekommen ^^
Aber du hast recht, ich habe keine festen Werte , bzw. sie lassen sich nicht ermitteln, von daher eine gute Lösung
Hatte noch keine Zeit zum testen, werde es aber sofort machen
Mfg Sithlord
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 03.07.08 20:45
Mhhh, wenn ichs teste kommt der Fehler "identifier redeclared'werte'"
Genauso meldet er Fehler bei "Step:=0;" obwohl dieser ja mit "Step:integer;" gehen müsste 
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 03.07.08 21:00
du musst im Form.Create den Variablen Werte zuweisen
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Do 03.07.08 21:26
Jo den Timer erstmal mittels Objektinspector auf enabled:= false setzen, dann im z.b. Formcreate wie oben gesagt den Variablen die werte zuweisen, danach kannste dann den Timer starten.
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; Step : Integer; Werte : Array[1..3] of Integer; Str : String; implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin timer1.enabled:=true; end;
procedure TForm1.FormCreate(Sender: TObject); begin Step := 0; Werte[1] := 1; Werte[2] := 3; Werte[3] := 40; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin inc(Step,1); Str := 'WAS AUCH IMMER' + inttostr(Werte[Step]); button1.caption := str; if Step = 3 then begin Button1.Enabled :=false; Timer1.Enabled :=false; end; end; end. |
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 03.07.08 21:44
hat geklappt - er verbleibt aber auf der 1 als wert -.-
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:
| procedure TForm1.Timer1Timer(Sender: TObject); var Step : Integer; Werte : Array[1..3] of Integer; Str : String; begin Step := 0; Werte[1] := 1; Werte[2] := 3; Werte[3] := 40; inc(Step,1); Str := '' + inttostr(Werte[Step]); cpu1.Caption:=Str; timer1.Enabled:=false; button2.Enabled:=true; if Step = 3 then begin Button1.Enabled :=false; Timer1.Enabled :=false; end; end; |
egal wie oft ich den Timer starten lasse -.-
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Do 03.07.08 22:43
is ja auch logisch wenn du am anfang der Prozedur Step immer auf 0 setzt -.-
Guck doch mal wie und wo ich die Variablen deklariert hab und wie du das gemacht hast .
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 03.07.08 23:14
Oh - ja , sorry, zu spät am Abend heute
Die Variablen müssen aber so deklariert werden - anders gehts nicht weil ich sie sonst mehrfach bräuchte 
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Do 03.07.08 23:30
HÄ ?
Wenn du sie ausserhalb der Prozedur, also Global deklarierst wo is dann das Problem ?
Wieso mehrfach? Das is ja der Vorteil von Globalen Variablen - das alle Prozeduren darauf zugreifen können sodass man sich meherere Variablen sparen kann z.b..
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 03.07.08 23:37
Hallo !
Das liegt daran, das jeder timer mit total unterschiedlichen Werten belegt ist
Habe nun "nur" den integer "step" global definiert, das heißt für jeden Timer einen "step", sprich, für timer1 "step" ,für timer2 "step2" und so weiter
Dann habe ich in Formcreate alle auf 0 gesetzt und nun gehts - danke
Vielen, vielen dank 
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Do 03.07.08 23:44
Kannst du trotzdem Global machen, z.b. mit nem Mehrdimensionalem Array.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var Werte : Array[1..5,1..3] of Integer; ... Werte[1,1]:=1; Werte[1,2]:=3; Werte[1,3]:=40;
Werte[2,1]:=2; Werte[2,2]:=6; Werte[2,3]:=80; ... |
Global hat den Vorteil das sich die Werte auch noch ändern lassen von außerhalb der Prozedur.
|
|
|