Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Weiterlernen (https://www.delphipraxis.net/189718-weiterlernen.html)

teodorfon 12. Jul 2016 18:27

Weiterlernen
 
Also,ich hatte bis zum letzten jahr in meiner Technischen Schule (Mechatronik) 2 jahre lang "Rechner und Programmieren".
Wir lernten im ersten jahr Pascal und dann Delphi,ab der dritten haben wir das Programmieren nur bei den CNC Maschinen und deshalb frage ich mich wie ich jetzt selbständig Delphi weiter lerne.
Wir hatten bis zum ende probleme mit der funktion array gelöst.(Sortierung von 5 nummern von der größten bis zur kleinsten zahl,usw.)
Also wenn mir jemand helfen kann würde mich das freuen.
(Ich hab schon gesehen dass es einen sub-forum für tutorials gibt,leider glaub ich das ich für die meisten dinge dort noch nicht das wissen habe)

scrat1979 12. Jul 2016 19:12

AW: Weiterlernen
 
Delphi Treff Tutorials wäre eine Anlaufstelle. Sonst ist auch Google dein Freund.

Viel Spaß!

EWeiss 12. Jul 2016 19:21

AW: Weiterlernen
 
Am besten ist immer sich selbst eine Aufgabe zu stellen..
Und dann nach Lösungen zu suchen.

Durch viel lesen und eine menge an versuchen sollte das kein Problem sein.

gruss

Benedikt Magnus 12. Jul 2016 19:29

AW: Weiterlernen
 
So habe ich ebenfalls zu programmieren gelernt.
Nachdem ich die Grundlagen in der Schule erlernt hatte, wollte ich selbst etwas programmieren und habe einfach angefangen. Als ich dann auf etwas stieß, das ich nicht konnte, habe ich im Internet danach gesucht (Google führte mich damals fast immer zum Delphi-Treff oder hierher) und wurde fündig. Je häufiger das passierte, desto weniger musste ich suchen. Und heute kann ich programmieren. :-D

BUG 12. Jul 2016 19:54

AW: Weiterlernen
 
Jup, das beste ist es etwas zu machen was einen interessiert bzw. ein Problem löst was man selbst hat. Ansonsten gibt es hier im Forum einige Threads mit Ideen für kleinere Programmierprojekte.

milos 12. Jul 2016 19:59

AW: Weiterlernen
 
Erstmal Willkommen in der Delphi-PRAXIS :thumb:

Wow, toll zu sehen das ich nicht der einzige bin der so Krank (:twisted:) im Kopf war um von sich aus gefallen an sowas zu finden und sich selbst an zu eignen. (War damals 10 und als ich mich hier angemeldet habe 11/12 Jahre alt lol)

Ich denke auch das man mit einfachem "Learning by doing" am schnellsten und für sich am besten voran kommt. Bücher sind heutzutage zu schnell veraltet und vieles findet man in der Delphi Language Reference und Sachen dazu findet man online genügend z.B. das sieht doch ziemlich simpel und brauchbar aus für den Anfang.

Natürlich kannst du auch immer hier nachfragen falls du nirgends Informationen dazu findest.

Freundliche Grüsse

teodorfon 12. Jul 2016 20:48

AW: Weiterlernen
 
Zitat:

Zitat von scrat1979 (Beitrag 1342517)
Delphi Treff Tutorials wäre eine Anlaufstelle. Sonst ist auch Google dein Freund.

Viel Spaß!

Danke,für die schnelle antwort werde mal da reinschauen! :)
PS:Vielen Dank auch für die anderen antoworten.

mensch72 12. Jul 2016 20:56

AW: Weiterlernen
 
1. Schön, das du etwas Spass am Programmieren gefunden hast
2. Schön, das du mit Pascal in Form von Delphi zurecht kommst :)
3. Schön, das du auch "alleine" weitermachen/weiter kommen willst

Meiner Erfahrung.. das Allerwichtigste: erhalte dir den Spaß !!!
Schnelle kleine Programme die dir selbst und anderen was zeigen können, sind anfangs wichtiger wie schönes internes Programmdesign was aber nur ein paar Textausgaben macht.
Wenn du irgendwann selbst erkennst, das du deinen Code strukturieren musst, weil du nach ein paar Monaten in deinem Quelltext nicht mehr durchblickst, dann ist das eine wichtige Erkenntnis, und dann macht auch das "säubern" / neu und "schön" schreiben des Programms Spass.

Wenn du Delphi im Kopf hast, solltest du in dein Hobby etwas Geld investieren. Hole dir ein aktuelles RadStudio Berlin 10.1pro als Schulversion für 165Eur. (das Geld ist nur zum Lernen investiert, denn offiziell darfst du kein eigenes Programm was du damit erstellt hast an andere weitergeben... auch wenn es weh tut, es ist als SSL trotzdem sehr PREISWERT!!!)

