summaryrefslogtreecommitdiff
path: root/unit1.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-11-16 17:01:51 +0100
committerErich Eckner <git@eckner.net>2015-11-17 09:08:18 +0100
commit1d920d1dcced3b59825182520878cd7ba5672914 (patch)
tree0a0fc59648e64817e72488af591b8e471e28360a /unit1.pas
parente99f3fec7e287b879ceeb0f0d95185cf2ab0791e (diff)
downloadFH-Wetter-1d920d1dcced3b59825182520878cd7ba5672914.tar.xz
Pegel funktionieren jetzt soweit
Diffstat (limited to 'unit1.pas')
-rw-r--r--unit1.pas90
1 files changed, 85 insertions, 5 deletions
diff --git a/unit1.pas b/unit1.pas
index b06b54d..a86e19d 100644
--- a/unit1.pas
+++ b/unit1.pas
@@ -1,29 +1,34 @@
unit Unit1;
-{$mode objfpc}{$H+}
-
interface
uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
+ Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, pegelUnit;
type
{ TForm1 }
TForm1 = class(TForm)
+ Image1: TImage;
TrayIcon1: TTrayIcon;
+ procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
+ datenZeitRaum: extended;
+ pegel: tPegelStaende;
+ pegelDatei: string;
public
{ public declarations }
+ procedure zeichnen;
end;
var
Form1: tForm1;
pidDatei: string;
+ fehler: boolean;
const
@@ -44,11 +49,14 @@ function letzterMonat(t: TDateTime): TPoint; // x=Monat, y=Jahr
function MyIntToStr(I,Ziff: longint): string;
*)
+function wertZuX(w: extended; startZeit,stopZeit: extended; breite: longint): longint;
+function wertZuY(w: extended; miMa: tPoint; hoehe: longint): longint;
+
implementation
{$R *.lfm}
-uses process, myStringListUnit, lowLevelUnit, systemUnit;
+uses process, myStringListUnit, lowLevelUnit, systemUnit, matheunit, math;
{ TForm1 }
@@ -59,11 +67,17 @@ var
fi: textfile;
args: array of string;
begin
+ __ausgabenMaske:=1;
pidDatei:='';
+ pegelDatei:='';
+ datenZeitRaum:=1;
+ fehler:=true;
s:=extractfilepath(application.exename)+'wetter.konf';
t:='';
if not fileexists(s) then
raise exception.create('Kann Konfigurationsdatei '''+s+''' nicht finden!');
+
+ pegel:=tPegelStaende.create(image1);
f:=tMyStringList.create;
f.loadFromFile(s);
f.unfoldMacros;
@@ -85,6 +99,7 @@ begin
closeFile(fi);
f.free;
o.free;
+ pegel.free;
raise exception.create('Programm läuft bereits ('+s+')!');
end;
o.free;
@@ -96,18 +111,83 @@ begin
closeFile(fi);
continue;
end;
+ if startetMit('pegelDatei:',s) then begin
+ pegelDatei:=s;
+ if pos('/',pegelDatei)=0 then
+ pegelDatei:=extractFilePath(application.exename)+pegelDatei;
+ pegel.laden(pegelDatei);
+ continue;
+ end;
+ if startetMit('datenZeitRaum:',s) then begin
+ datenZeitRaum:=exprtofloat(false,s,nil,nil);
+ continue;
+ end;
+ f.free;
+ pegel.free;
raise exception.create('Unbekannte Option '''+s+''' in Konfigdatei!');
end;
f.free;
- form1.caption:=inttostr(GetProcessID);
+ fehler:=false;
+ zeichnen;
+end;
+
+procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
+begin
+ pegel.putBeenden;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if fileExists(pidDatei) then
deleteFile(pidDatei);
+ if not fehler then begin
+ if pegelDatei<>'' then
+ pegel.speichern(pegelDatei);
+ end;
+ pegel.free;
+end;
+
+procedure TForm1.zeichnen;
+var
+ tmp,startZeit,stopZeit: extended;
+begin
+ fehler:=true;
+ image1.canvas.brush.color:=$ffffff;
+ image1.canvas.rectangle(-10,-10,image1.width,image1.height);
+ stopZeit:=now;
+ startZeit:=stopZeit-datenZeitRaum;
+
+ pegel.achsenZeichnen([psRudolstadt,psRothenstein],startZeit,stopZeit);
+
+ image1.canvas.pen.color:=$000000;
+ tmp:=floor(startZeit);
+ while wertZuX(tmp,startZeit,stopZeit,Image1.Width)<Image1.Width do begin
+ Image1.Canvas.MoveTo(wertZuX(tmp,startZeit,stopZeit,Image1.Width),1);
+ Image1.Canvas.LineTo(wertZuX(tmp,startZeit,stopZeit,Image1.Width),Image1.Height-1);
+ tmp:=tmp+1;
+ end;
+
+ pegel.graphenZeichnen([psRudolstadt,psRothenstein],now-datenZeitRaum,now);
+ fehler:=false;
+end;
+
+// allgemeine Funktionen *******************************************************
+
+function wertZuX(w: extended; startZeit,stopZeit: extended; breite: longint): longint;
+const
+ xScale = 3.132265450540420106833422460869303332478; // xScale / (e^xScale - 1) = 1/7
+var
+ tmp: extended;
+begin
+ tmp:=(w-startZeit)/(stopZeit-startZeit);
+ result:=round(-breite*ln(1+tmp*(exp(-xScale)-1))/xScale);
+end;
+
+function wertZuY(w: extended; miMa: tPoint; hoehe: longint): longint;
+begin
+ result:=round((w-miMa.x)/(miMa.y-miMa.x)*hoehe);
end;
end.