unit Unit1; interface uses 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 DateiName = 'letztes_Wetter.txt'; PegelDateiName = 'letzte_Pegel.txt'; anzDaten = 7*24*6*4; (* 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; function wertZuY(w: extended; miMa: tPoint; hoehe: longint): longint; implementation {$R *.lfm} uses process, myStringListUnit, lowLevelUnit, systemUnit, matheunit, math; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); var s,t: string; f,o: tMyStringList; 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; 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('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; 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)