http://www.edv-buchversand.de/produc...ition%2C%20SSL

Wenn du später weißt was du machst und was du willst, kannst du immernoch die Opensource Sachen ala Lazerus,Freepascal,CodeTyphon dir anschauen und für Programme zur Weitergabe nutzen, bzw. einen Chef finden der dir eine Vollversion von Delphi kauft:)

(wenn du kein Geld für ne IDE ausgeben WILLST oder aus Prinzip nur mit Opensource und kostenloser Software arbeiten möchtest, dann wirst du mit Delphi/RadStudio nicht glücklich

teodorfon 13. Jul 2016 23:56

AW: Weiterlernen
 
Abend alle,wollte jetzt kein thread für mein problem aufmachen,das lernen geht schon ein wenig voran aber leider weiss nicht genau warum mein "loop" (hoff dass der begriff gut gewählt ist) nicht funktioniert.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if shape1.Left>=0 then begin
timer1.Interval:=100;
shape1.Left:=shape1.Left+30;
if shape1.Left=150 then timer1.Enabled:=false;
if timer2.Enabled=false then timer1.Enabled:=true; //geht nicht .____.
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if timer1.Enabled=false then begin
timer2.Interval:=100;
shape1.left:=shape1.Left-30;
if shape1.Left=0 then timer2.Enabled:=false;
end;
end;
end.
Wollte ein wenig mit den Shapes rumspielen... :?

blawen 14. Jul 2016 00:19

AW: Weiterlernen
 
- Verwende für Quelltexte im Forum möglichst immer die Delphi-Tags (Helm-Symbol)
- Rücke den Code möglichst sinnvoll ein, dies bringt nicht nur Dir eine bessere Übersicht.
- Direkte Überprüfung auf True oder False ist schlecht, besser Du verwendest folgende Form
Delphi-Quellcode:
if Timer1.Enabled then....
if NOT Timer1.Enabled then...
Zitat:

Delphi-Quellcode:
procedure tform1.timer1timer(sender: Tobject);
begin
  if shape1.left >= 0 
  then begin
    timer1.interval := 100;
    shape1.left    := shape1.left + 30;
    if shape1.left   = 150   then timer1.enabled:=false;
    if timer2.enabled then timer1.enabled := true; //Macht keinen Sinn -> ev. falscher Timer?
  end;
end;

procedure tform1.timer2timer(sender: Tobject);
begin
  if timer1.enabled
  then begin
    timer2.interval := 100;
    shape1.left    := shape1.left - 30;
    if shape1.left = 0 then timer2.enabled := false;
  end;
end;

end.

Die Procedure tform1.timer1timer wird aufgerufen, wenn der Timer1 aktiv ist und das definierte Intervall abgelaufen ist.
Insofern macht die beanstandete Zeile keinen Sinn - der Timer1 läuft ja bereits. Ich nehme mal an, dass Du eigentlich den Timer2 starten willst?

teodorfon 14. Jul 2016 00:30

AW: Weiterlernen
 
Das problem ist das,das programm sich nicht "wiederholt" nachdem timer1 und timer2 einmal ausgeführt wurden stopt das programm...
Delphi-Quellcode:
if timer2.enabled = false then timer1.enabled:=true; //geht nicht .____.
<---Mein versuch den loop zu wiederholen wen er einmal ausgeführt wurde.

blawen 14. Jul 2016 00:55

AW: Weiterlernen
 
Zitat:

Zitat von teodorfon (Beitrag 1342618)
Das problem ist das,das programm sich nicht "wiederholt" nachdem timer1 und timer2 einmal ausgeführt wurden stopt das programm...
Delphi-Quellcode:
if timer2.enabled = false then timer1.enabled:=true; //geht nicht .____.
<---Mein versuch den loop zu wiederholen wen er einmal ausgeführt wurde.

Die Timer laufen grundsätzlich solange, bis sie gestoppt werden.

Code:
Stopp-Bedingungen
Timer 1: shape1.left = 150
Timer 2: shape1.left = 0
Untersuchen wir mal Timer1.
Annahme Shape.Left ist zu Beginn "0". Somit müsste der Timer1 genau 5x ausgeführt werden und danach stoppen.
In diesem Zusammenhang wäre es besser für die Abbruchbedingung ">= 150" einzusetzen.
Aber wie wird der Timer1 wieder gestartet? (gilt auch für Timer2)

Timer2:
Die Zeile
Delphi-Quellcode:
if timer1.enabled
  then begin
macht irgendwie keinen Sinn... ebenso
Delphi-Quellcode:
timer2.interval := 100;
Delphi-Quellcode:
procedure tform1.timer1timer(sender: Tobject);
begin
  if shape1.left >= 0
  then begin
    timer1.interval := 100;
    shape1.left := shape1.left + 30;

    if shape1.left = 150 
    then begin
      timer1.enabled := false;
      timer2.enabled := true;
    end;

  end;
end;

procedure tform1.timer2timer(sender: Tobject);
begin
  if timer1.enabled
  then begin
    timer2.interval := 100;
    shape1.left := shape1.left - 30;

    if shape1.left <= 0 
    then begin
      timer1.enabled := true;
      timer2.enabled := false;
    end;

  end;
end;

end.

Sir Rufo 14. Jul 2016 01:04

AW: Weiterlernen
 
Nimm einfach einen Timer, lass den einfach immer durchlaufen und ändere die Schrittweite ab.
Delphi-Quellcode:
TForm1 = class( TForm )
...
private
  FShapeIncrement: Integer;
public
  procedure AfterConstruction; override;
end;

procedure TForm1.AfterConstruction;
begin
  inherited;
  // Startwert festlegen
  FShapeIncrement := 30;
end;

procedure TForm1.Timer1OnTimer( Sender: TObject );
var
  newLeft: Integer;
  maxLeft: Integer;
begin
  newLeft := Shape1.Left + FShapeIncrement;
  maxLeft := Shape1.Parent.ClientWidth - Shape1.Width;

  if newLeft <= 0
  then
    begin
      newLeft := 0;
      FShapeIncrement := - FShapeIncrement;
    end
  else if newLeft >= maxLeft
  then
    begin
      newLeft := maxLeft;
      FShapeIncrement := - FShapeIncrement;
    end;

  Shape1.Left := newLeft;
end;

blawen 14. Jul 2016 01:07

AW: Weiterlernen
 
Folgender Code funktioniert: (Bedingung Shape1.Left ist zu Beginn = 0)
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if shape1.left < 150 then shape1.left := shape1.left + 30;

  if shape1.left >= 150
  then begin
    timer2.enabled := true;
    timer1.enabled := false;
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if shape1.left > 0 then shape1.left := shape1.left - 30;

  if shape1.left <= 0
  then begin
    timer1.enabled := true;
    timer2.enabled := false;
  end;
end;
Aber ich gebe Sir Rufo Recht, ein Timer ist besser :-)

