Advanced Delphi Systems- webserver araçları

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Advanced Delphi Systems- webserver araçları

Mesaj gönderen Asri »

Aşağıdaki unit'i unit1'de uses olarak ekleyip bu unit içindeki procedure ve function'ları kullanbilirsiniz.

Bu unit program webserver araçları işleminde kullanılır.

Kod: Tümünü seç

unit ads_wbserver_util;
{Copyright(c)2000 Advanced Delphi Systems

 Richard Maley
 Advanced Delphi Systems
 12613 Maidens Bower Drive
 Potomac, MD 20854 USA
 phone 301-840-1554
 maley@advdelphisys.com

 The code herein can be used or modified by anyone.  Please retain references
 to Richard Maley at Advanced Delphi Systems.  If you make improvements to the
 code please send your improvements to maley@advdelphisys.com so that the
 entire Delphi community can benefit.  All comments are welcome.
}

interface
Uses Classes, SysUtils, FileCtrl;

{!~ Converts an integer value to its binary equivalent
as a ShortString }
Function ConvertIntegerToBinaryString(Int, Length : Integer) : ShortString;

{!~ Converts a word value to its binary equivalent
as a ShortString }
Function ConvertWordToBinaryString(InputWord : Word; Length : Integer) : ShortString;

{!~ Returns the name aof a filed from a list where values are arranged
as FieldName=FiledValue}
Function FieldNameFromList(lst : TStringList; index : Integer): String;


{!~ Populates a TStrings FileList with the files meeting selected
file attribute criteria in a directory.  The mask argument is a
standard DOS file argument like '*.*.  The InclDotFiles argument
allows the user to exclude the system files "." and ".." by
setting the value to False.  If the Intersection argument is set
to true then the result will reflect only those files that satisfy
all attribute criteria.  If Intersection is set to false then the
result will be a union of files that meet any of the criteria.}
Function FilesInDirDetail(
  FileList    : TStrings;
  Directory   : String;
  Mask        : String;
  Intersection: Boolean;
  IsReadOnly  : Boolean;
  IsHidden    : Boolean;
  IsSystem    : Boolean;
  IsVolumeID  : Boolean;
  IsDirectory : Boolean;
  IsArchive   : Boolean;
  IsNormal    : Boolean;
  InclDotFiles: Boolean): Boolean;

{!~ Throws away all keys except 0-9,-,+,.}
Procedure KeyPressOnlyNumbers(Var Key: Char);

{!~ Throws away all keys except 0-9}
Procedure KeyPressOnlyNumbersAbsolute(Var Key: Char);

{!~ Throws away all characters except 0-9,-,+,.}
Function NumbersOnly(InputString: String): String;

{!~ Throws away all characters except 0-9}
Function NumbersOnlyAbsolute(InputString: String): String;

{!~ Pads or truncates a String and Justifies Left if StrJustify=True}
Function StringPad(
  InputStr,
  FillChar: String;
  StrLen: Integer;
  StrJustify: Boolean): String;

{!~ Formats and validates values based on FieldType.  If Value is completely
invalid for the type then an empty string is retruned.}
Function ValidateStrFieldType(FieldType,Value : String): String;


implementation

{!~ Converts an integer value to its binary equivalent
as a ShortString }
Function ConvertIntegerToBinaryString(Int, Length : Integer) : ShortString;
Begin
  Result := ConvertWordToBinaryString(Word(Int),Length);
End;

{!~ Converts a word value to its binary equivalent
as a ShortString }
Function ConvertWordToBinaryString(InputWord : Word; Length : Integer) : ShortString;
var
  Counter, Number : Cardinal;
  D : Array[0..1] of Char;
Begin
  D[0] := '0';
  D[1] := '1';
  Number := 1;
  Result[0] := #16;
  For Counter := 15 Downto 0 Do
  Begin
    Result[Number] :=
      D[Ord(InputWord and (1 shl Counter) <> 0)];
    Inc(Number);
  End;
  If Length > 16 Then Length := 16;
  If Length <  1 Then Length :=  1;
  Result := Copy(Result,16-Length,Length);
End;

