Коднянко В.А.
Программирование на языке Object Pascal в среде Delphi


Приложение

Перечень
отлаженных процедур и функций,
написанных автором

Ниже использованы глобальные типы и переменные:

Type

CompareType = (Less, Equal, Greater);

Var

Lon, Lon2: LongInt;

Serv: String[255];

  1. Procedure Delay(MilliSec: LongInt);
  2. {задержка времени на MilliSec миллисекунд}

    Var k: LongInt;

    begin

    k:=GetTickCount; {в модуле Windows.pas}

    While GetTickCount<(MilliSec+k) do ;

    end;

  3. Function Ctrl_ Shift_Down(i: byte): boolean;
  4. {Нажата ли одна из этих клавиш Ctrl – 1, Shift – 2}

    var

    ShiftState: TShiftState;

    j: LongInt;

    begin

    Result:=false;

    Case i of

    1: j:= VK_CONTROL;

    2: j:= VK_SHIFT;

    end;

    ShiftState := KeyDataToShiftState(j);

    Case i of

    1: Result:= (ssCtrl in ShiftState);

    2: Result:= (ssShift in ShiftState);

    end;

    end;

  5. Function CtrlDown: boolean;
  6. {нажата ли клавиша Ctrl}

    begin

    Result:=Ctrl_ Shift_Down(1);

    end;

  7. Function ShiftDown: boolean;
  8. {нажата ли клавиша Shift}

    begin

    Result:=Ctrl_Shift_Down(2);

    end;

  9. Function Profit(Expend, Price: Real): Real;
  10. {рентабельность=(цена - затраты)/затраты*100}

    begin

    if (Expend<>0) then Result:= (Price/Expend-1.0)*100.0

    else Result:= 1.e5;

    end;

  11. Procedure Warn1(S: Variant);
  12. {Окно с Variant-значением, например Warn1('Процесс закончен')}

    begin

    MessageDlg(S, mtInformation, [mbOk], 0);

    Screen.ActiveForm.Refresh;

    End;

  13. Procedure Warn4(s1,s2,s3,s4: String);
  14. {то же , что Warn1, но в 4 строки}

    var i,j: byte;

    begin

    i:=Length(s1); j:=i;

    i:=Length(s2);

    if (i>j) then j:=i;

    i:=Length(s3);

    if (i>j) then j:=i;

    i:=Length(s4);

    if (i>j) then j:=i;

    Warn1(Center(s1,j)+''#13#10+''+Center(s2,j)

    +''#13#10''+Center(s3,j)+''#13#10+''+Center(s4,j));

    end;

  15. Function DaNet(S: String): boolean;
  16. {Окно. Предназначено для вопроса, на который можно ответить, щелкнув по одной из кнопок "Да" или "Нет"}

    begin

    DaNet:=MessageDlg(S, mtConfirmation, [mbYes, mbNo], 0)=mrYes;

    Screen.ActiveForm.Refresh;

    end;

  17. Function DaNet4(s1,s2,s3,s4: String): boolean;
  18. {Окно. То же, что DaNet, только в 4 строки}

    begin

    DaNet4:=MessageDlg(Trim(s1)+''#13#10+''+Trim(s2)+''#13#10''+Trim(s3)

    +''#13#10+''+Trim(s4),mtConfirmation,[mbYes, mbNo], 0)=mrYes;

    Screen.ActiveForm.Refresh;

    end;

  19. Function InOtrReal(i,a,b: real): boolean;
  20. {Если i в орезке [a, b], то возвращает True}

    begin

    Result:=(i>=a) and (i<=b);

    end;

  21. Function ExitK: boolean;
  22. {стандартный вопрос о выходе}

    begin

    ExitK:=DaNet('Выход ?');

    end;

  23. Function Pos2(SubS, S: String; StartPos: byte): boolean;
  24. {входит ли SubS в S начиная с StartPos}

    begin

    Lon:=Pos(SubS,S);

    Result:= (Lon > 0) and (StartPos = Lon);

    end;

  25. Function ChStr(Ch: Char; d: Word): String;
  26. {создает строку из символа Ch, повторенного d раз}

    begin

    if d>0 then

    begin

    SetLength(Result,d);

    FillChar(Result[1],d,Ch);

    end;

    end;

  27. Function Prop(d: Word): String;
  28. {создает строку из d пробелов}

    begin

    Result:=ChStr(' ',d);

    end;

  29. Function Pad(s: String; d: Word): String;
  30. {вставляет справа от строки пробелы, добирая ее до длины d}

    begin

    Serv:=s;

    Lon:=Length(s);

    If (d>Lon) then Serv:=s+Prop(d-Lon);

    Result:=Serv;

    end;

  31. Function PadCopy(s: String; n,d: Word): String;
  32. {копирует из s начиная с позиции n строку длины d. В случае меньшей строки добирает ее до длины d}

    begin

    Serv:=Copy(s,n,d);

    if Length(Serv) < d then Serv:=Pad(Serv,d);

    Result:=Serv;

    end;

  33. Function LeftPad(s: String; d: Word): String;
  34. {вставляет слева от строки пробелы, добирая ее до длины d}

    begin

    Serv:=s;

    Lon:=Length(s);

    if (d>Lon) then Serv:=Prop(d-Lon)+s;

    Result:=Serv;

    end;

  35. Function Center(s: String; d: Word): String;
  36. {вставляет слева и справа от строки поровну пробелы, добирая ее до длины d}

    begin

    Serv:=s;

    Lon:=Length(s);

    Lon2:=Round(0.5*(d-Lon));

    if (d>Lon) then Serv:=Prop(Lon2)+s+Prop(d-Lon2);

    Result:=Serv;

    end;

  37. Function CompStrings(s1,s2: String): CompareType;
  38. {сравнение строк: s1<s2 - Less, s1=s2 - Equal, s1>s2 - Greater}

    begin

    if (s1<s2) then CompStrings:=Less

    else

    if (s1>s2) then CompStrings:=Greater

    else

    CompStrings:=Equal;

    end;

  39. Function CompReal(r1,r2: Real): CompareType;
  40. {сравнение вещественных чисел}

    begin

    if (r1<r2) then Result:=Less

    else

    if (r1>r2) then Result:=Greater

    else

    Result:=Equal;

    end;

  41. Procedure IncRe(Var r: Real; h: real);
  42. begin

    r:=r+h;

    end;

  43. Function LongToStr(L: LongInt; d: byte): String;
  44. {конвертирует целое в строку длины d}

    begin

    Str(L,Serv);

    Result:=LPad(Serv,d);

    end;

  45. Function Long2Str(L: LongInt): String;
  46. {конвертирует целое в строку}

    begin

    Str(L,Serv);

    Result:=Serv;

    end;

  47. Function StrLong(st: String): LongInt;
  48. {конвертирует строку в целое }

    begin

    Val(Trim(st),Lon,Code);

    Result:=Lon; end;

  49. Function Str2Long(st: String; Var L: LongInt): boolean;
  50. {конвертирует строку в целое. Возвращает True в случае успеха}

    begin

    Val(Trim(st),L,Code);

    Result:=(Code=0);

    end;

  51. Function RealToStr(R: Real; Posle: byte): String;
  52. {Конвертирует Real в строку, Posle – количество символов в дробной части R}

    begin

    Str(R:20:Posle,Serv);

    RealToStr:=Trim(Serv);

    end;

     

  53. Function Slash(Dir: String): String;
  54. {ставит в конец пути символ '\'}

    begin

    Serv:=Trim(Dir);

    if (Serv[Length(Serv)]<>'\') then Result:=Serv+'\'

    else Result:=Serv;

    end;

  55. Function ChWinDos(Ch: Char): Char;
  56. {преобразует русский Windows-символ в русский DOS-символ}

    Var i,j: byte;

    begin

    i:=Ord(Ch);

    Case i of

    168: {Ё} j:=240;

    184: {ё} j:=241;

    192..255: if (i>239) then j:=i-16 else j:=i-64

    else j:=i;

    end;

    Result:=Char(j);

    end;

  57. Function ChDosWin(Ch: Char): Char;
  58. {преобразует русский DOS-символ в русский Windows-символ}

    Var i,j: byte;

    begin

    i:=Ord(Ch);

    Case i of

    240: {Ё} j:=168;

    241: {ё} j:=184;

    128..175: j:=i+64;

    224..239: j:=i+16

    else j:=i;

    end;

    Result:=Char(j);

    end;

  59. Function StrWinDos(st: String): String;
  60. {преобразует русскую Windows-строку в русскую DOS-строку}

    Var

    n, i: byte;

    s: ^String;

    begin

    New(s);

    n:=Length(st);

    s^:= '';

    if (n>0) then

    for i:=1 to n do

    s^:= s^+ChWinDos(st[i]);

    Result:=s^;

    Dispose(s);

    end;

  61. Function StrDosWin(s: String): String;
  62. {преобразует русскую DOS-строку в русскую Windows-строку}

    Var

    n,i: byte;

    s: ^String;

    begin

    New(s);

    n:=Length(st);

    s^:= '';

    if (n>0) then

    for i:=1 to n do

    s^:= s^+ChDosWin(st[i]);

    Result:=s^;

    end;

  63. Function InputStr(const Prompt: String; Var s: String; IsParol: byte): boolean;
  64. {ввод строки. Prompt – пояснение, s – вводимая строка,

    isParol=1, если засекреченный ввод, иначе видимый}

    begin

    Result:=

    KdnInputQuery('Ввод строки', Prompt, s, clBlack, (IsParol=1));

    end;

  65. Function ParolControl(RealParol: String): boolean;
  66. {возвращает True, если введенная строка совпадает с RealParol}

    var

    b,h: boolean;

    i: byte;

    begin

    St:='';

    i:=0;

    b:=false;

    Repeat

    Inc(i);

    h:=InputStr('Введите пароль ...',St,1);

    if h then b:= (St=RealParol);

    if not b and h then Warn1('Ошибка');

    Until b or (i=3) or (not h);

    Result:=b;

    end;

  67. Function ExistSubDir(SubDir:String; Dir: tPathStr):boolean;
  68. {устанавливает наличие субдиректории SubDir внутри директории Dir. Например, в D:\DIR0001 субдиректории BAR }

    begin

    Result:=DirectoryExists(Slash(SubDir)+Dir);

    end;

  69. Function GetFileSize(const FileName: string): LongInt;
  70. {размер файла}

    var Sr: TSearchRec;

    begin

    if FindFirst(ExpandFileName(FileName), faAnyFile, Sr) = 0 then

    Result := Sr.Size

    else Result := -1;

    end;

  71. Function FileDateTime(const FileName: string): System.TDateTime;
  72. {время создания файла FileName, например:

    s:= DateTimeToStr(FileDateTime('c:\KdnBread\Bread.exe'))}

    begin

    Result := FileDateToDateTime(FileAge(FileName));

    end;

  73. Function HasAttr(const FileName: string; Attr: Word): Boolean;
  74. {имеет ли файл FileName атрибут Attr}

    begin

    Result := (FileGetAttr(FileName) and Attr) = Attr;

    end;

  75. Procedure AppendText(Var f: Text; nF: String);
  76. {открывает текстовой файл для добавления строк}

    begin

    Assign(f,nF);

    if KdnFS(nF,1)>0 then Append(f) else Rewrite(f);

    end;

  77. Procedure AppendToText(nF,s: String);
  78. {добавляет строку в конец текстового файла}

    Var f: TextFile;

    begin

    AppendText(f, nF);

    Writeln(f,s);

    CloseFile(f);

    end;

  79. Procedure KdnExec(Command: String);

{запуск другого приложения, например 'c:\KdnBreadDir\KdnBread.exe'}

begin

Serv:=Command+#0;

If WinExec(@Serv[1], SW_SHOWNORMAL)<32

then Warn2('Ошибочное завершение WinExec');

end;

 

</body> </html>