diff options
author | Erich Eckner <git@eckner.net> | 2015-11-25 10:13:28 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2015-11-25 10:13:28 +0100 |
commit | 94f78a08e925488b8b91ad48e8ee0d9b3c7fabf9 (patch) | |
tree | d2a4af7d40d4637153f90a5d2b036ea1b8a4d807 | |
parent | a10d149a6cc8ac14959e3908d8da1ec844e2f74d (diff) | |
download | Netzwerkwatchdog-94f78a08e925488b8b91ad48e8ee0d9b3c7fabf9.tar.xz |
RemoteFileDate sollte jetzt auch gehen; Zertifikat für blinne.net
eingefügt
-rw-r--r-- | ca.crt | 37 | ||||
-rw-r--r-- | komponenten.pas | 351 | ||||
-rw-r--r-- | tests.konf | 2 | ||||
-rw-r--r-- | unit1.lfm | 2 | ||||
-rw-r--r-- | unit1.pas | 8 | ||||
-rw-r--r-- | watchdog.lps | 115 |
6 files changed, 188 insertions, 327 deletions
@@ -0,0 +1,37 @@ +-----BEGIN CERTIFICATE----- +MIIGgzCCBGugAwIBAgIJAPqOuFubNmvJMA0GCSqGSIb3DQEBBQUAMIGHMQswCQYD +VQQGEwJERTEMMAoGA1UECBMDTlJXMRswGQYDVQQHExJNdWVsaGVpbSBhLmQuIFJ1 +aHIxFDASBgNVBAoTC0hvbWVyZWNvcmRzMRcwFQYDVQQDEw5Ib21lcmVjb3JkcyBD +QTEeMBwGCSqGSIb3DQEJARYPbmV3c0BibGlubmUubmV0MB4XDTE1MDMzMTEwMTQw +M1oXDTIwMDMzMDEwMTQwM1owgYcxCzAJBgNVBAYTAkRFMQwwCgYDVQQIEwNOUlcx +GzAZBgNVBAcTEk11ZWxoZWltIGEuZC4gUnVocjEUMBIGA1UEChMLSG9tZXJlY29y +ZHMxFzAVBgNVBAMTDkhvbWVyZWNvcmRzIENBMR4wHAYJKoZIhvcNAQkBFg9uZXdz +QGJsaW5uZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJxIeq +JMT4jJ0FupHHWVzdI8PQdDNLH11/lL7GGEqQ9Tmh3etNPXoNz6TGwpTIVJ8Gpl81 +4ZTR4gXxc4h/eN4kDNdJc9/I3971ExOi2aAwrtx++aFQ7tm6PhOjNudLq6m4gq32 +4k6dW6Z9jTXafF3Wav+gfo79R+3sLpGhdLE65Mq7m4JR/KHONXsJ8T5h6fjK9SmD +B3IDCZyk7AK0pCSwZgDg07vGK+qRw8CrmeUGFn31ggU/dzfiaj3e62nGhNSnbY9h +N7KmLMLmt3YD6INiPctiUU8fG5x6x3Tk5i2ylKTPZdl0DWm6d3oO8/0nXaY9CHwT +yCIGOfLNID71dL8ahcKJf83LbR0whDBq4Motx8AKJpEbkAgcd44WD8zju+MEMQDo +MnMd3yArSvf2CBbAnhb4Tl0HTgbvWjmU7pl+aNt//ge7jr9hLnW3i1x/+GaPH3+o +F0S/7sK40efRz3WiJQt2xryZd0akHlbS/RIjeb9ynLU56Oler3AjHo39O8JnVQfR +XTvfabWfaK8TJAp3mov2mxQT1r4Kwvs2nxM55Tkp5iV7EvY5aF3xN1wIa1qPblyK +8+Lo/84WPfGpXFpkBwleNpLEThAmhEu5j354SYhKZzOiDBs73mdTqCauYfiBWHQl +UsnEvmbVoKQ0MizlSPfdjKQg4RD1Z6R9EqY1WwIDAQABo4HvMIHsMB0GA1UdDgQW +BBRKNlswJP6gX1PmTv2UZmNNgUB6XDCBvAYDVR0jBIG0MIGxgBRKNlswJP6gX1Pm +Tv2UZmNNgUB6XKGBjaSBijCBhzELMAkGA1UEBhMCREUxDDAKBgNVBAgTA05SVzEb +MBkGA1UEBxMSTXVlbGhlaW0gYS5kLiBSdWhyMRQwEgYDVQQKEwtIb21lcmVjb3Jk +czEXMBUGA1UEAxMOSG9tZXJlY29yZHMgQ0ExHjAcBgkqhkiG9w0BCQEWD25ld3NA +Ymxpbm5lLm5ldIIJAPqOuFubNmvJMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF +BQADggIBAIDe63nwyn4hd9YdgnraA/S/a/TrHdZ4bXVx0CcBFuZT8eACv0qBTmMd +CHuaAj2R0bXBQRvTyX6ZYfhfJN+0nHCHsqa4GxLGKhHmdzl/14ZlDDmhGW2adN5W +BqXxNNIpkLp/lVl7cTRS+68uzTZwkqt2+cRw/nvFYu5PhIWGT5D9+hcbNJUA2I85 +0+QonghtjJ1+GFUEV90A9MFnQdf5p72SuxGayxr4cRRkvF4ELatv63WJFEExWaba +YSvsCKanvO2Q5+2Ce2djT/VtNzj56PZfpidxqD7ILkliXVNmD45o/88qjwRxlXhL +sedWU+PXCCN+EuaCgeV9pGK23PN8Blh50zKetpa2UA0oMTHmGMEKO55/xMHbYQH1 +IbyFEHK+R6Hy+aRoTDBKdoPjsp1YDIJzgtttjJvpK4dzw/dXUdkHI9F+CMPSGP+0 +2SNjCzhA8dqhkfS0MpFKLzRn5r4Hn2D9ykNnwihBulGKTUcEnGZLKP4KNVfYSh9K +VcIaTI54ap/A70vzCmuP/rd6D0rHU1eHHHw+udMndvfQ8dBicO9/SkFQ3RTvVXpS +xv6Em2b0x/3YyZyGXnM2niVG5YVptS3fL6gRQoSGXReqlf1yQf3sh2Bj973i+mAn +99J2Nrk4QBV5shDFm3JLWk49db8sczMTLTwiMSCM6fmLKXxkNyKP +-----END CERTIFICATE----- diff --git a/komponenten.pas b/komponenten.pas index daa6c63..267a8ae 100644 --- a/komponenten.pas +++ b/komponenten.pas @@ -86,15 +86,15 @@ type private public wen: string; - procedure ausfuehren; override; constructor create(besitzer: tTestAufgabe); + procedure ausfuehren; override; end; tTestPing = class(tTestAufgabe) private public - function nimmParameter(s: string): boolean; override; constructor create; + function nimmParameter(s: string): boolean; override; end; tRfcThread = class(tAufgabenThread) @@ -102,49 +102,32 @@ type public vergleichAuffrischen: boolean; quelle,vergleich,cert: string; - procedure ausfuehren; override; constructor create(besitzer: tTestAufgabe); + procedure ausfuehren; override; end; tRemoteFileCompare = class(tTestAufgabe) private public - function nimmParameter(s: string): boolean; override; constructor create; + function nimmParameter(s: string): boolean; override; + end; + + tRfdThread = class(tAufgabenThread) + private + public + quelle,cert: string; + deltaT: extended; + constructor create(besitzer: tTestAufgabe); + procedure ausfuehren; override; end; -(* TFtpDate = class(TTestAufgabe) - private - dt: longint; - FTPClient1: TFTPClient; - procedure OnTimerProcedure(Sender: TObject); - public - function nimmParameter(s: String): boolean; override; - constructor create(AOwner: TComponent); override; - destructor destroy; override; - end; - THttpCompare = class(TTestAufgabe) - private - Vergleich,buf: string; - HTTPClient1: THttpCli; - refreshVergleich,holeGerade: boolean; - procedure OnTimerProcedure(Sender: TObject); - procedure OnDocData(Sender: TObject; Buffer : Pointer; Len: Integer); - procedure OnDocEnd(Sender: TObject); - public - function nimmParameter(s: String): boolean; override; - constructor create(AOwner: TComponent); override; - destructor destroy; override; - end; - TCheckProcess = class(TTestAufgabe) - private - exeFileName: string; - procedure OnTimerProcedure(Sender: TObject); - public - function nimmParameter(s: String): boolean; override; - constructor create(AOwner: TComponent); override; - destructor destroy; override; - end; *) + tRemoteFileDate = class(tTestAufgabe) + private + public + constructor create; + function nimmParameter(s: string): boolean; override; + end; function loeseLogischenTerm(s: string): tBedingung; @@ -310,10 +293,8 @@ begin s:=s+' (testPing)'; if self is tRemoteFileCompare then s:=s+' (remoteFileCompare)'; -(* if self is tFtpDate then - s:=s+' (ftpDate)'; - if self is tHttpCompare then - s:=s+' (httpCompare)'; *) + if self is tRemoteFileDate then + s:=s+' (remoteFileDate)'; log(s); end; end; @@ -465,7 +446,7 @@ begin result:=true; end; -// tFfcThread ****************************************************************** +// tRfcThread ****************************************************************** constructor tRfcThread.create(besitzer: tTestAufgabe); begin @@ -546,250 +527,88 @@ begin _thread:=tRfcThread.create(self); end; -(* -// TFtpDate ******************************************************************** +// tRfdThread ****************************************************************** -procedure TFtpDate.OnTimerProcedure(Sender: TObject); -var s,t: string; - i,j: integer; - z: extended; - f: textfile; -const Zeichen = '1234567890qwertzuiopasdfghjklyxcvbnm'; +constructor tRfdThread.create(besitzer: tTestAufgabe); begin - j:=0; - s:=''; - repeat - if s<>'' then sleep(100); - s:=extractfilepath(Paramstr(0)); - s:=s+'download'; - s:=s+floattostr(now); - for i:=1 to 10 do - s:=s + Zeichen[1+random(length(Zeichen))]; - s:=s+'.txt'; - inc(j); - until (not fileexists(s)) or (j>10000); - FTPClient1.LocalFileName:=s; - try - FTPClient1.Receive; - assignfile(f,s); - reset(f); - readln(f,t); - closefile(f); - except - Log('Ich bin aus dem try-except geflogen (beim Runterladen und Anschauen)!'); - deletefile(pchar(s)); - status:=0; - exit; - end; - deletefile(pchar(s)); - - try - z:=mystrtotime(t); - except - Log('Ich bin aus dem try-except geflogen (bei der Zeitumwandlung)!'); - status:=0; - exit; - end; - status:=byte(abs(now-z)*60*60*24<=dt); + inherited create(besitzer); + fillchar(quelle,sizeof(quelle),#0); + setlength(quelle,0); + fillchar(cert,sizeof(cert),#0); + setlength(cert,0); + deltaT:=0; end; -function TFtpDate.nimmParameter(s: String): boolean; -var User,Pass,Host,HostDir,HostFile: String; +procedure tRfdThread.ausfuehren; +var + argumente: array of string; + ausgabe: string; + rD,lD: longint; begin - if pos('/',s)=0 then - begin - result:=false; - exit; - end; - dt:=strtoint(copy(s,1,pos('/',s)-1)); - delete(s,1,pos('/',s)); - if pos(':',s)=0 then - begin - result:=false; - exit; + setlength(argumente,3+2*byte(cert<>'')); + argumente[0]:='-o'; + argumente[1]:='-'; + if cert<>'' then begin + argumente[2]:='--cacert'; + argumente[3]:=cert; end; - user:=copy(s,1,pos(':',s)-1); - delete(s,1,pos(':',s)); - if pos('@',s)=0 then - begin - result:=false; - exit; + argumente[2+2*byte(cert<>'')]:=quelle; + ausgabe:=''; + if not runCommand('curl',argumente,ausgabe) then begin + status:=0; + setlength(argumente,0); + exit; end; - pass:=copy(s,1,pos('@',s)-1); - delete(s,1,pos('@',s)); - if pos('/',s)=0 then - begin - result:=false; - exit; + try + rD:=strtoint(trim(ausgabe)); + except + status:=0; + setlength(argumente,0); + exit; end; - Host:=copy(s,1,pos('/',s)-1); - delete(s,1,pos('/',s)); - HostDir:='/'; - while pos('/',s)>0 do - begin - HostDir:=HostDir+copy(s,1,pos('/',s)); - delete(s,1,pos('/',s)); + setlength(argumente,1); + argumente[0]:='+%s'; + if not runCommand('date',argumente,ausgabe) then begin + status:=0; + setlength(argumente,0); + exit; end; - HostFile:=s; - - FTPCLient1.Username:=User; - FTPCLient1.Password:=Pass; - FTPCLient1.HostName:=Host; - FTPCLient1.HostDirName:=HostDir; - FTPCLient1.HostFileName:=HostFile; - result:=true; -end; - -constructor TFtpDate.create(AOwner: TComponent); -var SR: TSearchRec; - err: integer; -begin - inherited create(AOwner); - err:=Sysutils.Findfirst(extractfilepath(Paramstr(0))+'download*.txt',$00,SR); - while err=0 do - begin -// Form1.Memo2.Lines.add(extractfilepath(Paramstr(0))+SR.Name); - if fileexists(extractfilepath(Paramstr(0))+SR.Name) then - deletefile(PChar(extractfilepath(Paramstr(0))+SR.Name)); - err:=Sysutils.Findnext(SR); + setlength(argumente,0); + try + lD:=strtoint(trim(ausgabe)); + except + status:=0; + exit; end; - Sysutils.Findclose(SR); - FTPCLient1:=TFTPCLient.Create(AOwner); - InnerTimerProcedure:=OnTimerProcedure; -end; - -destructor TFtpDate.destroy; -begin - FTPClient1.Free; - inherited destroy; -end; - -// THttpCompare ************************************************************* - -procedure THttpCompare.OnTimerProcedure(Sender: TObject); -begin - if holeGerade then exit; - buf:=''; - holeGerade:=true; - HTTPClient1.GetASync; + status:=byte((lD<=rD) and (rD+deltaT>=lD)); end; -procedure THttpCompare.OnDocData(Sender: TObject; Buffer: Pointer; Len: Integer); -begin - setlength(buf,length(buf)+Len); - move(Buffer^,buf[length(buf)-Len+1],Len); -end; +// tRemoteFileDate ************************************************************* -procedure THttpCompare.OnDocEnd(Sender: TObject); -var f: file; - s: string; +constructor tRemoteFileDate.create; begin - assignfile(f,vergleich); - - if refreshVergleich then begin - rewrite(f,1); - blockwrite(f,buf[1],length(buf)); - closefile(f); - end; - - if not fileexists(vergleich) then begin - status:=1; - buf:=''; - exit; - end; - - reset(f,1); - setlength(s,filesize(f)); - blockread(f,s[1],filesize(f)); - closefile(f); - - status:=byte(buf=s); - - buf:=''; - holeGerade:=false; + inherited create; + _thread:=tRfdThread.create(self); end; -function THttpCompare.nimmParameter(s: String): boolean; -var Vergl: String; +function tRemoteFileDate.nimmParameter(s: string): boolean; begin - if (length(s)>0) and (s[1]='*') then - begin - delete(s,1,1); - refreshVergleich:=true; - end; - if pos(':',s)=0 then - begin - result:=false; - exit; + result:=false; + with _thread as tRfdThread do begin + if pos(';',s)=0 then exit; + try + deltaT:=strToInt(erstesArgument(s,';')); + except + exit; + end; + if pos(';',s)=0 then cert:='' + else cert:=erstesArgument(s,';'); + quelle:=s; + if pos('/',cert)=0 then + cert:=extractFilePath(application.exeName)+cert; + result:=(cert='') or fileexists(cert); end; - Vergl:=copy(s,1,pos(':',s)-1); - delete(s,1,pos(':',s)); - - Vergleich:=Vergl; - HTTPClient1.URL:=s; - result:=true; -end; - -constructor THttpCompare.create(AOwner: TComponent); -begin - inherited create(AOwner); - HTTPClient1:=THTTPCli.Create(AOwner); - HTTPClient1.OnDocData:=OnDocData; - HTTPClient1.OnDocEnd:=OnDocEnd; - InnerTimerProcedure:=OnTimerProcedure; - refreshVergleich:=false; - buf:=''; - holeGerade:=false; -end; - -destructor THttpCompare.destroy; -begin - buf:=''; - HTTPClient1.Free; - inherited destroy; -end; - -// TCheckProcess *************************************************************** - -procedure TCheckProcess.OnTimerProcedure(Sender: TObject); -var ContinueLoop,laeuft: boolean; - FSnapshotHandle: THandle; - FProcessEntry32: TProcessEntry32; -begin - FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - FProcessEntry32.dwSize:= SizeOf(FProcessEntry32); - ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32); - laeuft:=false; - while Integer(ContinueLoop) <> 0 do begin - if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or - (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin - laeuft:=true; - end; - ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32); - end; - CloseHandle(FSnapshotHandle); - status:=byte(laeuft); -end; - -function TCheckProcess.nimmParameter(s: String): boolean; -begin - exeFileName:=s; - result:=true; -end; - -constructor TCheckProcess.create(AOwner: TComponent); -begin - inherited create(AOwner); - InnerTimerProcedure:=OnTimerProcedure; - exeFileName:=''; -end; - -destructor TCheckProcess.destroy; -begin - exeFileName:=''; - inherited destroy; end; -*) end. @@ -7,7 +7,7 @@ ping 1_s 100 50 .13 (ping) 192.168.0.13 ping 0_1_& 600 50 google (ping) www.google.de
ping 0_1_& 600 50 eckner.net (ping) eckner.net
remcmp 0_3_& 600 50 Festplatte status.txt;ftp://erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus
-#ftpdate 0_3_&0_7_& 60000 60000 Festplattenjob 90/erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus.time
+ftpdate 0_3_&0_7_& 60000 60000 Festplattenjob 90;ftp://erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus.time
remcmp 0_4_& 600 50 Musik-Crypto musikStatus.txt;http://192.168.0.18/status.php
remcmp 0_2_&0_6_& 600 100 dns dnsStatus.txt;ca.crt;https://eckner.net/iptest.php
@@ -1,5 +1,5 @@ object Form1: TForm1 - Left = 417 + Left = 500 Height = 340 Top = 564 Width = 531 @@ -55,8 +55,8 @@ begin setlength(pruefListe,0); readOptions(extractFilePath(application.exeName)+'tests.konf'); - form1.visible:=false; statusAenderung(self); + form1.visible:=false; end; procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction); @@ -73,8 +73,14 @@ begin memo1.height:=form1.clientHeight; end; +const __erstesMal: boolean = true; + procedure TForm1.FormShow(Sender: TObject); begin + if __erstesMal then begin + __erstesMal:=false; + form1.visible:=false; + end; form1.left:=screen.monitors[0].left+(screen.monitors[0].width-form1.width) div 2; form1.top:=screen.monitors[0].top+(screen.monitors[0].height-form1.height-24) div 2; end; diff --git a/watchdog.lps b/watchdog.lps index a048fb1..903cb84 100644 --- a/watchdog.lps +++ b/watchdog.lps @@ -9,7 +9,7 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="-1"/> <CursorPos X="12" Y="6"/> - <UsageCount Value="27"/> + <UsageCount Value="28"/> </Unit0> <Unit1> <Filename Value="unit1.pas"/> @@ -18,21 +18,21 @@ <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="Unit1"/> - <TopLine Value="98"/> - <CursorPos X="88" Y="116"/> - <UsageCount Value="27"/> + <IsVisibleTab Value="True"/> + <TopLine Value="58"/> + <CursorPos Y="83"/> + <UsageCount Value="28"/> <Loaded Value="True"/> <LoadedDesigner Value="True"/> </Unit1> <Unit2> <Filename Value="komponenten.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> - <EditorIndex Value="3"/> - <TopLine Value="503"/> - <CursorPos X="21" Y="539"/> - <FoldState Value=" TKjT0V T3kS0v917 pj7nI05331U"/> - <UsageCount Value="27"/> + <EditorIndex Value="2"/> + <TopLine Value="556"/> + <CursorPos X="29" Y="573"/> + <FoldState Value=" T3kB0vA piZkW0X8]9Xk6045#"/> + <UsageCount Value="28"/> <Loaded Value="True"/> </Unit2> <Unit3> @@ -44,141 +44,140 @@ </Unit3> <Unit4> <Filename Value="../../../Sicherung_Windows/EIGDATEI/DELPHANW/NetzwerkWatchDog/Unit1.pas"/> - <EditorIndex Value="2"/> - <TopLine Value="153"/> + <EditorIndex Value="-1"/> + <TopLine Value="166"/> <CursorPos Y="209"/> - <UsageCount Value="13"/> - <Loaded Value="True"/> + <UsageCount Value="14"/> </Unit4> <Unit5> <Filename Value="tests.konf"/> <EditorIndex Value="1"/> - <CursorPos X="70" Y="12"/> - <UsageCount Value="12"/> + <CursorPos X="66" Y="10"/> + <UsageCount Value="13"/> <Loaded Value="True"/> <DefaultSyntaxHighlighter Value="None"/> </Unit5> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="unit1.pas"/> - <Caret Line="69" Column="20" TopLine="47"/> + <Filename Value="komponenten.pas"/> + <Caret Line="157" Column="27" TopLine="120"/> </Position1> <Position2> - <Filename Value="unit1.pas"/> - <Caret Line="115" Column="67" TopLine="100"/> + <Filename Value="komponenten.pas"/> + <Caret Line="158" Column="11" TopLine="120"/> </Position2> <Position3> <Filename Value="komponenten.pas"/> - <Caret Line="558" Column="21" TopLine="504"/> + <Caret Line="157" Column="28" TopLine="157"/> </Position3> <Position4> <Filename Value="komponenten.pas"/> - <Caret Line="231" TopLine="79"/> + <Caret Line="560" Column="19" TopLine="538"/> </Position4> <Position5> <Filename Value="komponenten.pas"/> - <Caret Line="671" TopLine="628"/> + <Caret Line="561" TopLine="528"/> </Position5> <Position6> <Filename Value="komponenten.pas"/> - <Caret Line="154" TopLine="111"/> + <Caret Line="117" TopLine="95"/> </Position6> <Position7> <Filename Value="komponenten.pas"/> - <Caret Line="506" Column="14" TopLine="421"/> + <Caret Line="513" Column="15" TopLine="491"/> </Position7> <Position8> <Filename Value="komponenten.pas"/> - <Caret Line="516" Column="26" TopLine="493"/> + <Caret Line="508" Column="37" TopLine="497"/> </Position8> <Position9> <Filename Value="komponenten.pas"/> - <Caret Line="315" Column="23" TopLine="276"/> + <Caret Line="291" Column="39" TopLine="161"/> </Position9> <Position10> <Filename Value="komponenten.pas"/> - <Caret Line="541" TopLine="498"/> + <Caret Line="526" Column="9" TopLine="505"/> </Position10> <Position11> - <Filename Value="komponenten.pas"/> - <Caret Line="540" Column="23" TopLine="511"/> + <Filename Value="unit1.pas"/> + <Caret Line="116" Column="88" TopLine="98"/> </Position11> <Position12> <Filename Value="komponenten.pas"/> - <Caret Line="602" Column="36" TopLine="574"/> + <Caret Line="539" Column="21" TopLine="503"/> </Position12> <Position13> <Filename Value="komponenten.pas"/> - <Caret Line="549" Column="46" TopLine="527"/> + <Caret Line="537" TopLine="529"/> </Position13> <Position14> <Filename Value="komponenten.pas"/> - <Caret Line="442" TopLine="375"/> + <Caret Line="120" Column="18" TopLine="91"/> </Position14> <Position15> <Filename Value="komponenten.pas"/> - <Caret Line="425" TopLine="393"/> + <Caret Line="89" TopLine="43"/> </Position15> <Position16> <Filename Value="komponenten.pas"/> - <Caret Line="549" Column="40" TopLine="527"/> + <Caret Line="563" Column="16" TopLine="501"/> </Position16> <Position17> <Filename Value="komponenten.pas"/> - <Caret Line="157" Column="25" TopLine="92"/> + <Caret Line="45" TopLine="45"/> </Position17> <Position18> <Filename Value="komponenten.pas"/> - <Caret Line="549" Column="34" TopLine="527"/> + <Caret Line="584" Column="46" TopLine="542"/> </Position18> <Position19> <Filename Value="komponenten.pas"/> - <Caret Line="158" Column="24" TopLine="104"/> + <Caret Line="613" TopLine="572"/> </Position19> <Position20> <Filename Value="komponenten.pas"/> - <Caret Line="157" Column="27" TopLine="120"/> + <Caret Line="592" Column="35" TopLine="570"/> </Position20> <Position21> - <Filename Value="komponenten.pas"/> - <Caret Line="158" Column="11" TopLine="120"/> + <Filename Value="unit1.pas"/> + <Caret Line="116" Column="88" TopLine="98"/> </Position21> <Position22> - <Filename Value="komponenten.pas"/> - <Caret Line="157" Column="28" TopLine="157"/> + <Filename Value="unit1.pas"/> + <Caret Line="58" TopLine="50"/> </Position22> <Position23> - <Filename Value="komponenten.pas"/> - <Caret Line="560" Column="19" TopLine="538"/> + <Filename Value="unit1.pas"/> + <Caret Line="85" TopLine="75"/> </Position23> <Position24> - <Filename Value="komponenten.pas"/> - <Caret Line="561" TopLine="528"/> + <Filename Value="unit1.pas"/> + <Caret Line="58" Column="14" TopLine="47"/> </Position24> <Position25> - <Filename Value="komponenten.pas"/> - <Caret Line="117" TopLine="95"/> + <Filename Value="unit1.pas"/> + <Caret Line="37" Column="30" TopLine="15"/> </Position25> <Position26> - <Filename Value="komponenten.pas"/> - <Caret Line="513" Column="15" TopLine="491"/> + <Filename Value="unit1.pas"/> + <Caret Line="58" Column="18" TopLine="22"/> </Position26> <Position27> - <Filename Value="komponenten.pas"/> - <Caret Line="508" Column="37" TopLine="497"/> + <Filename Value="unit1.pas"/> + <Caret Line="137" Column="77" TopLine="102"/> </Position27> <Position28> - <Filename Value="komponenten.pas"/> - <Caret Line="291" Column="39" TopLine="161"/> + <Filename Value="unit1.pas"/> + <Caret Line="142" Column="33" TopLine="136"/> </Position28> <Position29> - <Filename Value="komponenten.pas"/> - <Caret Line="526" Column="9" TopLine="505"/> + <Filename Value="unit1.pas"/> + <Caret Line="78" TopLine="70"/> </Position29> <Position30> <Filename Value="unit1.pas"/> - <Caret Line="116" Column="88" TopLine="98"/> + <Caret Line="79" TopLine="70"/> </Position30> </JumpHistory> </ProjectSession> |