{!~ Populates a TStrings FileList with the files meeting selected
file attribute criteria in a directory.  The mask argument is a
standard DOS file argument like '*.*.  The InclDotFiles argument
allows the user to exclude the system files "." and ".." by
setting the value to False.  If the Intersection argument is set
to true then the result will reflect only those files that satisfy
all attribute criteria.  If Intersection is set to false then the
result will be a union of files that meet any of the criteria.}
Function FilesInDirDetail(
  FileList    : TStrings;
  Directory   : String;
  Mask        : String;
  Intersection: Boolean;
  IsReadOnly  : Boolean;
  IsHidden    : Boolean;
  IsSystem    : Boolean;
  IsVolumeID  : Boolean;
  IsDirectory : Boolean;
  IsArchive   : Boolean;
  IsNormal    : Boolean;
  InclDotFiles: Boolean): Boolean;
var
  j          : Integer;
  MaskPtr    : PChar;
  Ptr        : PChar;
  FileInfo   : TSearchRec;
  CurDir     : String;
  FileType   : TFileType;
  FileType_I : Integer;
  FileType_B : ShortString;
  TSList     : TStringList;
  BinaryAttr : ShortString;
  ShouldAdd  : Boolean;
begin
{  Result := False;}{zzz}
  TSList := TStringList.Create();
  Try
    Try
      FileType := [];
      If IsReadOnly  Then FileType := (FileType + [ftReadOnly]);
      If IsHidden    Then FileType := (FileType + [ftHidden]);
      If IsSystem    Then FileType := (FileType + [ftSystem]);
      If IsVolumeID  Then FileType := (FileType + [ftVolumeID]);
      If IsDirectory Then FileType := (FileType + [ftDirectory]);
      If IsArchive   Then FileType := (FileType + [ftArchive]);
      If IsNormal    Then FileType := (FileType + [ftNormal]);
      FileType_I := 0;
      If IsReadOnly  Then FileType_I := (FileType_I +   1);
      If IsHidden    Then FileType_I := (FileType_I +   2);
      If IsSystem    Then FileType_I := (FileType_I +   4);
      If IsVolumeID  Then FileType_I := (FileType_I +   8);
      If IsDirectory Then FileType_I := (FileType_I +  16);
      If IsArchive   Then FileType_I := (FileType_I +  32);
      If IsNormal    Then FileType_I := (FileType_I + 128);
      FileType_B := ConvertIntegerToBinaryString(FileType_I,8);
      TSList.Clear;
      GetDir(0,CurDir);
      ChDir(Directory);  { go to the directory we want }
      FileList.Clear;    { clear the list }

      MaskPtr := PChar(Mask);
      while MaskPtr <> nil do
      begin
        Ptr := StrScan (MaskPtr, ';');
        If Ptr <> nil Then Ptr^ := #0;
        If FindFirst(MaskPtr, 191, FileInfo) = 0 Then
        Begin
          Repeat            { exclude normal files if ftNormal not set }
          Begin
            If ftNormal in FileType Then
            Begin
              TSList.Add(FileInfo.Name);
            End
            Else
            Begin
              BinaryAttr := ConvertIntegerToBinaryString(FileInfo.Attr,8);
              If Intersection Then
              Begin
                ShouldAdd := True;
                For j := 1 To 8 Do
                Begin
                  If (FileType_B[j]='1') And (BinaryAttr[j]<>'1') Then
                  Begin
                    ShouldAdd := False;
                    Break;
                  End;
                End;
                If ShouldAdd Then
                  TSList.Add(FileInfo.Name);
              End
              Else
              Begin
                For j := 1 To 8 Do
                Begin
                  If (FileType_B[j]='1') And (BinaryAttr[j]='1') Then
                  Begin
                    TSList.Add(FileInfo.Name);
                    Break;
                  End;
                End;
              End;
            End;
          End;
          Until FindNext(FileInfo) <> 0;
{zzz Changed 4/17/99 rlm}
          //FindClose(FileInfo.FindHandle);
          FindClose(FileInfo);
        End;
        If Ptr <> nil then
        begin
          Ptr^ := ';';
          Inc (Ptr);
        end;
        MaskPtr := Ptr;
      end;
      ChDir(CurDir);
      TSList.Sorted := False;
      If Not InclDotFiles Then
      Begin
        If TSList.IndexOf('.') > -1 Then
          TSLIst.Delete(TSList.IndexOf('.'));
        If TSList.IndexOf('..') > -1 Then
          TSLIst.Delete(TSList.IndexOf('..'));
      End;
      TSList.Sorted := True;
      TSList.Sorted := False;
      FileList.Assign(TSList);
      Result := True;
    Except
      Result := False;
    End;
  Finally
    TSList.Free;
  End;