teodorfon 14. Jul 2016 12:37

AW: Weiterlernen
 
Vielen dank,euch beiden ^_^ !

teodorfon 18. Jul 2016 20:46

AW: Weiterlernen
 
Ist mir jetzt ein wenig peinlich wieder nach hilfe zu suchen,leider hab ich schon ein paar tage versucht das programm hinzubekommen,ohne erfolg... :oops:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
 IF timer1.enabled:=true then
begin

 IF key = VK_Down  THEN shape1.Top := shape1.Top +5;
 IF key = VK_UP    THEN shape1.Top := shape1.Top -5;
 IF key = VK_RIGHT THEN shape1.Left := shape1.Left +5;
 IF key = VK_LEFT  THEN shape1.Left := shape1.Left -5;
end;
  end;
  procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if shape1.left < 150 then shape1.left := shape1.left + 30;

  if shape1.left >= 150
  then begin
    timer2.enabled := true;
    timer1.enabled := false;
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if shape1.left > 0 then shape1.left := shape1.left - 30;

  if shape1.left <= 0
  then begin
    timer1.enabled := true;
    timer2.enabled := false;
  end;
end;


end.
Die idee ist es erstmal den Shape 2 auf gleiche höhe wie Shape1 zu setzen,wenn das erst mal möglich ist wollte ich eine collision detection einzubauen.Nur funktioniert die KeyDown procedure nicht.Hoffe dass solch eine frage nicht doppelt gestellt wurde,aber die anderen themen haben mir leider nicht geholfen...

milos 18. Jul 2016 21:41

AW: Weiterlernen
 
Hi,

Was funktioniert da genau nicht? Falls die prozedur gar nicht aufgerufen wird, versuche mal die KeyPreview Eigenschaft von deinem Formular auf True zu setzen.

Edit:
Ok, beim 2. Blick ist es nicht zu übersehen. :cyclops:
Du solltest dir unbedingt angewöhnen deinen Code richtig einzurücken, denn so kann (bzw. will :stupid:) das doch keiner lesen. :D
Das hilft dir wirklich weiter wenn du später lange und komplexe Algorithmen schreibst, denn du siehst "automatisch" wo du gerade im Code bist und kannst ganz klare Abschnitte/Trennungen schaffen. Ausserdem hättest du so das Problem dann ganz einfach selbst bemerkt ;)

