Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

X-Program ПО, новости сайта и программирование в Delphi7


Информационный Канал Subscribe.Ru

KLSoft company
present
программирование в delphi и php. Выпуск 51.

Новости
28 июля 2005
Наконец-то рассылка опять вышла в свет!
Привет всем! Вот наконец-то я решил снова выпускать рассылку.
Так долго нас не было, потому что я поступал в НГТУ! Вот завтра(29) всё решиться(узнаю поступил или нет)
Теперь постараюсь делать выходы рассылки почаще.


28 июля 2005
Новое название рассылки
Наверное Вы были немало удивлены, когда увидели в заголовке рассылки не X-Program, а KLSoft
Всё просто. У нас новое название компании. Кстати... теперь мы будем писать не только про Delphi, но и про PHP!!!
Это связано с новым сайтом http://klsoft.com.ru который написан полностью на языке PHP.



Навигация по сайту

Навигация по рассылке

Функция возвращает колличество уникальных цветов Bitmap
function HowManyColors(Bitmap: TBitmap): Integer;
type
TRGB = record
B, G, R: Byte;
end;
pRGB = ^TRGB;

var i: Byte;
x, y: Integer;
Dest: pRGB;
RGBArray: array [0..255, 0..255] of array of Byte;
begin
Bitmap.PixelFormat := pf24Bit;
Result := 0;
for y := 0 to Bitmap.Height - 1 do begin
Dest := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do begin
with Dest^ do
if RGBArray[r, g] <> nil then
for i := 0 to High(RGBArray[r, g]) do begin
//если такой цвет уже есть, то выходим из цыкла
if RGBArray[r, g] [i] = b then Break;
//если это последний круг цикла, то такого цвета нет
if i = High(RGBArray[r, g]) then begin
Inc(Result); //прибавляем один цвет
SetLength(RGBArray[r, g], Length(RGBArray[r, g]) + 1);
RGBArray[r, g] [High(RGBArray[r, g])] := b;
end;
end
else begin
Inc(Result);
SetLength(RGBArray[r, g], 1);
RGBArray[r, g] [0] := b;
end;
Inc(Dest);
end;
end;
end;
..............................
procedure TForm1.MMHowManyColorsClick(Sender: TObject);
var str: string;
begin
Screen.Cursor := crHourGlass;
try
str := Format('Изображение содержит %d цветов.', [HowManyColors(FBitmap)]);
finally
Screen.Cursor := crDefault;
end;
Application.MessageBox(PChar(str), PChar(Application.Title), MB_OK);
end;

Bitmap преобразуется в двухцветное изображение
procedure Threshold(Bitmap: TBitmap; Value: Byte; Color1, Color2: TColor);
type TRGB = record
B, G, R: Byte;
end;
pRGB = ^TRGB;

function ColorToRGB(Color: TColor): TRGB;
begin
with Result do begin
R := Lo(Color);
G := Lo(Color shr 8);
B := Lo((Color shr 8) shr 8);
end;
end;

var x, y: Word;
C1, C2: TRGB;
Dest: pRGB;
begin
Bitmap.PixelFormat := pf24Bit;
C1 := ColorToRGB(Color1);
C2 := ColorToRGB(Color2);
for y := 0 to Bitmap.Height - 1 do begin
Dest := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do begin
//если среднеарифметическое R, G и B больше Value,
//то точку (x, y) закрашиваем цветом Color1,
//иначе - цветом Color2
if (Dest^.r + Dest^.g + Dest^.b) / 3 > Value
then Dest^ := C1
else Dest^ := C2;
Inc(Dest);
end;
end;
end;

Передача на сервер данных методом POST с помощью компоненты TWebBrowser
Для тестирования этого примера просто создайте новую форму и киньте на нее TWebBrowser.
Функция имеет два параметра - в первом просто передаются данные для отправки, а во втором - URL.
Для версий Delphi3 и Delphi4, где WebBrowser изначально отсутствует на Палитре, его нужно проинсталлировать через меню Components->Import ActiveX Control