end;

{!~ Pads or truncates a String and Justifies Left if StrJustify=True}
Function StringPad(
  InputStr,
  FillChar: String;
  StrLen: Integer;
  StrJustify: Boolean): String;
Var
  TempFill: String;
  Counter : Integer;
Begin
  If Not (Length(InputStr) = StrLen) Then
  Begin
    If Length(InputStr) > StrLen Then
    Begin
      InputStr := Copy(InputStr,1,StrLen);
    End
    Else
    Begin
      TempFill := '';
      For Counter := 1 To StrLen-Length(InputStr) Do
      Begin
        TempFill := TempFill + FillChar;
      End;
      If StrJustify Then
      Begin
        {Left Justified}
        InputStr := InputStr + TempFill;
      End
      Else
      Begin
        {Right Justified}
        InputStr := TempFill + InputStr ;
      End;
    End;
  End;
  Result := InputStr;
End;

{!~ Throws away all keys except 0-9,-,+,.}
Procedure KeyPressOnlyNumbers(Var Key: Char);
Begin
  Case Key Of
    '0': Exit;
    '1': Exit;
    '2': Exit;
    '3': Exit;
    '4': Exit;
    '5': Exit;
    '6': Exit;
    '7': Exit;
    '8': Exit;
    '9': Exit;
    '-': Exit;
    '+': Exit;
    '.': Exit;
    #8 : Exit; {Backspace}
  End;
  Key := #0;   {Throw the key away}
End;

{!~ Throws away all keys except 0-9}
Procedure KeyPressOnlyNumbersAbsolute(Var Key: Char);
Begin
  Case Key Of
    '0': Exit;
    '1': Exit;
    '2': Exit;
    '3': Exit;
    '4': Exit;
    '5': Exit;
    '6': Exit;
    '7': Exit;
    '8': Exit;
    '9': Exit;
    #8 : Exit; {Backspace}
  End;
  Key := #0;   {Throw the key away}
End;

{!~ Throws away all characters except 0-9,-,+,.}
Function NumbersOnly(InputString: String): String;
Var
  NewString: String;
  L        : Integer;
  i        : Integer;
  C        : Char;