Und zwar fehlt da sehr wahrscheinlich das begin der Prozedur. So sollte der Code kompilierbar sein: (nicht getestet - aber lesbar formatiert ist er! :D)
Nachtrag: Du hast noch einen Fehler drin und zwar bei dir auf der 3. Zeile (
Delphi-Quellcode:
IF timer1.enabled:=true then
) versuchst du eine Abfrage mit dem "Zuweisungszeichen" (:=) zu machen. Bei abfragen fragst du aber nur mit dem Gleich-Zeichen (=) ab. Im unteren Code ist es korrigiert.
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF timer1.enabled=true then // Du könntest auch ganz einfach "if timer1.enabled then" abfragen für TRUE.
  begin
    IF key = VK_Down THEN shape1.Top := shape1.Top +5;
    IF key = VK_UP THEN shape1.Top := shape1.Top -5;
    IF key = VK_RIGHT THEN shape1.Left := shape1.Left +5;
    IF key = VK_LEFT THEN shape1.Left := shape1.Left -5;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if shape1.left < 150 then shape1.left := shape1.left + 30;

  if shape1.left >= 150
  then begin
    timer2.enabled := true;
    timer1.enabled := false;
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if shape1.left > 0 then shape1.left := shape1.left - 30;

  if shape1.left <= 0
  then begin
    timer1.enabled := true;
    timer2.enabled := false;
  end;
end;
Auch wäre es sehr empfehlenswert uns den Fehler mitzuteilen der dir der Compiler ausspuckt - auch ein sehr guter Hinweis was der Fehler sein könnte. :)
Find ich sehr gut das du aus eigenem Antrieb weiter lernst. Weiter so! :thumb:

Freundliche Grüsse

teodorfon 18. Jul 2016 22:18

AW: Weiterlernen
 
Zitat:

Zitat von milos (Beitrag 1342936)
Hi,

Was funktioniert da genau nicht? Falls die prozedur gar nicht aufgerufen wird, versuche mal die KeyPreview Eigenschaft von deinem Formular auf True zu setzen.

Edit:
Ok, beim 2. Blick ist es nicht zu übersehen. :cyclops:
Du solltest dir unbedingt angewöhnen deinen Code richtig einzurücken, denn so kann (bzw. will :stupid:) das doch keiner lesen. :D
Das hilft dir wirklich weiter wenn du später lange und komplexe Algorithmen schreibst, denn du siehst "automatisch" wo du gerade im Code bist und kannst ganz klare Abschnitte/Trennungen schaffen. Ausserdem hättest du so das Problem dann ganz einfach selbst bemerkt ;)

Und zwar fehlt da sehr wahrscheinlich das begin der Prozedur. So sollte der Code kompilierbar sein: (nicht getestet - aber lesbar formatiert ist er! :D)
Nachtrag: Du hast noch einen Fehler drin und zwar bei dir auf der 3. Zeile (
Delphi-Quellcode:
IF timer1.enabled:=true then
) versuchst du eine Abfrage mit dem "Zuweisungszeichen" (:=) zu machen. Bei abfragen fragst du aber nur mit dem Gleich-Zeichen (=) ab. Im unteren Code ist es korrigiert.
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF timer1.enabled=true then // Du könntest auch ganz einfach "if timer1.enabled then" abfragen für TRUE.
  begin
    IF key = VK_Down THEN shape1.Top := shape1.Top +5;
    IF key = VK_UP THEN shape1.Top := shape1.Top -5;
    IF key = VK_RIGHT THEN shape1.Left := shape1.Left +5;
    IF key = VK_LEFT THEN shape1.Left := shape1.Left -5;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if shape1.left < 150 then shape1.left := shape1.left + 30;

  if shape1.left >= 150
  then begin
    timer2.enabled := true;
    timer1.enabled := false;
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if shape1.left > 0 then shape1.left := shape1.left - 30;

  if shape1.left <= 0
  then begin
    timer1.enabled := true;
    timer2.enabled := false;
  end;
end;
Auch wäre es sehr empfehlenswert uns den Fehler mitzuteilen der dir der Compiler ausspuckt - auch ein sehr guter Hinweis was der Fehler sein könnte. :)
Find ich sehr gut das du aus eigenem Antrieb weiter lernst. Weiter so! :thumb:

Freundliche Grüsse

Ich hab ganz vergessen zu sagen was mit dem programm nicht stimmt...:oops:
Ich bekomme keine fehlermeldung aber der Shape 2 bewegt sich leider nicht wenn ich meine pfeiltasten benutze.
PS:Ich wollte gar nicht eine IF schleife haben,wo kommt denn hier,bin halt ein profi programmierer:lol:

milos 18. Jul 2016 22:35

