Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.10.04;
Скачать: CL | DM;

Вниз

TPicture.LoadFromFile - интерпритация формата по содержимому.   Найти похожие ветки 

 
brother ©   (2012-03-31 05:56) [40]

мы говорим - сайт должен отвечать спецификации html!
они говорят - зачем? браузер же "кушает" наш код?!

зы. но всеж спецификация есть и ее надо придерживаться...


 
Anatoly Podgoretsky ©   (2012-03-31 08:16) [41]

Ну правильно говоришь, и большинство браузеров прощают это. Например по спецификации каждый тег <TEG> должен быть закрыт </TEG>, а в реальности не так и много хуже. Поэтому определять по сигнатуре HTML гнилое дело. При проверке нужна ветвь ELSE


 
brother ©   (2012-03-31 19:48) [42]

> по спецификации каждый тег <TEG> должен быть закрыт </TEG>

нет не каждый... например: Тег <IMG>
http://html.manual.ru/book/html/body/objects/img.php
не имеет конечного тега.


 
Anatoly Podgoretsky ©   (2012-04-01 19:20) [43]

</>


 
brother ©   (2012-04-01 20:29) [44]

> </>

это для XHTML
а для HTML закрывающий тэго не нужен...


 
Unknown user ©   (2012-04-04 17:48) [45]

Я когда-то давно писал собственную функцию для определения типа файла по сигнатуре. Если еще нужно, забирайте.

function DetermineFileType(const FileName:string; var DT:TDataType):boolean;
//елементы массива расположены в порядке
//уменьшения ошибки ложного определения типа файла
const ChkTypes:array[0..6] of TDataType=(dtRTF,dtIMG_EMF,dtIMG_BMP,
                                        dtIMG_JPG,dtIMG_WMF,dtTXT,dtIMG_ICO);
var Stream:TFileStream;
   Ind:integer;
   
function IsType(AType:TDataType):boolean;
const cRTFSignature="{\rtf1";
      cBMPSignature="BM";
      cJPGSignature="яШя";
      cEMFSignature=" EMF";
      MaxReadCnt=8192;
var Len,Cnt,TotalCnt:integer;
    Sym,OldSym:Char;
    S:string; Wrd:Word;
    DWrd:LongWord;

begin
 Result:=false;
 Stream.Position:=0;
 case AType of

  dtRTF: begin
          Len:=Length(cRTFSignature);
          SetString(S,nil,Len);
          Cnt:=Stream.Read(Pointer(S)^,Len);
          if Cnt<>Len then exit;
          Result:=S=cRTFSignature;
         end;

  dtTXT: begin
          TotalCnt:=0; OldSym:=#0;
          while TotalCnt<MaxReadCnt do
           begin
           Len:=SizeOf(Sym);
           Cnt:=Stream.Read(Sym,Len);
           if Cnt<>Len then exit;
           if Sym=#10 then begin
            Result:=OldSym=#13;
            if not Result then exit;
           end; {if}
           OldSym:=Sym;
           Inc(TotalCnt,Cnt);
          end; {while}
         end;

   dtIMG_BMP: begin
               Len:=SizeOf(Wrd);
               Cnt:=Stream.Read(Wrd,Len);
               if Cnt<>Len then exit;
               Result:=Wrd=$4D42;
              end;

   dtIMG_JPG: begin
               Len:=Length(cJPGSignature);
               SetString(S,nil,Len);
               Cnt:=Stream.Read(Pointer(S)^,Len);
               if Cnt<>Len then exit;
               Result:=S=cJPGSignature;
              end;

   dtIMG_WMF: begin
               Stream.Seek(4,0);
               Len:=SizeOf(Wrd);
               Cnt:=Stream.Read(Wrd,Len);
               if Cnt<>Len then exit;
               Result:=(Wrd=$0300) or (Wrd=$0100);
              end;

   dtIMG_EMF: begin
               Stream.Seek(40,0);
               Len:=Length(cEMFSignature);
               SetString(S,nil,Len);
               Cnt:=Stream.Read(Pointer(S)^,Len);
               if Cnt<>Len then exit;
               Result:=S=cEMFSignature;
              end;

   dtIMG_ICO: begin
               Len:=SizeOf(DWrd);
               Cnt:=Stream.Read(DWrd,Len);
               if Cnt<>Len then exit;
               Result:=DWrd=$10000;
              end;

 end; {case}
end; {function IsType}

begin
Stream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
try
 Result:=false;
 for Ind:=0 to High(ChkTypes) do
  if IsType(ChkTypes[Ind]) then begin
   DT:=ChkTypes[Ind];
   Result:=true;
   exit;
  end;
finally
 Stream.Free;
end;
end;



Страницы: 1 2 вся ветка

Текущий архив: 2015.10.04;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.009 c
15-1424381404
Юрий
2015-02-20 00:30
2015.10.04
С днем рождения ! 20 февраля 2015 пятница


15-1424122299
Юрий
2015-02-17 00:31
2015.10.04
С днем рождения ! 17 февраля 2015 вторник


15-1423949475
Юрий
2015-02-15 00:31
2015.10.04
С днем рождения ! 15 февраля 2015 воскресенье


4-1273682403
zamtmn
2010-05-12 20:40
2015.10.04
в SysTreeView32 не приходит WM_CONTEXTMENU


2-1399593217
Tanya
2014-05-09 03:53
2015.10.04
запрос не получается