![]() |
Re: Array timer, stringgrid hilft mir
Ich bin nicht off :gruebel:
|
Re: Array timer, stringgrid hilft mir
bei dir hat im profil offline gestnadne kp warum
also my neur quellcode sieht aus aber kp wie weiter
Delphi-Quellcode:
ED_mittel: TEdit;
ED_min: TEdit; timer: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure timerTimer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; i:integer ; max,min,mittel:real; grad:array[1..60] of real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin i:=1; timer.Enabled:=true; end; procedure TForm1.Button2Click(Sender: TObject); begin timer.Enabled:=false; end; procedure TForm1.FormCreate(Sender: TObject); begin SG_ausgabe.Cells[0,0]:='Nummer'; SG_ausgabe.Cells[1,0]:='Datum/Zeit'; SG_ausgabe.Cells[2,0]:='Grad Celsius'; end; procedure TForm1.timerTimer(Sender: TObject); begin for i:=1 to 60 do SG_ausgabe.Cells[0,i]:=Inttostr(i); SG_ausgabe.RowCount:=i; max:=-15; min:=-26; mittel:=0; ED_mittel.Text:=FloatToStr(mittel); ED_min.text:=FloatToStr(min); ED_max.text:=FloatToStr(max); end; end. |
Re: Array timer, stringgrid hilft mir
Zitat:
du weiß ja, dass du zum schluss 61 reihen haben wirst (mit überschrift). dann kannste auch gleich
Delphi-Quellcode:
machen (am besten bevor du darauf in der for-schleife zugreifen willst).
SG_ausgabe.RowCount := 61;
der rest sieht doch schonma ganz gut aus. was dir jetzt noch fehlt ist der ontimer-event der jede sekunde ausgelöst wird und der kern der aufgabe is. es soll ja jede sekunde ein messwert hinzugefügt werden. nun erstellst du dir einen globalen array
Delphi-Quellcode:
bzw kannste auch
Messwerte: array[0..59] of Double
Delphi-Quellcode:
machen. beide varianten erstellen einen array mit 60 elementen.
Messwerte: array[1..60] of Double
bei dem einen beginnt der index für das erste element halt bei 0, bei dem anderen bei 1. wenn du dir deinen zufallsmesswert geholt hast weist du ihm einfach dem aktuellen array-element zu. z.B.
Delphi-Quellcode:
wobei sich für die 10 natürlich eine variable
Messwerte[10] := messwert;
anbietet die mitzählt welches element aktuell ist. |
Re: Array timer, stringgrid hilft mir
Ich würde es so machen:
Im OnCreate deiner Form:
Delphi-Quellcode:
Und im Timer-Event:
i := 1;
Delphi-Quellcode:
Sollte zumindest schon mal die ersten 60 Zeilen füllen (Code ist schnell aus dem Kopf raus getippt, sollte aber funktionieren. Wenn das klappt, dann kannst du dich daran machen, zu überprüfen, wenn du mehr als 60 Werte hast (Min., Max. und Durchschnitts-Wert sind noch nicht mit drin!)
if i <= 60 then
begin grad[i] := random(1000)/100-25; // neuer messwert SG_ausgabe.Cells[0,i]:=inttostr(i); SG_ausgabe.Cells[1,i]:=DateTimeToStr(Now); SG_ausgabe.Cells[2,i]:=Format('%1.2f Grad Celcius',[grad[i]]); inc(i); end; P@Tti |
Re: Array timer, stringgrid hilft mir
Liste der Anhänge anzeigen (Anzahl: 1)
So, hab meinen gerade geposteten Code getestet und es funktioniert (siehe Anhang). Soweit solltest du mit Hilfe des gesamten Threads kommen. Die Werte (min, max, durchschnitt) müsstest du noch selber berechnen und auch die Überschreitung der 60 müsstest du einbauen. Sollte jetzt alles kein großes Problem mehr sein!
P@Tti |
Re: Array timer, stringgrid hilft mir
du kp wie ich das mit den arrays soll machen
das is my problem wo cihd en ganz atg schon han |
Re: Array timer, stringgrid hilft mir
Code:
Beim Mittelwert kann ich mich verrechnet haben!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, ExtCtrls, StdCtrls; type TTemp = array[1..60] of integer; TForm1 = class(TForm) SG: TStringGrid; EditMin: TEdit; EditMax: TEdit; EditMittel: TEdit; ButtonStart: TButton; ButtonStop: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure ButtonStartClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); private Temp : TTemp; MitteWert : integer; MaxWert : integer; MinWert : integer; LaufNr : integer; procedure ClearZellen; public { Public-Deklarationen } end; var Form1: TForm1; implementation const Beschreibung : array[0..2] of string = ('Nr.:','Datum/Uhrzeit','Messwert'); {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var I : integer; begin Randomize; with SG do begin Align := alTop; ColCount := 3; RowCount := high(TTemp)+1; for I := low(Beschreibung) to high(Beschreibung) do SG.Cells[I,0] :=Beschreibung[I]; for I := low(TTemp) to high(TTemp) do Temp[I] := 0; end; Timer1.Enabled := false; ButtonStart.OnClick := ButtonStartClick; ButtonStop.OnClick := ButtonStartClick; ClearZellen; ButtonStartClick(self); end; procedure TForm1.ButtonStartClick(Sender: TObject); begin Timer1.Enabled := not Timer1.Enabled;// Button1 und zwei gleiche Procedure legen if not Timer1.Enabled then ClearZellen else; end; //------------------------------------------------------------------------------ procedure TForm1.Timer1Timer(Sender: TObject); var RMinMax : integer; I : integer; begin with SG do begin Cells[0,LaufNr] := intToStr(LaufNr); Cells[1,LaufNr] := FormatDateTime('dd-mm-yyyy-hh-nn-ss', now); RMinMax := Random(10*100)+15*100+1; Temp[LaufNr] := RMinMax; if MinWert > RMinMax then MinWert :=RMinMax; if MaxWert < RMinMax then MaxWert :=RMinMax; for I := low(TTemp) to LaufNr do MitteWert := MitteWert + Temp[LaufNr]; MitteWert := MitteWert div LaufNr; Cells[2,LaufNr] := FloatToStr(Temp[LaufNr]/100*(-1)); EditMittel.Text := FloatToStr(MitteWert/100*(-1)); EditMax.Text := FloatToStr(MaxWert/100*(-1)); EditMin.Text := FloatToStr(MinWert/100*(-1)); inc(LaufNr); // if LaufNr > 60 then begin LaufNr := 1;MitteWert := 0;end; if LaufNr > 60 then ClearZellen; end; end; //****************************************************************************** procedure TForm1.ClearZellen; var I,J : integer; begin for I := low(TTemp) to High(TTemp) do for J := low(Beschreibung) to high(Beschreibung) do SG.Cells[J,I]:=''; LaufNr := 1; MitteWert := 0; MaxWert := 0; MinWert := 9999; end; end. 20 Min das ganze Ding :lol: Ich muss jetzt das Erste sehen - den Rest nun keine Zeit mehr |
Re: Array timer, stringgrid hilft mir
Super, hat sich also doch jemand gefunden, der ihm das ganze Programm gemacht hat. :thumb:
Man muss nur 4 Seiten lang schreiben, dass man was nicht hinkriegt und verzweifelt. Irgendwann machts dann einer, aus was für Gründen auch immer. Muss ich mir merken. ;) Fazit: Freut mich zwar für den Feuerwehrmann. Aber in der Schule kann er den Source sicher nicht erläutern und der Lerneffekt geht (mal wieder) gegen 0. :cheers: |
Re: Array timer, stringgrid hilft mir
Hättest Du nicht soviel geschrieben hätte ich ihm das Prg. nicht gemacht! :lol:
Ich konnte mir "das Elend" nicht mehr antun. Im übrigen muss er das Prg. nicht nehmen. Es war im übrigen nach 21 Uhr gewesen als ich das gemacht habe und irgendwann muss er auch schlafen. In einen Tag kann man nicht lehren was man wochenlang verpasst hat. Ich fand im übrigen, dass man auf reale Zahlen verzichten kann. Ist viel zu umständlich. Wie dem auch sei ich verzeihe Dir noch mal. Ich muss auch darüber nachdenken das er mein zukünftiger Rentenzahler sein wird, es nütz mir also nichts, wenn er wegen Faulheit aus der Schule fliegt. :zwinker: Mfg |
Re: Array timer, stringgrid hilft mir
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 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 by Thomas Breitkreuz