KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Валентин Озеров, "Советы по Delphi. Версия 1.4.3 от 1.1.2001" бесплатно, без регистрации.
Перейти на страницу:

Использование обоих вызовов DbiUseIdleTime и DbiSaveChanges (после каждого обновления записи) излишне и сопровождается необязательными вызовами функций. Если приложение выполняет множественный ввод новых записей или их редактирование в течение небольшого периода времени, рекомендуем осуществлять вызов функции DbiUseIdleTime во время простоя клинта, а вызов DbiSaveChanges после осуществления «пакета» обновлений.

В случае, если в таблице выполняется не слишком много изменений, клиент может использовать вызов DbiSaveChanges после каждого постинга или же «повесить» на таймер вызов DbiUseIdleTime.

Internet 

Форматы 

UUE кодирование

Sergei Dubarev пишет:

Ваши "Советы…" — классная штука. Столько всего вкусного! :-) Со своей стороны хочу предложить несколько тормозной и местами упрощенный, но все же рабочий ;), алгоритм UUE кодирования (см. аттач). Не вершина искусства, но все же… :)

Для того, чтобы ОНО заработало, необходимо создать проект в составе:

Форма (form) — 1 шт. Поле ввода (edit) — 2 шт., используются события OnDblClick. Кнопка (button) — 1 шт., используется событие OnClick. Диалог открытия файла (Open Dialog) — 1 шт. Диалог сохранения файла (Save Dialog) — 1 шт.

Имена файлов будут вводится либо вручную, либо из диалога (double-click на поле ввода edit), причем в edit1.text должно лежать имя входного файла, в edit2.text — выходного. По нажатии кнопки пойдет процесс, который завершится сообщением "DONE."

Всего хорошего.

P.S. Функция toanysys обнаружена в книге "Для чего нужны и как работают персональные ЭВМ" от 1990 г. Там она присутствует в виде программы на BASIC'e.

P.P.S. Для стимулирования фантазии читателей "Советов…" высылаю так же мессагу из эхи, на основе которой я сваял свое чудо.

Файл Unit1.pas

//UUE кодирование

unit Unit1;


interface


uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ExtDlgs, StdCtrls;


type TForm1 = class(TForm)

 Button1: TButton;

 Edit1: TEdit;

 Edit2: TEdit;

 OpenDialog1: TOpenDialog;

 SaveDialog1: TSaveDialog;

 procedure Edit1DblClick(Sender: TObject);

 procedure Edit2DblClick(Sender: TObject);

 procedure Button1Click(Sender: TObject);

private

  { Private declarations }

public

  { Public declarations }

end;


var Form1: TForm1;


implementation


{$R *.DFM}


const

 ssz = (High(Cardinal) - $F) div sizeof(byte);//эта константа используется при выделении памяти

 p: string = '0123456789ABCDEF';//эта константа используется функцией toanysys



//выбор входного файла

procedure TForm1.Edit1DblClick(Sender: TObject);

begin

 if opendialog1.execute then edit1.text:= opendialog1.filename;

end;


//выбор выходного (UUE) файла

procedure TForm1.Edit2DblClick(Sender: TObject);

begin

 if savedialog1.execute then edit2.text:= savedialog1.filename;

end;


//выделение подстроки

function mid(s: string; fromc, toc: byte): string;

var

 s1: string;

 i : byte;

begin

 s1:= '';

 for i:= fromc to toc do s1:= s1+s[i];

 mid:= s1;

end;


//перевод числа (a) из десятичной системы в другую

//с основанием (r)

function toanysys(a, r: byte): string;

var

 s, k : string;

 n,m,i : byte;

begin

 s:='';

 m:= 1;

 while m<>0 do begin

  m:= a div r;

  n:= a-m*r+1;

  k:= p[n];

  s:= k+s;

  a:= m;

 end;

 //добавляет незначащие нули

 for i:=1 to 8-length(s) do s:='0'+s;

 toanysys:= s;

end;


//перевод 6-разрядного числа из двоичной системы в десятичную

//двоичное число подставляется в виде строки символов

function frombin(s: string): byte;

var i, e, b: byte;

begin

 b:= 0;

 for i:=1 to 6 do begin

  e:= 1 shl (6-i);

  if s[i]='1' then b:= b+e;

 end;

 frombin:= b;

end;


//непосредственно кодирование

type tcoola = array [1..1] of byte;

