Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array timer, stringgrid hilft mir (https://www.delphipraxis.net/104325-array-timer-stringgrid-hilft-mir.html)

DeddyH 2. Dez 2007 19:43

Re: Array timer, stringgrid hilft mir
 
Ich bin nicht off :gruebel:

Feuerwehrmann90 2. Dez 2007 19:51

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.

nat 2. Dez 2007 19:56

Re: Array timer, stringgrid hilft mir
 
Zitat:

Zitat von Feuerwehrmann90
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=1;
timer.Enabled:=true;
for i:=1 to 60 do
SG_ausgabe.Cells[0,i]:=Inttostr(i);
SG_ausgabe.RowCount:=i;
end;

die letzte zeile ergibt nicht so viel sinn (denn sie gehört nicht mehr zur for-schleife).
du weiß ja, dass du zum schluss 61 reihen haben wirst (mit überschrift). dann kannste auch gleich
Delphi-Quellcode:
SG_ausgabe.RowCount := 61;
machen (am besten bevor du darauf in der for-schleife zugreifen willst).

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:
Messwerte: array[0..59] of Double
bzw kannste auch
Delphi-Quellcode:
Messwerte: array[1..60] of Double
machen. beide varianten erstellen einen array mit 60 elementen.
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:
Messwerte[10] := messwert;
wobei sich für die 10 natürlich eine variable
anbietet die mitzählt welches element aktuell ist.

patti 2. Dez 2007 20:07

Re: Array timer, stringgrid hilft mir
 
Ich würde es so machen:

Im OnCreate deiner Form:
Delphi-Quellcode:
i := 1;
Und im Timer-Event:
Delphi-Quellcode:
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;
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!)

P@Tti

patti 2. Dez 2007 20:15

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

Feuerwehrmann90 2. Dez 2007 20:19

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

Opa 2. Dez 2007 21:57

Re: Array timer, stringgrid hilft mir
 
Code:
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.
Beim Mittelwert kann ich mich verrechnet haben!

20 Min das ganze Ding :lol:

Ich muss jetzt das Erste sehen - den Rest nun keine Zeit mehr

Nuclear-Ping 3. Dez 2007 07:41

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:

Opa 3. Dez 2007 11:03

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

Nuclear-Ping 3. Dez 2007 12:16

Re: Array timer, stringgrid hilft mir
 
Zitat:

Zitat von Opa
Hättest Du nicht soviel geschrieben hätte ich ihm das Prg. nicht gemacht! :lol:

Hm? Wo hab ich - ausser als erste Antwort - was geschrieben? :mrgreen:

Zitat:

Zitat von Opa
Ich konnte mir "das Elend" nicht mehr antun. Im übrigen muss er das Prg. nicht nehmen.

Ich weiß, das Gefühl hab ich bei paar Fragen auch manchmal. Aber man muß abwägen, ob es demjenigen jetzt was bringt, wenn er Sourcecode sieht (weil manchmal machts ja an Hand von nem praktischen Beispiel erst richtig Klick) oder ob er dann zwar hat was er will, aber daraus nichts lernt.

Zitat:

Zitat von Opa
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:

Keine Ahnung, ob man das kann. Ich glaub du verwechselst mich grad. Aber das mit dem Rentenzahler is n gutes Argument. :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Seite 5 von 6   « Erste     345 6      

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