Begin
  Result    := InputString;
  NewString := '';
  L         := Length(InputString);
  For i:= 1 To L Do
  Begin
    C := InputString[i];
    KeyPressOnlyNumbers(C);
    If Not (C = #0) Then
    Begin
      NewString := NewString + C;
    End;
  End;
  Result    := NewString;
End;

{!~ Throws away all characters except 0-9}
Function NumbersOnlyAbsolute(InputString: String): String;
Var
  NewString: String;
  L        : Integer;
  i        : Integer;
  C        : Char;
Begin
  Result    := InputString;
  NewString := '';
  L         := Length(InputString);
  For i:= 1 To L Do
  Begin
    C := InputString[i];
    If Not(
         (C='+')  Or
         (C='-')  Or
         (C='.')  Or
         (C=',')) Then
    Begin
      KeyPressOnlyNumbers(C);
      If Not (C = #0) Then
      Begin
        If NewString = '0' Then NewString := '';
        NewString := NewString + C;
      End;
    End;
  End;
  Result    := NewString;
End;

{!~ Formats and validates values based on FieldType.  If Value is completely
invalid for the type then an empty string is retruned.}
Function ValidateStrFieldType(FieldType,Value : String): String;
Var
  sgTemp : String;
Begin
  FieldType   := UpperCase(FieldType);
  Result      := '';
  //Cannot Validate
  If FieldType = 'ADT'         Then Begin Result := '';         Exit; End;
  If FieldType = 'ARRAY'       Then Begin Result := '';         Exit; End;
  If FieldType = 'BCD'         Then Begin Result := '';         Exit; End;
  If FieldType = 'BLOB'        Then Begin Result := '';         Exit; End;
  If FieldType = 'CURSOR'      Then Begin Result := '';         Exit; End;
  If FieldType = 'DATASET'     Then Begin Result := '';         Exit; End;
  If FieldType = 'DBASEOLE'    Then Begin Result := '';         Exit; End;
  If FieldType = 'GRAPHIC'     Then Begin Result := '';         Exit; End;
  If FieldType = 'PARADOXOLE'  Then Begin Result := '';         Exit; End;
  If FieldType = 'REFERENCE'   Then Begin Result := '';         Exit; End;
  If FieldType = 'TYPEDBINARY' Then Begin Result := '';         Exit; End;
  If FieldType = 'UNKNOWN'     Then Begin Result := '';         Exit; End;

  //Just return what was sent in
  If FieldType = 'BYTES'       Then Begin Result := Value;      Exit; End;
  If FieldType = 'FIXEDCHAR'   Then Begin Result := Value;      Exit; End;
  If FieldType = 'FMTMEMO'     Then Begin Result := Value;      Exit; End;
  If FieldType = 'MEMO'        Then Begin Result := Value;      Exit; End;
  If FieldType = 'STRING'      Then Begin Result := Value;      Exit; End;
  If FieldType = 'VARBYTES'    Then Begin Result := Value;      Exit; End;
  If FieldType = 'WIDESTRING'  Then Begin Result := Value;      Exit; End;
  If FieldType = 'WORD'        Then Begin Result := Value;      Exit; End;

  //Float Types
  sgTemp := NumbersOnly(Value);
  If FieldType = 'CURRENCY'    Then Begin Result := sgTemp;     Exit; End;
  If FieldType = 'FLOAT'       Then Begin Result := sgTemp;     Exit; End;

  //Integer Types
  sgTemp := NumbersOnlyAbsolute(Value);
  If FieldType = 'AUTOINC'     Then Begin Result := sgTemp;     Exit; End;
  If FieldType = 'INTEGER'     Then Begin Result := sgTemp;     Exit; End;
  If FieldType = 'LARGEINT'    Then Begin Result := sgTemp;     Exit; End;
  If FieldType = 'SMALLINT'    Then Begin Result := sgTemp;     Exit; End;

  //Date Types
  Try
    sgTemp := FormatDateTime('mm/dd/yyyy',StrToDateTime(Value));
    If FieldType = 'DATE'      Then Begin Result := sgTemp;     Exit; End;
    sgTemp := FormatDateTime('mm/dd/yyyy hh:nn:ss',StrToDateTime(Value));
    If FieldType = 'DATETIME'  Then Begin Result := sgTemp;     Exit; End;
    sgTemp := FormatDateTime('hh:nn:ss',StrToDateTime(Value));
    If FieldType = 'TIME'      Then Begin Result := sgTemp;     Exit; End;
  Except
    Result := '';
    Exit;
  End;

  If FieldType = 'BOOLEAN'     Then
  Begin
    sgTemp := UpperCase(Copy(Trim(Value),1,1));
    If (sgTemp = 'T') Or
       (sgTemp = 'F') Or
       (sgTemp = 'Y') Or
       (sgTemp = 'N') Or
       (sgTemp = '0') Or
       (sgTemp = '1') Then
    Begin
      Result := sgTemp;
    End
    Else
    Begin
      Result := '';
    End;
  End
End;

{!~ Returns the name aof a filed from a list where values are arranged
as FieldName=FiledValue}
Function FieldNameFromList(lst : TStringList; index : Integer): String;
Var
  sgTemp : String;
  inPos  : Integer;
Begin
  Try
    Result := '';
    sgTemp := lst[index];
    sgTemp := Trim(sgTemp);
    inPos  := Pos('=',sgTemp);
    If inPos > 0 Then
    Begin
      sgTemp := Copy(sgTemp,1,inPos-1);
    End
    Else
    Begin
      sgTemp := '';
    End;
    Result := sgTemp;
  Except
    Result := '';
  End;
End;

end.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Cevapla