procedure TForm1.PostWithWebBrowser(PostString:string; URL:OleVariant);
var
Data: Pointer;
PostData: OleVariant;
Flags, TargetFrame, Headers: OleVariant;
begin
PostData := VarArrayCreate([0, Length(PostString) - 1], varByte);
Data := VarArrayLock(PostData);
try
Move(PostString[1], Data^, Length(PostString));
finally
VarArrayUnlock(PostData);
end;
Flags := EmptyParam;
TargetFrameName := EmptyParam;
Headers := EmptyParam;
WebBrowser1.Navigate2(URL, Flags, TargetFrame, PostData, Headers);
end;

PHP программы
Программы PHP могут выполняться двумя способами: как сценарное приложение Web-сервером и как консольные программы. Поскольку, нашей задачей является программирование web-приложений, мы преимущественно будем рассматривать первый способ.

Дело в том, что на PHP, как правило, используется сугубо для программирования приложений, связанных с Интернетом. Однако, PHP можно еще использовать в качестве интерпретатора командной строки, в основном в *nix-системах. Последнее возможно при помощи CORBA и COM интерфейсов, а также при помощи расширения PHP-GTK. При таком использовании PHP возможно решение следующих задач:
создание приложений интерактивной командной строки;
создание кросс-платформенных GUI приложений при помощи библиотеки PHP-GTK;
автоматизация некоторых задач под Windows и Linux
Рассмотрим процесс выполнения php-сценария при обращении броузера к серверу. Итак, вначале броузер запрашивает страницу с расширением .php, после чего web-сервер пропускает программу через машину PHP и выдаёт результат в виде html-кода. Причем, если взять стандартную страницу HTML, изменить расширение на .php и пропустить её через машину PHP, последняя просто перешлёт её пользователю без изменений. Чтобы включить в этот файл команды PHP, необходимо заключить команды PHP в специальные теги, которых различают 4 вида (они эквивалентны и можно использовать любые):

Инструкция обработки XML:
<?php
...
?>
Инструкция обработки SGML:
<?
...
?>
Инструкция обработки сценариев HTML:
<script language = "php">
...
</script>

Инструкция в стиле ASP:
<%
...
%>

Мы будем придерживаться стиля XML или SGML.

Вообще говоря, внутри какого-либо блока кода можно выйти из PHP, при условии, что дальше мы войдем в него снова и закончим код (Подробнее об этом смотрите в гл.2.). Т.е., возможна следующая конструкция:

<?
if(5<3){
echo("<p>Hello, world!<p>");
?>
<p>Hello!</p>
// эта строка не интерпретируется как код PHP
// и выводится только если блок кода выполняется
<?
echo("<p>Hello, world!<p>");
}
?>

Команда echo в PHP применяется для вывода фактически всего, что встречается на web-страницах (текст, разметку HTML, числа). Смысл ее действия, мы думаем, понятен из приведенного примера.

