diff options
author | Erich Eckner <git@eckner.net> | 2015-11-16 17:01:51 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2015-11-17 09:08:18 +0100 |
commit | 1d920d1dcced3b59825182520878cd7ba5672914 (patch) | |
tree | 0a0fc59648e64817e72488af591b8e471e28360a /unit1.pas | |
parent | e99f3fec7e287b879ceeb0f0d95185cf2ab0791e (diff) | |
download | FH-Wetter-1d920d1dcced3b59825182520878cd7ba5672914.tar.xz |
Pegel funktionieren jetzt soweit
Diffstat (limited to 'unit1.pas')
-rw-r--r-- | unit1.pas | 90 |
1 files changed, 85 insertions, 5 deletions
@@ -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. |