AW: Weiterlernen
 
Zitat:

Zitat von teodorfon (Beitrag 1342937)
Ich hab ganz vergessen zu sagen was mit dem programm nicht stimmt...:oops:
Ich bekomme keine fehlermeldung ...

Das kann nicht sein, der Code den du gepostet hast ist so nicht kompillierbar. Bist du sicher das du uns den richtigen Code geschickt hast?
Wenn du dein Shape mit den Pfeiltasten bewegen willst brauchst du doch nicht die 2 Timer die da dazwischen funken und dein Shape selbst auch bewegen oder?

Zitat:

Zitat von teodorfon (Beitrag 1342937)
... aber der Shape 2 bewegt sich leider nicht wenn ich meine pfeiltasten benutze.

Im Code bewegst du ja auch Shape1, sowohl in den Timern als auch mit den Pfeiltasten.
Ich würde erstmal nachsehen ob OnKeyDown überhaupt getriggert wird indem du dort einen Haltepunkt setzt und mit F9 den Debugger startest, dann kannst du auch sehen ob sich da überhaupt was tut.

Zitat:

Zitat von teodorfon (Beitrag 1342937)
PS:Ich wollte gar nicht eine IF schleife haben,wo kommt denn hier,bin halt ein profi programmierer:lol:

Steht bei dir auf der 3. Zeile im Code, ich denke mal das du uns einen anderen Code gegeben hast.
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF key = VK_Down THEN shape2.Top := shape2.Top +5;
  IF key = VK_UP THEN shape2.Top := shape2.Top -5;
  IF key = VK_RIGHT THEN shape2.Left := shape2.Left +5;
  IF key = VK_LEFT THEN shape2.Left := shape2.Left -5;
end;
Hier ist die if-abfrage die du ja nicht willst draussen und es wird auch shape2 (Falls es denn auch wirklich shape2 heisst!) bewegt.

Freundliche Grüsse

teodorfon 3. Aug 2016 13:15

AW: Weiterlernen
 
Zitat:

Zitat von milos (Beitrag 1342939)
Zitat:

Zitat von teodorfon (Beitrag 1342937)
Ich hab ganz vergessen zu sagen was mit dem programm nicht stimmt...:oops:
Ich bekomme keine fehlermeldung ...

Das kann nicht sein, der Code den du gepostet hast ist so nicht kompillierbar. Bist du sicher das du uns den richtigen Code geschickt hast?
Wenn du dein Shape mit den Pfeiltasten bewegen willst brauchst du doch nicht die 2 Timer die da dazwischen funken und dein Shape selbst auch bewegen oder?

Zitat:

Zitat von teodorfon (Beitrag 1342937)
... aber der Shape 2 bewegt sich leider nicht wenn ich meine pfeiltasten benutze.

Im Code bewegst du ja auch Shape1, sowohl in den Timern als auch mit den Pfeiltasten.
Ich würde erstmal nachsehen ob OnKeyDown überhaupt getriggert wird indem du dort einen Haltepunkt setzt und mit F9 den Debugger startest, dann kannst du auch sehen ob sich da überhaupt was tut.

Zitat:

Zitat von teodorfon (Beitrag 1342937)
PS:Ich wollte gar nicht eine IF schleife haben,wo kommt denn hier,bin halt ein profi programmierer:lol:

Steht bei dir auf der 3. Zeile im Code, ich denke mal das du uns einen anderen Code gegeben hast.
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF key = VK_Down THEN shape2.Top := shape2.Top +5;
  IF key = VK_UP THEN shape2.Top := shape2.Top -5;
  IF key = VK_RIGHT THEN shape2.Left := shape2.Left +5;
  IF key = VK_LEFT THEN shape2.Left := shape2.Left -5;
end;
Hier ist die if-abfrage die du ja nicht willst draussen und es wird auch shape2 (Falls es denn auch wirklich shape2 heisst!) bewegt.

Freundliche Grüsse

Erstens,entschuldigung für die späte antwort ich war im Urlaub... :oops:
Denn code kann ich kompallieren weil ich den ersten teil des codes nicht beutzt habe.
Jetzt das ich wieder da bin will fleissig weiterlernen,und ich wollte wissen was ich alles brauche um ein einfaches 2D-Jump'n'Run zu machen,ich glaub es sollte als mein erstes projekt mehr realistisch sein alls ein MMORPG. :-D

teodorfon 7. Aug 2016 13:09

AW: Weiterlernen
 
Wollte einen einfachen Countdown programmieren,den Code kann man kompilieren,es kommt keine Fehler meldung.
Will wirklich keine zeit von euch verschwenden. :?

Delphi-Quellcode:
var
  Form1: TForm1;
  TotalTime:TTime;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin

totaltime:=1000;
timer1.Interval:=1000;
label1.Caption:=Timetostr(totaltime-1);

end;

end.

BUG 7. Aug 2016 16:23

AW: Weiterlernen
 
Zitat:

Zitat von teodorfon (Beitrag 1344318)
Will wirklich keine zeit von euch verschwenden. :?

Überlege wann Timer1Timer aufgerufen wird, und was in jeder der 3 Zeilen passiert. Am besten du schreibst das einfach hier als Antwort ... entweder springt dich beim Schreiben das Problem an oder wir können dir sagen, wo du eine falsche Annahme getroffen hast.

teodorfon 7. Aug 2016 17:43

AW: Weiterlernen
 
Zitat:

Überlege wann Timer1Timer aufgerufen wird
Der intervall ist ja auf 1000 was eine sekunde ist,also sollte sich die procedure jede sekunde wierholen,wenn nicht hab ich es nicht richtig verstanden.
Zitat:

und was in jeder der 3 Zeilen passiert
totaltime:=1000 Also das sollte eig. der anfangswert des CountDowns sein.
timer1.Interval:=1000;Wie oft sich die procedure wiederholt (Glaub das wird das einzige richtig sein :lol: )
aber immer nur label1.Caption:=Timetostr(totaltime-1); Hier sollte sich der CountDown anzeigen,da der wert in der labele sich wohl nicht verändert und auf 999 bleiben sollte.Zeigt aber immer nur 00:00:00 an,sollte es wohl anders machen?Zbs. x:=totaltime-1;

SProske 8. Aug 2016 08:17

AW: Weiterlernen
 
TDateTime, TTime und TDate sind allesamt intern Double-Werte, bei denen der ganzzahlige Anteil zur Verschlüsselung des Datums und der Nachkomma-Anteil zur Verschlüsselung der Zeit verwendet wird. Deswegen erhältst du immer die Zeit 00:00:00 - 1000 und 999 sind eben ganze Zahlen. Zur Arbeit mit Zeit-/Datums-Werten solltest du die Unit DateUtils verwenden:

Delphi-Quellcode:
//totaltime initialisieren
totaltime := IncSecond(0, 1000);

//1 Sekunde abziehen
totaltime := IncSecond(totaltime, -1);
Ich gehe einfach mal davon aus, dass du hier mit 1000 Sekunden arbeiten willst - sonst eben Millisekunden, Minuten oder Stunden verwenden.
Die Initialisierung von totaltime sollte natürlich außerhalb des OnTimer-Events geschehen.

Die Eigenschaft Interval eines TTimer gibt an, alle wieviel Millisekunden das OnTimer-Event ausgelöst wird, bei 1000 also jede Sekunde.

OlafSt 8. Aug 2016 08:20

AW: Weiterlernen
 
Stell dir vor, DU bist der Computer. Also tu einfach das, was der Computer auch tun würde.

Es wird der Timer ausgelöst und Timer1Timer aufgerufen.
Du stellt TotalTime auf 1000.
Du setzt das Timerintervall auf 1000.
Du zeigst TotalTime-1 an, also 999.
Fertig.

Nach einer Sekunde wird der Timer ausgelöst und Timer1Timer aufgerufen.
Du stellt TotalTime auf 1000.
Du setzt das Timerintervall auf 1000.
Du zeigst TotalTime-1 an, also 999.
Fertig.

Nach einer Sekunde wird der Timer ausgelöst und Timer1Timer aufgerufen.
Du stellt TotalTime auf 1000....

Kapiert ? :-D

teodorfon 8. Aug 2016 22:20

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344341)
TDateTime, TTime und TDate sind allesamt intern Double-Werte, bei denen der ganzzahlige Anteil zur Verschlüsselung des Datums und der Nachkomma-Anteil zur Verschlüsselung der Zeit verwendet wird. Deswegen erhältst du immer die Zeit 00:00:00 - 1000 und 999 sind eben ganze Zahlen. Zur Arbeit mit Zeit-/Datums-Werten solltest du die Unit DateUtils verwenden:

Delphi-Quellcode:
//totaltime initialisieren
totaltime := IncSecond(0, 1000);

//1 Sekunde abziehen
totaltime := IncSecond(totaltime, -1);
Ich gehe einfach mal davon aus, dass du hier mit 1000 Sekunden arbeiten willst - sonst eben Millisekunden, Minuten oder Stunden verwenden.
Die Initialisierung von totaltime sollte natürlich außerhalb des OnTimer-Events geschehen.

Die Eigenschaft Interval eines TTimer gibt an, alle wieviel Millisekunden das OnTimer-Event ausgelöst wird, bei 1000 also jede Sekunde.


