Wyjątki blah... Po co dopuszczać do błedu, a potem go wychwytywać?
function checktime(t:string;var h,m,s:integer):boolean;
function check(s:string;var a:integer;b:integer);
var k:integer;
begin
check:=true;
//if(length(s)<>2)then exit; // gwarancja zapisu hh:mm.ss
val(s,a,k);
if(k<>0)then exit;
if((a<0)or(a>b))then exit;
check:=false
end;
var i,j:integer;
begin
checktime:=false;
i:=pos(#58,t);
if(i=0)then exit;
j:=pos(#46,t);
if(j=0)then exit;
if(check(copy(t,1,i-1),h,23))then exit;
if(check(copy(t,i+1,j-i-1),m,59))then exit;
if(check(copy(t,j+1,length(t)),s,59))then exit; // *
checktime:=true;
end;
...
var h,m,s:integer;
...
if(not checktime('00:01.00030'))then; // error
Nie wazne ile masz zer przed sekundami minutami, czy godzinami... ważne, zeby wartość była w zakresie. Jesli wymagsz dokładnego formatu hh:mm.ss (po 2 cyfry), to odkomentuj linijke w check().
//* 3-ci parametr copy moze byc wiekszy niz dlugosc calego ciagu... nie rzutuje, bo copy skopiuje tyle ile moze