Створення cgi лічильника в delphi 5, delphisite

procedure GetPaths # 40; Request: TWebRequest; var ScriptPath, LocalPath. String # 41; ;

ScriptPath: = Request. ScriptName;

ScriptFileName: = ExtractFileName # 40; ParamStr # 40; 0 # 41; # 41; ;

// Прибираємо EXE / DLL ім'я, щоб отримати шлях

Delete # 40; ScriptPath, Pos # 40; ScriptFileName, ScriptPath # 41; -1. Length # 40; ScriptFileName # 41; +1 # 41; ;

// Прибираємо головну косу

Delete # 40; ScriptPath, 1. 1 # 41; ;

LocalPath: = ExtractFilePath # 40; ParamStr # 40; 0 # 41; # 41; ;

// Видалення ScriptPath дає нам кореневої шлях

Delete # 40; LocalPath, Pos # 40; ScriptPath, LocalPath # 41; -1. Length # 40; ScriptPath # 41; +1 # 41; ;

Процедура SetVariable буде використовуватися для ініціалізації потрібних нам змінних.

procedure SetVariable # 40; var S. String; const Value, Default. String # 41; ;
begin
S: = Value;
if S = '' then
S: = Default;
end;

Вся суть CGI скрипта полягає в подія OnAction. Давайте розглянемо його по кроках.
procedure TWebModule1.WebModule1WebActionItem1Action (Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Спершу оголосимо деякі локальні змінні.

Тепер викличемо GetPaths, щоб з'ясувати шлях до скрипту, а так же локальний шлях. В даному прикладі ми будемо розміщувати наші лічильники в директорію "counters". Фізичний шлях буде виглядати приблизно так "C: \ InetPub \ counters".

GetPaths # 40; Request, ScriptPath, LocalPath # 41; ;

LocalPath: = LocalPath + 'counters \';

Потім, ми отримуємо всі параметри, передані разом з викликом скрипта. Параметри надходять до нас через властивість Request.QueryFields. Зверніть увагу, що якщо якийсь параметр не був переданий, то SetVariable встановлює його за замовчуванням.

with Request. QueryFields do begin

FileName: = LocalPath + Values # 91; 'FileName' # 93; + '.txt';

SetVariable # 40; Txt, Values # 91; 'Txt' # 93 ;. 'You are visitor. today, and. ever. ' # 41; ;

SetVariable # 40; FontName, Values # 91; 'FontName' # 93 ;. 'Arial' # 41; ;

SetVariable # 40; FontSize, Values # 91; 'FontSize' # 93 ;. '10' # 41; ;

SetVariable # 40; FontColor, Values # 91; 'FontColor' # 93 ;. 'ClWhite' # 41; ;

SetVariable # 40; BackgroundColor, Values # 91; 'BackgroundColor' # 93 ;. 'ClBlack' # 41; ;

Тепер ми повинні бути впевнені, що присутній файл для даного лічильника. Якщо його немає, то просто створюємо його.

// Write a new empty counter file if it does not exist

if not FileExists # 40; FileName # 41; then begin

AssignFile # 40; fp, FileName # 41; ;

Rewrite # 40; fp # 41; ;

WriteLn # 40; fp, 0 # 41; ;

WriteLn # 40; fp, Date # 41; ;

WriteLn # 40; fp, 0 # 41; ;

CloseFile # 40; fp # 41; ;

Отже, файл існує. Естевственно, якщо ми створили його, що лічильник буде дорівнює 0, інакше будемо зчитувати старі значення, і зменять їх, якщо необхідно. Зверніть увагу. на те, як ми відстежуємо загальне число відвідування і відвідувань за день.

// Читаємо старі значення лічильника

AssignFile # 40; fp, FileName # 41; ;

ReadLn # 40; fp, LastEver # 41; ;

Ever: = LastEver +1;

ReadLn # 40; fp, LastDate # 41; ;

ReadLn # 40; fp, LastToday # 41; ;

if Date = LastDate then

Today: = LastToday +1

CloseFile # 40; fp # 41; ;

І на завершення, треба записати нові значення в файл, який містить дані лічильника.

// Записуємо нові значення лічильника

AssignFile # 40; fp, FileName # 41; ;

Rewrite # 40; fp # 41; ;

WriteLn # 40; fp, Ever # 41; ;

WriteLn # 40; fp, Date # 41; ;

WriteLn # 40; fp, Today # 41; ;

CloseFile # 40; fp # 41; ;

Тепер приступимо до созднію того, що в кінцевому підсумку буде називатися JPEG. Для початку зробимо невидимим TForm яка містить TPanel і TMemo. Так само встановлюємо FontName і FontSize.

Form: = TForm. Create # 40; nil # 41; ;

with Form. Font do begin

Size: = StrToInt # 40; FontSize # 41; ;

Переконався в тому, що текст, який ми поміщаємо в memo контрол, містить значення лічильника, лічені з файлу.

Txt: = Format # 40; Txt, # 91; Today, Ever # 93; # 41; ;

Далі ми створюємо панель. Ширина і висота будуть визначатися шириною тексту, який ми поміщаємо в неї. Так само встановлюємо скошування для 3D ефекту.

Panel: = TPanel. Create # 40; nil # 41; ;

with Panel do begin

Width: = Form. Canvas. TextWidth # 40; Txt # 41; +9;

Height: = Form. Canvas. TextHeight # 40; Txt # 41; +9;

Розміщуємо memo в панель, і встановлюємо її ширину і висоту, а так же колір, який вказаний в BackgroundColor.

Memo: = TMemo. Create # 40; nil # 41; ;

with Memo do begin

Width: = Panel. Width -5;

Height: = Panel. Height -5;

Color: = StringToColor # 40; BackgroundColor # 41; ;

Тепер необхідно зробити зображення еелементи управління, який ми створили. Для цього створюємо TBitmap і закрашеваем його панеллю. За одне малюємо текст на бітмапи.

Bitmap: = TBitmap. Create;

with Bitmap do begin

Width: = Panel. Width -1;

Height: = Panel. Height -1;

Panel. PaintTo # 40; Canvas. Handle. 0. 0 # 41; ;

Canvas. Brush. Style: = bsClear;

with Canvas. Font do begin

Size: = StrToInt # 40; FontSize # 41; ;

Color: = StringToColor # 40; FontColor # 41; ;

Canvas. TextOut # 40; 4. 3, Txt # 41; ;

Потім перетворюємо bitmap в JPEG. JPEG буде записаний в memory stream. Цей потік буде пов'язаний з браузером і передаватися відвідувачеві сторінки у вигляді картинки.

with Response do begin

MS: = TMemoryStream. Create;

with TJPEGImage. Create do begin

Assign # 40; Bitmap # 41; ;

SaveToStream # 40; MS # 41; ;

Схожі статті