pcoola = ^tcoola;


procedure TForm1.Button1Click(Sender: TObject);

var

 inf: file of byte;

 ouf: textfile;

 uue: pcoola;

 b  : array[1..4] of byte;

 bin,t  : string;

 szf,oum,szl,szh,sxl,sxh,i, j  : longint;

begin

 {$I-}

 assignfile(inf, edit1.text); //входной файл

 reset(inf);

 szf:= filesize(inf);    //

 szh:= (szf*8) div 6;    //

 if szf*8-szh*6 = 0 then szl:= 0

 else szl:= 1;      //

 getmem(uue, szh+szl); //выделение памяти

 oum:= 1;

 while not(eof(inf)) do begin

  b[1]:= 0;

  b[2]:= 0;

  b[3]:= 0;

  b[4]:= 0;

  //чтение должно быть сделано посложнее,

  //дабы избежать "read beyond end of file"

  read(inf, b[1], b[2], b[3]);

  //читаем 3 байта из входного файла

  //и формируем "двоичную" строку

  bin:= toanysys(b[1],2)+toanysys(b[2],2)+toanysys(b[3],2);

  //разбиваем строку на куски по 6 бит и добавляем 32

  t:= mid(bin, 19, 24);

  b[4]:= frombin(t)+32;

  t:=mid(bin, 13, 18);

  b[3]:= frombin(t)+32;

  t:= mid(bin, 07, 12);

  b[2]:= frombin(t)+32;

  t:= mid(bin, 01, 06);

  b[1]:= frombin(t)+32;

  //запихиваем полученнные байты во временный массив

  uue[oum]:= b[1];

  oum:= oum+1;

  uue[oum]:= b[2];

  oum:= oum+1;

  uue[oum]:= b[3];

  oum:= oum+1;

  uue[oum]:= b[4];

  oum:= oum+1;

 end;

 //входной файл больше не нужен - закрываем его

 closefile(inf);

 //формируем выходной файл

 assignfile(ouf, edit2.text); //выходной файл

 rewrite(ouf);

 oum:= 1;

 sxh:= (szh+szl) div 60; //число строк в UUE файле

 sxl:= (szh+szl)-sxh*60;

 //заголовок UUE-файла

 writeln(ouf, 'begin 644 '+extractfilename(edit1.text));

 //записываем строки в файл

 for i:=1 to sxh do begin

  write(ouf, 'M');

  // 'M' значит, что в строке 60 символов

  for j:= 1 to 60 do begin

   write(ouf, chr(uue[oum]));

   oum:= oum+1;

  end;

  writeln(ouf);

 end;

 //записываем последнюю строку, которая//обычно короче 60 символов

 sxh:= (sxl*6) div 8;

 write(ouf, chr(sxh+32));

 for i:= 1 to sxl do begin

  write(ouf, chr(uue[oum]));

  oum:= oum+1;

 end;

 // "добиваем" строку незначащими символами

 for i:= sxl+1 to 60 do write(ouf, '`');

 //записываем последние строки файла

 writeln(ouf);

 writeln(ouf, '`');

 writeln(ouf, 'end');

 closefile(ouf);

 freemem(uue, szh+szl);

 //освобождаем память

 showmessage('DONE.'); //Готово. Забирайте!

end;


end.

Из FIDO-переписки:

- New auto-created HomeNet area (555:172/89.2) ------------- HOME.PROGRAMMERS -

 Msg : 34 of 35

 From : Philip Bondarovich 555:172/445.43 Пнд 17 Янв 00 02:51

 To : Denis Guravski Втp 18 Янв 00 22:21

 Subj : UUE

-------------------------------------------------------------------------------

 Wednesday January 12 2000 22:56, Denis Guravski писал All:

 DG> Люди , сpочно нyжно описание сабжа .


=== Begin uuecode ===

- INT.PROGRAMMERS (256:172/43) ------------------------------ INT.PROGRAMMERS -

 Msg : 38 of 38 -36 Scn

 From : Monk 256:172/10 15 Jan 00 18:24:30

 To : Nikolay Severikov 16 Jan 00 03:47:50

 Subj : UU-code

-------------------------------------------------------------------------------


 Жывi сабе памаленькy, /_*Nikolay*_/!


У чацьвэp Стyдзеня 13 2000 y 23:25, цёмнай ночкаю, Nikolay Severikov тайна пiсаў All, i я ўцягнyўся...

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*