Суббота, 23.11.2024, 23:14 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Anton93, Волк-1024, xXxSh@dowxXx  
Сччетчик на Delphi
dolphinДата: Суббота, 17.01.2009, 22:46 | Сообщение # 1
Администратор
Сообщений: 906
Статус: Offline
А теперь давай напишем простенькое веб-приложение.

Графический счетчик обращений

Почему я выбрал такой простой пример? Цель моей статьи - показать возможности Delphi, а дальше уже на твое усмотрение.

Итак, запускай Delphi и лезь в New -> Other -> Web Server Application. Далее появится диалоговое окно, в котором ты сможешь выбрать тип приложения (выбирай CGI). Перед тобой появилось окошко компонента WebModule1. Для построения приложения тебе придется редактировать Actions этого компонента. Добавь новый Action, нажав на кнопку Add new в диалоговом окне Editing Webmodule1.Actions. После этого создай обработчик события OnAction и напиши туда код из "Листинга счетчика".

Поясню, мы создаем не многофункциональное приложение, а простой счетчик посещаемости, поэтому никакие другие свойства компонента редактировать не надо; а вот для более сложных приложений понадобится редактирование поля PathInfo для каждого нового Action’а. Думаю, ты понимаешь, зачем это нужно.

А теперь давай разберемся с программой. Только сначала отредактируй раздел uses:

Code
uses Windows, Graphics, Jpeg, ExtCtrls, SysUtils, Classes, HTTPApp;

Сам код объяснять не буду - там все очень просто. Расскажу лишь, как это работает. Существует два метода написания графических счетчиков: первый заключается в рисовании картинок с цифрами от 0 до 9 и последующей комбинации из них нужного числа. Второй (мы будем использовать его) - рисование в памяти растровой картинки с выводом числа прямо на ней. Как мы этого добьемся? Для начала создаем растровое изображение (компонент Image), а для рисования на нем используем стандартные методы класса TCanvas. Далее мы подключаем это изображение к объекту класса TJpegImage, чтобы получить изображение в формате jpeg. После этого можно сохранить полученные данные в поток и вернуть их клиенту.

Механизм же реализации счетчика еще проще: при обращении клиента к программе осуществляется проверка на наличие лог-файла с числом посещений. Если файл существует, то программа просто добавляет единицу и перезаписывает файл; если же его нет, то в файл пишется единица (так как мы все же обратились к странице один раз). А дальше осуществляется подготовка изображения и отправка его клиенту.

За пересылку изображения клиенту отвечают три выражения:

Code
Response.ContentType := 'image/jpeg'; - задает тип содержимого ответа;

Response.ContentStream := Stream; - присваивает поток свойству ContentStream;

Response.SendResponse; - отправляет ответ клиенту.

Теперь для проверки работоспособности приложения ты можешь обратиться к нему так: www.somehost.ru/cgi-bin/Project1, или вставить в нужную тебе страницу тег <img src="путь_к_скрипту">.

Заключение

И последнее. При написании серверных приложений каждый сталкивался с проблемой их отладки. Но у тех, кто использует Delphi таких проблем больше не будет: начиная с 6 версии появился встроенный отладчик Web App Debugger. Подробно рассказывать о нем не буду, но если возникнут вопросы, смело присылай их мне.

Вот и все. Теперь у тебя есть начальные знания, необходимые для написания серверного приложения на Delphi.

Code
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;

Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

var

Bitmap: TBitmap;

Hits: Integer;

LogFile: Text;

FileName: string;

Jpeg1: TJpegImage;

Stream: TMemoryStream;

begin

FileName :='Count.log'; //задаем название лог-файла

System.Assign(LogFile, FileName);

try

if FileExists(FileName) then //если файл существует, то добавляем 1 к общему числу посещений

begin

Reset(LogFile);

Readln(LogFile, Hits);

Inc(Hits);

end

else //если нет, то пишем в файл 1

Hits := 1;

Rewrite(LogFile);

Writeln(LogFile, Hits);

finally

Close(LogFile);

end;

Bitmap := TBitmap.Create; //создаем изображение

try

Bitmap.Width := 120;

Bitmap.Height := 25;

Bitmap.Canvas.Font.Name := 'Arial';

Bitmap.Canvas.Font.Size := 14;

Bitmap.Canvas.Font.Color := RGB (255, 127, 0);

Bitmap.Canvas.Font.Style := [fsBold];

Bitmap.Canvas.TextOut (1, 1, 'Hits: ' + FormatFloat ('###,###,###', Int(Hits))); //выводим количество посещений

Jpeg1 := TJpegImage.Create;

try

Jpeg1.CompressionQuality := 50;

Jpeg1.Assign(Bitmap);

Stream := TMemoryStream.Create; //создаем поток

Jpeg1.SaveToStream (Stream); //помещаем в него изображение

Stream.Position := 0;   

Response.ContentType := 'image/jpeg';

Response.ContentStream := Stream;

Response.SendResponse; //отсылаем результат

finally

Jpeg1.Free;

end;

finally

Bitmap.Free;

end;

end;



Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик


Сообщение отредактировал dolphin - Воскресенье, 12.04.2009, 13:44
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz