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; ;