Delphi-Quellcode:
var
  Form1: TForm1;
  TotalTime:TTime;
  incsecond:TDateTime;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
totaltime := IncSecond (0, 1000); //Fehler meldung "missing operator or semicolon"
timer1.Interval:=1000;
label1.Caption:=Timetostr(totaltime);

end;

end.
Fühl mich jetzt etwas doof...

nahpets 8. Aug 2016 22:37

AW: Weiterlernen
 
Wenn ich das richtig sehe, möchtest Du jede Sekunde die Totalzeit um eine Sekunde erhöhen verringern.

Wie wäre es denn dann einfach mit
Delphi-Quellcode:
totaltime := totaltime - (1 / 86400);
In einem Datetimewert steht 1 für einen Tag. Ein Tag hat 24 * 60 * 60 = 86400 Sekunden. Eine Sekunde ist also 1 / 86400 und diesen Wert musst Du dann pro Sekunde zu von Deinem Zeitzähler addieren subtrahieren.

Delphi-Quellcode:
totaltime := IncSecond(toteltime,-1);
sollte die gleiche Wirkung haben.

Das Timerintervall muss nicht bei jedem Aufruf der des Timerereignisses neu gesetzt werden. Das
Delphi-Quellcode:
timer1.Interval := 1000;
kann entfallen.

SProske 8. Aug 2016 22:38

AW: Weiterlernen
 
IncSecond ist eine Funktion aus der Unit DateUtils, mir ist nicht ganz klar, wieso du das als Variable deklarierst.
Dadurch dass du es als Variable deklarierst, wird an der Stelle natürlich versucht, auch darauf zurückzugreifen, was nicht wirklich funktionieren kann.

Das Initialisieren von totaltime sollte noch immer nicht in der onTimer-Methode geschehen, sondern z.b. im OnCreate des Formulars.

blawen 8. Aug 2016 22:45

AW: Weiterlernen
 
Es liegen grundsätzlich mehrere Fehler vor.
Zum einen solltest Du Dir den Post #25 zu Herzen nehmen und versuchen, den Ablauf wie dort beschrieben, nachzuvollziehen.
Du wirst feststellen, dass die folgenden Zeilen im Timer-Event nichts zu suchen haben - wieso, wirst Du sicher noch herausfinden.

Delphi-Quellcode:
...
timer1.Interval:=1000;
...
Der "zweite" Fehler liegt darin, dass Du eine Variable Namens IncSecond definierst.
Eigentlich möchtest Du ja die gleichnamige Funktion aufrufen - also die Zeile ersatzlos streichen.
Delphi-Quellcode:
var
  incsecond:TDateTime;

teodorfon 8. Aug 2016 22:54

AW: Weiterlernen
 
Zitat:

Zitat von blawen (Beitrag 1344431)
Es liegen grundsätzlich mehrere Fehler vor.
Zum einen solltest Du Dir den Post #25 zu Herzen nehmen und versuchen, den Ablauf wie dort beschrieben, nachzuvollziehen.
Du wirst feststellen, dass die folgenden Zeilen im Timer-Event nichts zu suchen haben - wieso, wirst Du sicher noch herausfinden.

Delphi-Quellcode:
...
timer1.Interval:=1000;
...
Der "zweite" Fehler liegt darin, dass Du eine Variable Namens IncSecond definierst.
Eigentlich möchtest Du ja die gleichnamige Funktion aufrufen - also die Zeile ersatzlos streichen.
Delphi-Quellcode:
var
  incsecond:TDateTime;

Dann kommt aber eine andere fehlermeldung, "undeclared identifier:"IncSecond".
Sollte ich sagen das ich Delphi 7 benutzte?

SProske 8. Aug 2016 22:57

AW: Weiterlernen
 
Auch unter Delphi 7 solltest du DateUtils in den uses einbinden können:

Delphi-Quellcode:
implementation

uses
  DateUtils;

teodorfon 11. Aug 2016 19:05

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344433)
Auch unter Delphi 7 solltest du DateUtils in den uses einbinden können:

Delphi-Quellcode:
implementation

uses
  DateUtils;

Achsoooooo. :oops:
Ehm,ok jetzt klappt fast alles nur dass sich der timer nicht wiederholt.Die labele zeigt nur 00:00:59 an,und nach einer sekunde bleibt es auf 00:00:59.
Delphi-Quellcode:
var
  Form1: TForm1;
  TotalTime,x:TTime;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
totaltime := IncSecond (0, 60);
totaltime := IncSecond (totaltime,-1); //Versucht durch "x" variable zu ersetzen,gleiches resultat.
label1.Caption:=Timetostr(totaltime );

end;

end.

SProske 11. Aug 2016 20:01