PHP коментарии
PHP предоставляет несколько методов для вставки комментариев. Проще всего пользоваться двойным слэшем (//), после чего PHP машина игнорирует все, что расположено до конца строки. Также можно пользоваться многострочными комментариями в стиле С (/*…*/). Для однострочных комментариев можно еще пользоваться символом решетки (#) (комментарий скриптовых языков UNIX).
$lt;php
echo("$lt;p$gt;Hello$lt;/p$gt;"); // комментарий
echo("$lt;p$gt;Hello$lt;/p$gt;"); # комментарий
/*
и это тоже комментарии
*/
?$gt;
Следует помнить о том, что стили комментариев PHP действуют только внутри ограничителей PHP. Если PHP встретит эти символы комментариев вне ограничителей, то они, как и любой текст, будут помещены на html-страницу. Например:
$lt;php
echo("$lt;p$gt;Hello$lt;/p$gt;"); // нормальный комментарий
?$gt;
// а вот этот комментарий отобразиться броузером.
$lt;!-- Комментарий HTML.
Будет виден в исходном коде HTML, но не в браузере --$gt;
Заметим, что комментарии можно вставлять не только после конца оператора, а, например, и вот так:
$lt;?
$a = "Hello, world";
echo strstr($a,"H");
// эту функцию мы рассмотрим позднее
?$gt;

PHP переменные и константы
В РНР переменные начинаются со знака доллара ($). За этим знаком может следовать любое количество буквенно-цифровых символов и символов подчеркивания, но первый символ не может быть цифрой или подчеркиванием. Следует также помнить, что имена переменных в РНР чувствительны к регистру, в отличие от ключевых слов.
При объявлении переменных в РНР не требуется явно указывать тип переменной, при этом одна и та же переменная может иметь на протяжении программы разные типы.
Переменная инициализируется в момент присваивания ей значения и существует до тех пор, пока выполняется программа. Т.е., в случае web-страницы это означает, что до тех пор, пока не завершен запрос.
Внешние переменные
После того, как запрос клиента проанализирован веб-сервером и передан РНР машине, последняя устанавливает ряд переменных, которые содержат данные, относящиеся к запросу и доступны все время его выполнения. Сначала РНР берет переменные окружения Вашей системы и создает переменные с теми же именами и значениями в окружении сценария РНР для того чтобы сценариям, расположенным на сервере были доступны особенности системы клиента. Эти переменные помещаются в ассоциативный массив $HTTP_ENV_VARS (подробнее о массивах можно узнать в главе 4).
Естественно, что переменные массива $HTTP_ENV_VARS являются системно зависимыми (поскольку это фактически переменные окружения). Посмотреть значения переменных окружения для Вашей машины Вы можете при помощи команды env (Unix) или set (Windows).
Затем РНР создает группу GET-переменных, которые создаются при анализе строки запроса. Строка запроса хранится в переменной $QUERY_STRING и представляет собой информацию, следующую за символом "?" в запрошенном URL. РНР разбивает строку запроса по символам & на отдельные элементы, а затем ищет в каждом из этих элементов знак "=". Если знак "=" найден, то создается переменная с именем из символов, стоящих слева от знака равенства. Рассмотрим следующую форму:
$lt;form action = "http://localhost/PHP/test.php" method="get"$gt;
HDD: $lt;input type="text" name="HDD"/$gt;$lt;br$gt;
CDROM: $lt;input type="text" name="CDROM"/$gt;$lt;br$gt;
$lt;input type="submit"/$gt;

Если Вы в этой форме в строке HDD наберете, к примеру, "Maxtor", а в строке CDROM "Nec", то она сгенерирует следующую форму запроса:
http://localhost/PHP/test.php?HDD=Maxtor&CDROM=Nec
В нашем случае РНР создаст следующие переменные: $HDD = "Maxtor" и $CDROM = "Nec".
Вы можете работать с этими переменными из Вашего скрипта (у нас - test.php) как с обычными переменными. В нашем случае они просто выводятся на экран:
$lt;?
echo("$lt;p$gt;HDD is $HDD$lt;/p$gt;");
echo("$lt;p$gt;CDROM is $CDROM$lt;/p$gt;");
?$gt;
Если запрос страницы выполняется при помощи метода POST, то появляется группа POST-переменных, которые интерпретируются также и помещаются в массив $HTTP_POST_VARS.


Константы
Константы объявляются в РНР при помощи функции define():
define(CONSTANT, value)
Первый параметр этой функции - имя константы, второй - её значение. При использовании константы на неё ссылаются по имени:
$lt;?
define(CONSTANT1,15);
define(CONSTANT2,"\x20"); // код пробела
define(CONSTANT3,"Hello");
echo(CONSTANT1);
echo(CONSTANT2);
echo(CONSTANT3);
?$gt;
По традиции имена констант пишут буквами верхнего регистра. И хотя это только традиция, мы Вам рекомендуем ей следовать, поскольку плохие программисты получаются в том числе и из тех, кто не следовал хорошим традициям J. Существует функция defined(), которая проверяет, определена ли константа:
$lt;?
define(CONSTANT,"Hello");
if(defined("CONSTANT"))
{
echo("$lt;p$gt;CONSTANT is defined$lt;/p$gt;");
}
?$gt;

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.program
Отписаться
Вспомнить пароль

В избранное