unit Unit1; interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, pegelUnit, fhUnit, lowLevelUnit; 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; wetter: tMessPunkte; pegelDatei,wetterDatei: string; public { public declarations } procedure zeichnen; end; var Form1: tForm1; pidDatei: string; fehler: boolean; const bufLengMin = 1024*1024; (* function separateValue(var S: String): string; function Zeit2Datetime(Z: TZeit): extended; function PegelstaendeVergleichen(P1,P2: Pointer): integer; function PegelzeitVergleichen(P1,P2: TPegelzeit): integer; function findePegelZeit(PS: TList; PZ: TPegelzeit): extended; function strToPegelZeit(s: string): TPegelzeit; function Pegelzeit2Datetime(Z: TPegelzeit): extended; 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; inline; function wertZuY(w: extended; miMa: tPoint; hoehe: longint): longint; inline; overload; function wertZuY(w: extended; miMa: tExtPoint; hoehe: longint): longint; inline; overload; function wertZuY(w: extended; mi,ma: extended; hoehe: longint): longint; inline; overload; implementation {$R *.lfm} uses process, myStringListUnit, systemUnit, matheunit, math; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); var s,t: string; f,o: tMyStringList; fi: textfile; args: array of string; begin fehler:=true; __ausgabenMaske:=1; pidDatei:=''; pegelDatei:=''; datenZeitRaum:=1; s:=extractfilepath(application.exename)+'wetter.konf'; t:=''; if not fileexists(s) then raise exception.create('Kann Konfigurationsdatei '''+s+''' nicht finden!'); pegel:=tPegelStaende.create(image1); wetter:=tMessPunkte.create(image1); f:=tMyStringList.create; f.loadFromFile(s); f.unfoldMacros; while f.readln(s) do begin if startetMit('pidDatei:',s) then begin pidDatei:=s; assignFile(fi,pidDatei); if fileexists(pidDatei) then begin // pidDatei existiert schon reset(fi); readln(fi,s); if strtoint(s)<>GetProcessID then begin // der eingetragene Prozess bin nicht ich setlength(args,1); args[0]:='aux'; runCommand('ps',args,t); o:=tMyStringList.create; o.text:=t; o.grep('^\S+\s+'+s+'\s'); if o.count>0 then begin // der eingetragene Prozess läuft noch closeFile(fi); f.free; o.free; pegel.free; raise exception.create('Programm läuft bereits ('+s+')!'); end; o.free; end; closefile(fi); end; rewrite(fi); writeln(fi,inttostr(GetProcessID)); 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('wetterDatei:',s) then begin wetterDatei:=s; if pos('/',wetterDatei)=0 then wetterDatei:=extractFilePath(application.exename)+wetterDatei; wetter.laden(wetterDatei); 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; fehler:=false; zeichnen; end; procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin pegel.putBeenden; wetter.mutBeenden; end; procedure TForm1.FormDestroy(Sender: TObject); begin if fileExists(pidDatei) then deleteFile(pidDatei); if not fehler then begin if pegelDatei<>'' then pegel.speichern(pegelDatei); if wetterDatei<>'' then wetter.speichern(wetterDatei); end; pegel.free; wetter.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); wetter.achsenZeichnen([mgTemperatur],startZeit,stopZeit); image1.canvas.pen.color:=$000000; tmp:=floor(startZeit); while wertZuX(tmp,startZeit,stopZeit,Image1.Width)