AW: Weiterlernen
 
Noch einmal - das Initialisieren der totaltime Variable gehört nicht in das OnTimer-Event. Du setzt bei jedem Durchlauf totaltime erst auf 60, dann auf 59 Sekunden.
Diese Intialisierung solltest du z.B. im OnCreate des Formulars durchführen.

teodorfon 11. Aug 2016 20:45

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344723)
Noch einmal - das Initialisieren der totaltime Variable gehört nicht in das OnTimer-Event. Du setzt bei jedem Durchlauf totaltime erst auf 60, dann auf 59 Sekunden.
Diese Intialisierung solltest du z.B. im OnCreate des Formulars durchführen.

Ok,was ich grad gefunden habe ist das sich OnCreate ein event ist das sich nur aktiviert wen ich eine neue TForm erstelle,was ich auch gemacht habe,danach auf Oncreate im "Event",auf der zweiten habe ich eine neue labele erstellt und die letzte zeile von dem code eingefügt.Leider kam eine fehlermeldung das "totaltime" nicht erkannt wurde,im "uses" habe ich "Unit1" eingefügt was den fehler weg machte.Leider bleibt die labele immernoch gleich. :pale:

SProske 11. Aug 2016 20:53

AW: Weiterlernen
 
Ich weiß leider nicht genau, welche Delphi-Version du einsetzt.
Als erstes solltest du das neue Formular gleich mal wieder löschen - und auf das alte Wechseln.
In der Designansicht kannst du jede vorhandene Komponente anwählen, auch das grundlegende Formular. Im Objektinspektor sollte es dann zwei Reiter "Eigenschaften" und "Ereignisse" - dort in den Reiter Ereignisse wechseln. Da solltest du dann ein OnCreate finden und dann einfach in das leere Edit rechts daneben doppelklicken, dann sollte im Code der Rumpf für das FormCreate erscheinen.

teodorfon 11. Aug 2016 20:59

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344726)
Ich weiß leider nicht genau, welche Delphi-Version du einsetzt.
Als erstes solltest du das neue Formular gleich mal wieder löschen - und auf das alte Wechseln.
In der Designansicht kannst du jede vorhandene Komponente anwählen, auch das grundlegende Formular. Im Objektinspektor sollte es dann zwei Reiter "Eigenschaften" und "Ereignisse" - dort in den Reiter Ereignisse wechseln. Da solltest du dann ein OnCreate finden und dann einfach in das leere Edit rechts daneben doppelklicken, dann sollte im Code der Rumpf für das FormCreate erscheinen.

Delphi-Quellcode:
var
  Form1: TForm1;
  TotalTime,x:TTime;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
totaltime := IncSecond (0,60);
totaltime := IncSecond (totaltime,-1);


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:=Timetostr(totaltime );
end;

end.
Ah,man braucht also nicht zwei Formen. :lol:
Will jetzt nicht dass ganze forum voll spamen,aber die label zeigt einfach 00:00:00 an.
PS:Ich benuzte Delphi 7.

SProske 11. Aug 2016 21:07

AW: Weiterlernen
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //bei jedem Aufruf des Timer-Ereignisses
  totaltime := IncSecond(totaltime, -1); //1 Sekunde abziehen
  label1.Caption:=Timetostr(totaltime); //Label aktualisieren
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  totaltime := IncSecond (0,60); //hier deine Variable initialisieren!
end;

end.

teodorfon 11. Aug 2016 21:49

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344728)
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //bei jedem Aufruf des Timer-Ereignisses
  totaltime := IncSecond(totaltime, -1); //1 Sekunde abziehen
  label1.Caption:=Timetostr(totaltime); //Label aktualisieren
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  totaltime := IncSecond (0,60); //hier deine Variable initialisieren!
end;

end.

DANKE! :shock:
PS:Muss ich das so machen weil sich die variable sonst bei jedem timer tick "resetet" ?

SProske 11. Aug 2016 21:59

AW: Weiterlernen
 
Die resettet sich nicht von alleine - du machst das.

Delphi-Quellcode:
totaltime := IncSecond (0,60);
setzt totaltime auf den Wert 60 Sekunden.

teodorfon 11. Aug 2016 23:34

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344730)
Die resettet sich nicht von alleine - du machst das.

Delphi-Quellcode:
totaltime := IncSecond (0,60);
setzt totaltime auf den Wert 60 Sekunden.

Vielen Dank für deine Hilfe,kannst du mir nur sagen wie ich 2 Formen verbinde,also um genau zu sein wie ich die werte der variablen von zbs. Form1 zur Form2 schicke?
Und war es möglich,eine procedure zu erstellen die "OnCreate" ersetzt,weiss eigentlich nicht so viel über proceduren. :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz