Delphi и flash совмещение несовместимого


Delphi и flash совмещение несовместимого

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

zdwork
Статус: 6-й класс
Рейтинг: 792
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 457
puporev
Статус: Профессионал
Рейтинг: 295
Перейти к консультации №:

Здравствуйте, уважаемые эксперты. Мне необходимо в Delphi вставить ролики, созданные в Macromedia Flash, можно ли их добавить в swf формате и как? Если же это игрушка флэшевская? Спасибо.

Состояние: Консультация закрыта

Все просто: делаете в Дельфи — Import ActiveX. Выбираете ShockwaveFlash (что 1.0 совершенно неважно, реально будет использоваться та версия, что установлена). Получаете на странице ActiveX нужный компонент — его и используете (ему как раз только SWF и подходят, игрушки проходят как и любые другие — проверено).

P.S. Если надо, чтобы файл SWF был не отдельным, то тогда используете помещение его в ресурсы — как это делать уже не раз спрашивалось и отвечалось где-то здесь.

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Создание Web-приложений в среде Delphi

Эпоха web-дизайна, когда наиважнейшим считалось возможность запихнуть на страницу как можно больше графики и поразить пользователя широтой фантазии дизайнера, канула в лету. В моде — информационный дизайн и всяческие удобности для пользователя. Плохим тоном уже считается одно только то, что на сайте нет форума или гостевой книги, и самое ужасное — о, боже — вы до сих пор верстаете каждую страницу вручную, вместо того, что бы поручить сеё скучное и утомительное занятие скрипту.

Время первопроходцев HTML в скором времени закончится и вовсе, и их место займут профессионалы-программисты. Именно программисты, ибо уже в большей степени от их умения создать удобный в использование сайт зависит его успех. Кроме прочего, теперь сайты создают совсем уж как программные продукты: тем кто занят наполнением содержанием, уже может не опасаться запутаться в html, java, cgi и прочих ипостасях интернет-технологий — администрирование сайта становится таким же привычным и удобным, как работа с текстовыми процессорами. Пока, правда, ощущается явный недостаток законченных продуктов, на плечи которых можно было бы возложить все функции по поддержанию сайта в актуальном состоянии, оставив себе лишь вопросы по наполнению его содержанием.

Пока же тяжкое бремя по созданию данных систем, на основе которых будет функционировать сайт, ложится на плечи программистов, только вот-вот успевших изумится возможностями языка Perl или Java. И многие из них, сказать без преувеличения, вышли, словно из гоголевской «Шинели», из Delphi. Действительно, данная среда разработчика, предоставляющая удобный интерфейс для визуального программирования и широкие возможности Object Pascal, столь мила сердцу российских программистов.

Но, похоже, что времена меняются, и Delphi из среды создания обычных настольных приложений, может сгодиться и в другом плане: для написания прикладных web-программ. И действительно, что может быть лучше: уже знакомая среда разработки, вдоль и поперек изученный язык, да и достаточно широкий круг специалистов по программированию в Delphi — это ли не плюсы создания web-приложений на Delphi. Есть конечно и минусы: созданные программы вряд ли смогут удовлетворить тех, кто считает, что лучший web-сервер, это сервер не от Microsoft. Но что поделаешь — версия Delphi под Unix отложена пока до лучших времен. Зато посудите сами: перенос программ в будущем светлом будущем можно будет совершить с малой кровью.

Но отложим пока теорию в сторону, и обратимся к практике. Итак, создание web-приложения в среде Delphi, что называется шаг за шагом.

Пример из учебника

В отличие от прочих аспектов создания приложений в Delphi, о создании приложений для web написано мало. Так ужасающе мало, что из книги в книгу, из учебника в учебник путешествует один и тот же пример. Не будем оригинальничать и мы — чем проще, тем лучше.

Вообще, простейшее web-приложение на Delphi мало чем отличается, а точнее ничем не отличается от создания программы для старой доброй DOS. Это — простейшее консольное приложение, запускаемое на стороне сервера и взаимодействующие с пользователем (в случае необходимости) через броузер.

Создайте в Delphi новый проект — ту самую уже давно забытую всем Console Application. Вы получите знакомый со школьной скамьи, текст обычной паскалевской программы:

Далее еще проще. Организуем вывод кода HTML с помощью команды writeln.

Обратите внимание на строку CONTENT-TYPE: TEXT/HTML, которая определяет описание последующего содержимого, а именно кода HTML. После CONTENT-TYPE: TEXT/HTML, необходимо вывести пустую строку иначе броузер может выдать сообщение об ошибке.

Теперь, когда приложение закончено, осталось его скомпилировать и проверить. Для проверки работоспособности программы вам понадобиться веб-сервер. Можно особо не утруждаться, подойдет любой, даже стандартный домашний веб-сервер от Microsoft. Приложение надо будет разместить в папке публикаций сервера (обычно это — C:\Inetpub\ wwwroot) и запустить сам сервер. Теперь, если вы перейдете по адресу http://localhost/primer.exe в броузере, вы должны увидеть результат действия данной программы — строку Hello, world! Вот и всё, простейшее web-приложение на Delphi готово.

На самом деле нам бы вряд ли понадобилось Delphi, для создания подобных программ. Конечно, можно генерировать страницы исходя из различных условий, но вопрос в том, как данные условия передать программе. И здесь оказывается не всё так сложно, достаточно вспомнить передачу параметров приложению с помощью командной строки и поступить соответствующе. Хотя это, разумеется, хитрость. Это для приложения Delphi мы оперируем командной строкой, для пользователя же это адресная строка в броузере, то есть url.

Попробуем на примере. Необходимо создать приложение, которое выдает различную информацию (к примеру, время, дату или то и другое вместе) в зависимости от параметров, указанных в адресной строке броузера. Как известно, за данные в параметрах отвечают такие функции, как ParamCount и ParamStr. Их-то мы и будем использовать.

Не правда ли просто? Теперь, если в адресной строке броузера вы наберете, например http://localhost/cgidate/exe?time, будет сгенерирована страница, отображающая текущее время, http://localhost/cgidate/exe?date — соответственно дата, а при передаче параметра both — текущая дата и время. В случае если никакой из параметров передан не был или он был ошибочен — возникнет сообщение об этом.

Данные адреса и параметры можно непосредственно указать в коде HTML и генерировать необходимые изменения на странице либо другие страницы переходя по соответствующим ссылкам.

Следует обратить внимание на то, как передавать данные через url. Знак вопроса отделяет параметр от адреса файла, с помощью знака равенства web-приложению передается значение данного параметра. Так как в адресной строке нельзя использовать пробел, он заменяется на шестнадцатеричный код в таблице ASCII, то есть %20.

Но на самом деле, если некие данные передаются от пользователя web-приложению, то обычно для этого используют формы, а не url (хотя одно другому не мешает). Попробуем и мы создать приложение, которое бы получало данные от пользователя, занесенные им в форму.

Для начала, естественно, нужно создать сам код HTML в котором бы присутствовала форма с полями ввода, кнопкой отправки и прочими необходимыми атрибутами. При этом form action должен содержать адрес программы, которая будет получать данные. Значение method может быть равно как GET, так и POST. На самом деле GET — это и есть передача параметров через url, добавляя их к адресной строке, так как POST передает их приложению посредством стандартного потока ввода. Какой из них лучше и удобней — решать вам, но чаще всего метод GET используется именно для генерации страниц (достаточно взглянуть на url который возникает при работе на поисковых серверах), тогда как второй для — передачи данных, отображать которые в адресной строке было бы весьма накладно.

Затем необходимо создать приложение, которое бы адекватно смогло воспринять все эти данные со стороны пользователя. В случае если данные передавались с помощью метода GET проблем не будет — можно действовать как в предыдущем примере. Если же приложение получает данные от пользователя с помощью POST, всё несколько иначе.

Необходимо будет считывать данные из переменной окружения, а для этого мы, естественно, должны знать данные переменные.

Гюльчитай, открой личико

Нет в мире тайн. Особенно их мало у пользователя от web-приложения. И если мы не знаем о пользователе кое-что личное, все прочее броузеры с легкостью отдают web-серверу, нисколько не заботясь о приватности и желаниях того самого пользователя. Это, конечно, нехорошо для пользователя, но хорошо для разработчика web-приложения, поскольку для него знания — великая вещь.

Итак, данные от пользователя web-приложению можно передать через переменные окружения. Вот список наиболее часто употребляемых:

GATEWAY_INTERFACE
Поддерживаемая версия CGI.

REQUEST_METHOD
Метод запроса, может быть как GET так и POST.

HTTP_REFERER
Адрес страницы (url), активирующей текущее приложение на web-сервере.

PATH_INFO
Путь переданный приложению расположенный между именем приложения и строкой запроса.

QUERY_STRING
Строка запроса, если метод — GET, добавляеться к url.

REMOTE_HOST
Имя хоста удаленного пользователя.

REMOTE_USER
Имя удаленного пользователя.

REMOTE_IDENT
IP-адрес удаленного пользователя.

HTTP_USER_AGENT
Имя и версия броузера удаленного пользователя.

С помощью данных переменных можно получить исчерпывающую информацию о пользователе и передаваемых данных для верного проектирования вашего web-приложения. Конечно, этого хватит в том случае, если вы не собираетесь подобно Большому Брату следить за каждым телодвижением пользователя.

Но вернемся к поставленной задаче — передаче данных приложению от пользователя через форму. Данные, которые передаются через QUERY_STRING в приложение с помощью метода POST, достаточно просто извлечь для использования.

Ниже листинг программы, выдающий список некоторых переменных окружения и их значения. Узнайте кое-что о своем броузере и web-сервере.

В этой статье мы не коснулись другой и уж наверняка более обширной и сложной темы, как создание ISAPI-приложений на Delphi. Вышеприведенные способы создания приложений годны лишь в том случае, если вам необходимо быстрое, компактное и не слишком сложное web-приложение. Если же вам необходим, к примеру, доступ к базам данным, то подобный путь неприемлем.

Для создания полномасштабных приложений для интернета в Delphi существует специальный помощник — Web Server Application. С его помощью можно создать приложение генерируещее динамические web-страницы, основанные на CGI, NSAPI или ISAPI. Единственное накладываемое ограничение — непосредственно web-сервер должен работать на базе Windows.

Одним из главных преимуществ создания подобных приложений именно в среде Delphi является то, что вы продолжаете работать с визуальными компонентами — это значительно проще, чем создание приложений в других средах — возможность ошибки в больших проектах, где используется визуальное проектирование меньше, чем в тех, где всё описывается исключительно кодом. Кроме того, средства создания web-приложений позволяют импортировать уже существующие приложения в интернет-среду, что, согласитесь, немаловажно. Пока, конечно, Delphi не обладает большим набором компонентов для web-приложений, но, видимо, уже следующая версия этой среды обзаведется необходимыми. Но и сейчас Delphi можно считать достаточно удобным инструментом для создания приложений, взаимодействующих с интернетом.

Delphi и Flash. Совмещение несовместимого!

Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах. Если вы сумеете гармонично вписать небольшой флэш-ролик в вашу программу, то несомненно внешний вид программы будет намного привлекательнее (главное не переборщить, увлекаясь дизайном, не надо забывать о том что программа должна быть удобна и проста в использовании!).

Итак, как же совместить Флэш и Дельфи? (Надеюсь, что у вас Флэш установлен:))

Запустите Дельфи и выберите пункт меню Component->Import ActiveX Control. Перед вами откроется диалоговое окно с заголовком Import ActiveX Control. В разделе Registered Controls выберите Shockwave Flash. В разделе Pallete Page. Выберите страницу в палитре компонентов, на которой будет располагаться установленный компонент (по умолчанию это ActiveX). В разделе Unit Dir Name. путь к папке куда будет установлен компонент.

Нажмите на кнопку Install. Перед вами появится окно, в котором вам нужно будет выбрать в какой пакет будет установлен компонент (вы можете установить как в уже существующий, так и в новый пакет). Затем перед вами появится окно редактирования выбранного пакета и Дельфи вас спросит: «. Package will be rebuilt. Continue?». Ответьте Yes. Все готово теперь можно использовать флэш в ваших приложениях.

Теперь, чтобы показать вам как пользоваться этим компонентом, попробуем вместе сделать программу для просмотра *.SWF файлов. Для этого нам понадобятся следующие компоненты: TShockwaveFlash (для удобства назовите его просто Flash1), TTrackBar, TTimer, TOpendialog и три кнопки TButton («открыть», «старт» и «стоп»).

Для начала установим необходимые свойства OpenDialog’a

  • Свойство Filter может быть таким: Флэш-ролики|*.swf
  • Свойство DefaultExt должно быть: *.swf

Для Timer’a нужно установить свойство Interval равным 1.

  • Name сделайте равным Flash1
  • Свойство Playing установите в false
  • Свойство BGColor, установите как вам хочется (цвет фона)

Теперь напишем обработчик события OnClick для кнопки, которая вызывать OpenDialog:

if open1.Execute then begin
flash1.Movie:=open1.FileName;
trackbar1.Max:=flash1.TotalFrames;

В обработчик события OnClick для второй кнопки («Старт») напишем:

Ну тут вообще все просто! Почти таким же образом это будет выглядеть для третьей кнопки («Стоп»):

Теперь сделаем, чтобы при перемещении ползунка Trackbar’a мы могли посмотреть каждый кадр (событие OnChange):

Ну и наконец осталось сделать чтобы при проигрывании ролика ползунок перемещался, указывая сколько осталось и сколько прошло. Для этого то мы и используем Timer. В обработчик события OnTimer, напишем:

Приведу полный код приложения:

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;

type
TForm1 = class(TForm)
Flash1: TShockwaveFlash;
Button1: TButton;
TrackBar1: TTrackBar;
Open1: TOpenDialog;
Button2: TButton;
Button3: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
begin
if open1.Execute then begin
flash1.Movie:=open1.FileName;
trackbar1.Max:=flash1.TotalFrames;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
flash1.Play;
end;


procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if Flash1.IsPlaying=true then Flash1.Stop;
flash1.GotoFrame(trackbar1.position);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
flash1.Stop;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
trackbar1.Position:=flash1.CurrentFrame;
end;

Ну вот и все. Как оказалось, ничего сложного.

Работа с HTTP протоколом в Delphi

В связи с все большим вниманием, которое привлекает к себе Интернет, все больше людей становятся заинтересованы в сетевых технологиях. Данная статья посвящена программированию на Borland Delphi с использованием одного из самых популярных Интернет-протоколов — HTTP.

А именно, здесь мы рассмотрим компонент TNMHTTP (NetMasters HTTP), который можно обнаружить на вкладке FastNet палитры компонентов Дельфи.

Начнем с теории. Если Вы уже знаете, что такое HTTP и зачем он нужен, то пропустите следующий раздел.

Зачем нужен HTTP

Итак, где же используется HTTP? Если Вы хотя бы чуть-чуть заглядывали на Интернет-странички и встречались с термином Web , то наверняка обратили внимание на то, что адреса страничек, как правило, начинаются с http:// . Протокол HTTP ( HyperText Transfer Protocol ) позволяет принимать и посылать не только гипертекстовые документы (типа html), но и любые другие (тексты (txt), изображения (gif, jpg), и т.д.). Ниже приведены типовые задачи, для выполнения которых необходимо использовать HTTP:

  • Браузеры — программы, позволяющие просматривать Интернет-странички;
  • Скачивальщики — программы, позволяющие скачивать из Интернета странички, рисунки и другие документы;
  • Чаты — программы, позволяющие общаться по сети. Часто документы HTTP используются для хранения сообщений (как, например, в конференциях).

— Это лишь список некоторых из стандартных направлений программирования с использованием HTTP. Вы можете применять этот протокол для любых своих целей. Например, автоматические системы обновления данных, посылка запросов в Интернетовские базы, и еще множество всяческих других возможностей!

Краткое описание свойств, методов и событий

Ниже приведена таблица, содержащая наиболее краткое описание основных свойств, методов и событий компонента TNMHTTP:

Body — строка, содержащая либо путь к файлу, в который будет записано тело http-документа (если св-во InputFileMode равно True ), либо непосредственно само тело (если св-во InputFileMode равно False ). Тип: string ;
Header — строка, содержащая либо путь к файлу, в который будет записан заголовок http-документа (если св-во InputFileMode равно True ), либо непосредственно сам заголовок (если св-во InputFileMode равно False ). Тип: string ;
HeaderInfo — структура, содержащая различную информацию о http-документе (подробней см. в help-файле). Тип: THeaderInfo ;
InputFileMode — тип записи результата. Значение True — запись в файлы, указанные в свойствах Body и Header , False — запись в сами эти свойства. Тип: Boolean ;
OutputFileMode — тип отсылаемых данных (методами Put , Post и Trace ). Значение True — данные для отправки содержатся в файлах, указанных при вызове этих методов, а False — в самих аргументах этих методов. Тип: Boolean ;

Далее некоторые свойства, унаследованные от TPowerSock:

BytesRecvd , BytesSent , BytesTotal — количество отправленных, принятых и общее количество байтов соотвественно. Тип: LongInt ;
Connected — показывает, установленно ли в данный момент соединение. Тип: Boolean ;
BeenCanceled — показывает, было ли прервано соединение с сервером. Тип: Boolean ;
Host — строка, содержащая хост-имя удаленного компьютера. Заполнять не надо, так как это свойство устанавливается автоматически при вызове методов Get , Put , Post и т.д. Тип: string . Port — Integer , содержащий порт удаленного компьютера (заполняется тоже автоматически);
TimeOut — таймаут в миллисекундах. Тип: Integer ;

Еще есть множество свойств, но я пока остановлюсь на уже перечисленных. За дополнительной информацией обращайтесь к help-у по Дельфи.

Get (URL: string) — посылает запрос на указанный URL. Данные после выполнения этого запроса записываются в файлы или в сами свойства Body и Header (в зависимости от значения свойства InputFileMode );
Head (URL: string) — посылает запрос на указанный URL. Данные после выполнения этого запроса записываются в файл или в само свойство Header (в зависимости от значения свойства InputFileMode ). В отличие от метода Get , при вызове Head запрос отсылается только на заголовок http-документа;
Post (URL, PostData: string) — посылает запрос на изменение http-документа (с адресом URL) на данные, содержащиеся в параметре PostData. Если OutputFileMode равен True , то в PostData должен содержаться путь к файлу, содержащему нужные данные.
Put (URL, PutData: string) — посылает запрос на создание http-документа (с адресом URL), содержащего данные, переданные в параметре PutData. Если OutputFileMode равен True , то в PostData должен содержаться путь к файлу, содержащему нужные данные.
Trace (URL, TraceData: string) — посылает запрос на получение отладочных данных (для отладки соединения с HTTP-сервером). Данные для запроса нужно указать в параметре TraceData. Если OutputFileMode равен True , то в TraceData должен содержаться путь к файлу, содержащему нужные данные.
Delete (URL: string) — посылает запрос на удаление http-документа (с адресом URL).

Далее некоторые методы, унаследованные от TPowerSock:

Abort и Cancel — прерывают соединение и обмен данными;
Disconnect — отсоединение от HTTP-сервера;

OnAuthenticationNeeded — возникает, когда сервер требует указания имени пользователя и пароля. В обработчике этого события (если оно возникнет) Вы должны ответить серверу, запонив нужными значениями соответствующие переменные. Примечание: Перед установлением соединения можно сразу заполнить поля UserID и Password в свойстве HeaderInfo ;
OnAboutToSend — возникает, когда компонент TNMHTTP собирается отправлять данные (запрос). В обработчике этого события можно заполнить дополнительной информацией свойство SendHeader ;
OnFailure — возникает, когда текущая операция завершилась неудачно, т.е. произошла ошибка;
OnRedirect — возникает, сервер переадресовал ссылку с указанной URL на другую ссылку. Установив параметр handled в значение True можно запретить переадресацию и остановиться на запрошенной URL. Значение по умолчанию — False ;
OnSuccess — возникает, когда текущая операция завершилась успешно, т.е. запрос был выполнен без ошибок;

Далее некоторые методы, унаследованные от TPowerSock:

OnConnect — возникает, когда соединение с сервером успешно установлено;
OnDisconnect — возникает, когда соединение с сервером завершено;
OnConnectionFailed — возникает, когда соединение с сервером установить не удалось;
OnError — возникает, когда последняя операция была завершена с ошибкой;
OnHostResolved — возникает, когда от DNS получен IP-адрес указанного хоста;
OnInvalidHost — возникает, когда DNS вернул ошибку при попытке определить IP-адрес указанного хоста;
OnPacketRecvd — возникает, когда значения свойств BytesRecvd и BytesTotal изменены, т.е. была принята новая порция данных от сервера;
OnPacketSent — возникает, когда значения свойств BytesSent и BytesTotal изменены, т.е. была отправлена новая порция данных на сервер;
OnStatus — возникает, когда статус компонента был изменен (для обновления визуального оповещения пользователя);

Практика и примеры

Ну а теперь приступим к самому главному методу изучения — на примерах.

И самый первый пример — программа, позволяющая определить, существует ли заданный URL:

Пример 1. Проверка существования указанной URL

<В форму нужно поместить кнопку TButton и одно поле TEdit. При нажатии на
кнопку вызывается обработчик события OnClick — Button1Click. Перед этим в
TEdit нужно ввести адрес URL. НЕ ЗАБУДЬТЕ ПОМЕСТИТЬ В ФОРМУ КОМПОНЕНТ TNMHTTP!>
procedure Button1Click(Sender: TObject);
begin
<Пытаемя получить заголовок>
NMHTTP1.Head(Edit1.Text);
<Если URL неверный, то здесь выскочит ошибка>
end;

Следующий пример — скачивание сразу нескольких URL одновременно. Надо заметить, что многие программисты пренебрегают многозадачностью Windows (неважно, как она реализована, речь сейчас не об этом). В Дельфи очень легко создавать отдельные, подчиненные Вашей программе процессы (а точнее — потоки) с помощью базового класса TThread . Но об этом мы поговорим в другой раз (в другой статье).

Пример 3. Одновременное скачивание указанных URL в заданный каталог

// Здесь идет заголовок файла и определение формы TForm1 и ее экземпляра Form1

// Описание класса отдельного процесса
type
THTTPThread = class(TThread)
private
<Для каждого процесса - создаем свой компонент TNMHTTP>
FHTTP: TNMHTTP;
protected
// Execute вызывается при запуске процесса; override — заменяем
// существующую процедуру базового класса TThread
procedure Execute; override;
// DoWork — созданная нами функция, выполнение которой синхронизируется в Execute
procedure DoWork;
public
// URL — созданная нами строка, указывающая процессу, какой URL ему нужно скачать
URL: string;
end;

// В форму нужно поместить три кнопки TButton, одно поле TEdit и один список
// TListBox. При нажатии на кнопку Button1 вызывается обработчик события
// OnClick — Button1Click. Перед этим в TEdit нужно ввести путь к каталогу, в
// котором будут храниться скачанные файлы, а ListBox1 нужно заполнить списком
// URL-ов для скачивания (с помощью кнопок Add (Button2) и Delete (Button3)).

procedure TForm1.Button3Click(Sender: TObject);
begin
<Удаление выделенного URL из списка>
if ListBox1.ItemIndex >= 0 then
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;

procedure TForm1.Button2Click(Sender: TObject);
var s: string;
begin
<Добавление URL в список>
s := InputBox(‘Добавить’,’Введите URL:’,»);
if s <> » then
ListBox1.Items.Add(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
<Проверка на существование каталога>
if Length(Edit1.Text) > 0 then
if not DirectoryExists(Edit1.Text) then
MkDir(Edit1.Text);
<Далее идет создание для каждого URL в списке своего процесса>
for i := 0 to ListBox1.Items.Count-1 do begin
with THTTPThread.Create(True) do begin
<Создаем приостановленную задачу, указываем ей ее URL и запускаем ее>
URL := ListBox1.Items[i];
Resume;
end;
end;
end;

// Операторы процесса THTTPThread

procedure THTTPThread.Execute;
begin
// Делаем так, чтобы каждый процесс выполнялся одновременно с другими (синхронизация)>
Synchronize(DoWork);
end;

ПРИМЕЧАНИЕ: Чтобы завершить некоторый процесс (Thread), нужно вызвать метод Terminate класса этого процесса. Приостановить процесс можно оператором Suspend , а продолжить выполнение — Resume . Также можно настроить приоритет каждого отдельного процесса через свойство Priority .

Неплохой пример работы с процессами можно найти в подпапке Demos\Threads папки, куда Вы установили Delphi.

Замечания по алгоритмам типовых задач

Если Вы собираетесь создать скачивалку сайтов, то Вам необходимо учитывать следующее (решить следующие проблемы):

  • Нужно скачивать не только саму страничку в формате HTML, но и все входящие в нее рисунки (gif, jpg, и т.д.);
  • в некоторых случаях удобно скачивать не одну страничку, а несколько страниц, ссылки на которые находятся на первой из скачиваемых страничек. При этом нужно учитывать, что на страничке могут находиться и ссылки на другие сайты, поэтому необходимо анализировать скачиваемые ссылки (чтобы случайно не скачать весь Интернет). Для решения задачи со скачиванием нескольких страничек нужно использовать рекурсию;
  • необходимо качественно информировать пользователя о ходе закачки. Т.е. показывать общее и скачанное количество информации;
  • после скачивания нужно заменить Интернетовские ссылки на локальные, чтобы можно было просматривать странички в режиме offline.

Создание Web-приложений в среде Delphi

Эпоха web-дизайна, когда наиважнейшим считалось возможность запихнуть на страницу как можно больше графики и поразить пользователя широтой фантазии дизайнера, канула в лету. В моде — информационный дизайн и всяческие удобности для пользователя. Плохим тоном уже считается одно только то, что на сайте нет форума или гостевой книги, и самое ужасное — о, боже — вы до сих пор верстаете каждую страницу вручную, вместо того, что бы поручить сеё скучное и утомительное занятие скрипту.

Время первопроходцев HTML в скором времени закончится и вовсе, и их место займут профессионалы-программисты. Именно программисты, ибо уже в большей степени от их умения создать удобный в использование сайт зависит его успех. Кроме прочего, теперь сайты создают совсем уж как программные продукты: тем кто занят наполнением содержанием, уже может не опасаться запутаться в html, java, cgi и прочих ипостасях интернет-технологий — администрирование сайта становится таким же привычным и удобным, как работа с текстовыми процессорами. Пока, правда, ощущается явный недостаток законченных продуктов, на плечи которых можно было бы возложить все функции по поддержанию сайта в актуальном состоянии, оставив себе лишь вопросы по наполнению его содержанием.

Пока же тяжкое бремя по созданию данных систем, на основе которых будет функционировать сайт, ложится на плечи программистов, только вот-вот успевших изумится возможностями языка Perl или Java. И многие из них, сказать без преувеличения, вышли, словно из гоголевской «Шинели», из Delphi. Действительно, данная среда разработчика, предоставляющая удобный интерфейс для визуального программирования и широкие возможности Object Pascal, столь мила сердцу российских программистов.

Но, похоже, что времена меняются, и Delphi из среды создания обычных настольных приложений, может сгодиться и в другом плане: для написания прикладных web-программ. И действительно, что может быть лучше: уже знакомая среда разработки, вдоль и поперек изученный язык, да и достаточно широкий круг специалистов по программированию в Delphi — это ли не плюсы создания web-приложений на Delphi. Есть конечно и минусы: созданные программы вряд ли смогут удовлетворить тех, кто считает, что лучший web-сервер, это сервер не от Microsoft. Но что поделаешь — версия Delphi под Unix отложена пока до лучших времен. Зато посудите сами: перенос программ в будущем светлом будущем можно будет совершить с малой кровью.

Но отложим пока теорию в сторону, и обратимся к практике. Итак, создание web-приложения в среде Delphi, что называется шаг за шагом.

Пример из учебника

В отличие от прочих аспектов создания приложений в Delphi, о создании приложений для web написано мало. Так ужасающе мало, что из книги в книгу, из учебника в учебник путешествует один и тот же пример. Не будем оригинальничать и мы — чем проще, тем лучше.

Вообще, простейшее web-приложение на Delphi мало чем отличается, а точнее ничем не отличается от создания программы для старой доброй DOS. Это — простейшее консольное приложение, запускаемое на стороне сервера и взаимодействующие с пользователем (в случае необходимости) через броузер.

Создайте в Delphi новый проект — ту самую уже давно забытую всем Console Application. Вы получите знакомый со школьной скамьи, текст обычной паскалевской программы:

Далее еще проще. Организуем вывод кода HTML с помощью команды writeln.

Обратите внимание на строку CONTENT-TYPE: TEXT/HTML, которая определяет описание последующего содержимого, а именно кода HTML. После CONTENT-TYPE: TEXT/HTML, необходимо вывести пустую строку иначе броузер может выдать сообщение об ошибке.

Теперь, когда приложение закончено, осталось его скомпилировать и проверить. Для проверки работоспособности программы вам понадобиться веб-сервер. Можно особо не утруждаться, подойдет любой, даже стандартный домашний веб-сервер от Microsoft. Приложение надо будет разместить в папке публикаций сервера (обычно это — C:\Inetpub\ wwwroot) и запустить сам сервер. Теперь, если вы перейдете по адресу http://localhost/primer.exe в броузере, вы должны увидеть результат действия данной программы — строку Hello, world! Вот и всё, простейшее web-приложение на Delphi готово.

На самом деле нам бы вряд ли понадобилось Delphi, для создания подобных программ. Конечно, можно генерировать страницы исходя из различных условий, но вопрос в том, как данные условия передать программе. И здесь оказывается не всё так сложно, достаточно вспомнить передачу параметров приложению с помощью командной строки и поступить соответствующе. Хотя это, разумеется, хитрость. Это для приложения Delphi мы оперируем командной строкой, для пользователя же это адресная строка в броузере, то есть url.

Попробуем на примере. Необходимо создать приложение, которое выдает различную информацию (к примеру, время, дату или то и другое вместе) в зависимости от параметров, указанных в адресной строке броузера. Как известно, за данные в параметрах отвечают такие функции, как ParamCount и ParamStr. Их-то мы и будем использовать.

Не правда ли просто? Теперь, если в адресной строке броузера вы наберете, например http://localhost/cgidate/exe?time, будет сгенерирована страница, отображающая текущее время, http://localhost/cgidate/exe?date — соответственно дата, а при передаче параметра both — текущая дата и время. В случае если никакой из параметров передан не был или он был ошибочен — возникнет сообщение об этом.

Данные адреса и параметры можно непосредственно указать в коде HTML и генерировать необходимые изменения на странице либо другие страницы переходя по соответствующим ссылкам.

Следует обратить внимание на то, как передавать данные через url. Знак вопроса отделяет параметр от адреса файла, с помощью знака равенства web-приложению передается значение данного параметра. Так как в адресной строке нельзя использовать пробел, он заменяется на шестнадцатеричный код в таблице ASCII, то есть %20.

Но на самом деле, если некие данные передаются от пользователя web-приложению, то обычно для этого используют формы, а не url (хотя одно другому не мешает). Попробуем и мы создать приложение, которое бы получало данные от пользователя, занесенные им в форму.

Для начала, естественно, нужно создать сам код HTML в котором бы присутствовала форма с полями ввода, кнопкой отправки и прочими необходимыми атрибутами. При этом form action должен содержать адрес программы, которая будет получать данные. Значение method может быть равно как GET, так и POST. На самом деле GET — это и есть передача параметров через url, добавляя их к адресной строке, так как POST передает их приложению посредством стандартного потока ввода. Какой из них лучше и удобней — решать вам, но чаще всего метод GET используется именно для генерации страниц (достаточно взглянуть на url который возникает при работе на поисковых серверах), тогда как второй для — передачи данных, отображать которые в адресной строке было бы весьма накладно.

Затем необходимо создать приложение, которое бы адекватно смогло воспринять все эти данные со стороны пользователя. В случае если данные передавались с помощью метода GET проблем не будет — можно действовать как в предыдущем примере. Если же приложение получает данные от пользователя с помощью POST, всё несколько иначе.

Необходимо будет считывать данные из переменной окружения, а для этого мы, естественно, должны знать данные переменные.

Гюльчитай, открой личико

Нет в мире тайн. Особенно их мало у пользователя от web-приложения. И если мы не знаем о пользователе кое-что личное, все прочее броузеры с легкостью отдают web-серверу, нисколько не заботясь о приватности и желаниях того самого пользователя. Это, конечно, нехорошо для пользователя, но хорошо для разработчика web-приложения, поскольку для него знания — великая вещь.

Итак, данные от пользователя web-приложению можно передать через переменные окружения. Вот список наиболее часто употребляемых:

GATEWAY_INTERFACE
Поддерживаемая версия CGI.

REQUEST_METHOD
Метод запроса, может быть как GET так и POST.


HTTP_REFERER
Адрес страницы (url), активирующей текущее приложение на web-сервере.

PATH_INFO
Путь переданный приложению расположенный между именем приложения и строкой запроса.

QUERY_STRING
Строка запроса, если метод — GET, добавляеться к url.

REMOTE_HOST
Имя хоста удаленного пользователя.

REMOTE_USER
Имя удаленного пользователя.

REMOTE_IDENT
IP-адрес удаленного пользователя.

HTTP_USER_AGENT
Имя и версия броузера удаленного пользователя.

С помощью данных переменных можно получить исчерпывающую информацию о пользователе и передаваемых данных для верного проектирования вашего web-приложения. Конечно, этого хватит в том случае, если вы не собираетесь подобно Большому Брату следить за каждым телодвижением пользователя.

Но вернемся к поставленной задаче — передаче данных приложению от пользователя через форму. Данные, которые передаются через QUERY_STRING в приложение с помощью метода POST, достаточно просто извлечь для использования.

Ниже листинг программы, выдающий список некоторых переменных окружения и их значения. Узнайте кое-что о своем броузере и web-сервере.

В этой статье мы не коснулись другой и уж наверняка более обширной и сложной темы, как создание ISAPI-приложений на Delphi. Вышеприведенные способы создания приложений годны лишь в том случае, если вам необходимо быстрое, компактное и не слишком сложное web-приложение. Если же вам необходим, к примеру, доступ к базам данным, то подобный путь неприемлем.

Для создания полномасштабных приложений для интернета в Delphi существует специальный помощник — Web Server Application. С его помощью можно создать приложение генерируещее динамические web-страницы, основанные на CGI, NSAPI или ISAPI. Единственное накладываемое ограничение — непосредственно web-сервер должен работать на базе Windows.

Одним из главных преимуществ создания подобных приложений именно в среде Delphi является то, что вы продолжаете работать с визуальными компонентами — это значительно проще, чем создание приложений в других средах — возможность ошибки в больших проектах, где используется визуальное проектирование меньше, чем в тех, где всё описывается исключительно кодом. Кроме того, средства создания web-приложений позволяют импортировать уже существующие приложения в интернет-среду, что, согласитесь, немаловажно. Пока, конечно, Delphi не обладает большим набором компонентов для web-приложений, но, видимо, уже следующая версия этой среды обзаведется необходимыми. Но и сейчас Delphi можно считать достаточно удобным инструментом для создания приложений, взаимодействующих с интернетом.

Delphi и Flash. Совмещение несовместимого!

Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах. Если вы сумеете гармонично вписать небольшой флэш-ролик в вашу программу, то несомненно внешний вид программы будет намного привлекательнее (главное не переборщить, увлекаясь дизайном, не надо забывать о том что программа должна быть удобна и проста в использовании!).

Итак, как же совместить Флэш и Дельфи? (Надеюсь, что у вас Флэш установлен:))

Запустите Дельфи и выберите пункт меню Component->Import ActiveX Control. Перед вами откроется диалоговое окно с заголовком Import ActiveX Control. В разделе Registered Controls выберите Shockwave Flash. В разделе Pallete Page. Выберите страницу в палитре компонентов, на которой будет располагаться установленный компонент (по умолчанию это ActiveX). В разделе Unit Dir Name. путь к папке куда будет установлен компонент.

Нажмите на кнопку Install. Перед вами появится окно, в котором вам нужно будет выбрать в какой пакет будет установлен компонент (вы можете установить как в уже существующий, так и в новый пакет). Затем перед вами появится окно редактирования выбранного пакета и Дельфи вас спросит: «. Package will be rebuilt. Continue?». Ответьте Yes. Все готово теперь можно использовать флэш в ваших приложениях.

Теперь, чтобы показать вам как пользоваться этим компонентом, попробуем вместе сделать программу для просмотра *.SWF файлов. Для этого нам понадобятся следующие компоненты: TShockwaveFlash (для удобства назовите его просто Flash1), TTrackBar, TTimer, TOpendialog и три кнопки TButton («открыть», «старт» и «стоп»).

Для начала установим необходимые свойства OpenDialog’a

  • Свойство Filter может быть таким: Флэш-ролики|*.swf
  • Свойство DefaultExt должно быть: *.swf

Для Timer’a нужно установить свойство Interval равным 1.

  • Name сделайте равным Flash1
  • Свойство Playing установите в false
  • Свойство BGColor, установите как вам хочется (цвет фона)

Теперь напишем обработчик события OnClick для кнопки, которая вызывать OpenDialog:

if open1.Execute then begin
flash1.Movie:=open1.FileName;
trackbar1.Max:=flash1.TotalFrames;

В обработчик события OnClick для второй кнопки («Старт») напишем:

Ну тут вообще все просто! Почти таким же образом это будет выглядеть для третьей кнопки («Стоп»):

Теперь сделаем, чтобы при перемещении ползунка Trackbar’a мы могли посмотреть каждый кадр (событие OnChange):

Ну и наконец осталось сделать чтобы при проигрывании ролика ползунок перемещался, указывая сколько осталось и сколько прошло. Для этого то мы и используем Timer. В обработчик события OnTimer, напишем:

Приведу полный код приложения:

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;

type
TForm1 = class(TForm)
Flash1: TShockwaveFlash;
Button1: TButton;
TrackBar1: TTrackBar;
Open1: TOpenDialog;
Button2: TButton;
Button3: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
begin
if open1.Execute then begin
flash1.Movie:=open1.FileName;
trackbar1.Max:=flash1.TotalFrames;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
flash1.Play;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if Flash1.IsPlaying=true then Flash1.Stop;
flash1.GotoFrame(trackbar1.position);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
flash1.Stop;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
trackbar1.Position:=flash1.CurrentFrame;
end;

Ну вот и все. Как оказалось, ничего сложного.

Работа с HTTP протоколом в Delphi

В связи с все большим вниманием, которое привлекает к себе Интернет, все больше людей становятся заинтересованы в сетевых технологиях. Данная статья посвящена программированию на Borland Delphi с использованием одного из самых популярных Интернет-протоколов — HTTP.

А именно, здесь мы рассмотрим компонент TNMHTTP (NetMasters HTTP), который можно обнаружить на вкладке FastNet палитры компонентов Дельфи.

Начнем с теории. Если Вы уже знаете, что такое HTTP и зачем он нужен, то пропустите следующий раздел.

Зачем нужен HTTP

Итак, где же используется HTTP? Если Вы хотя бы чуть-чуть заглядывали на Интернет-странички и встречались с термином Web , то наверняка обратили внимание на то, что адреса страничек, как правило, начинаются с http:// . Протокол HTTP ( HyperText Transfer Protocol ) позволяет принимать и посылать не только гипертекстовые документы (типа html), но и любые другие (тексты (txt), изображения (gif, jpg), и т.д.). Ниже приведены типовые задачи, для выполнения которых необходимо использовать HTTP:

  • Браузеры — программы, позволяющие просматривать Интернет-странички;
  • Скачивальщики — программы, позволяющие скачивать из Интернета странички, рисунки и другие документы;
  • Чаты — программы, позволяющие общаться по сети. Часто документы HTTP используются для хранения сообщений (как, например, в конференциях).

— Это лишь список некоторых из стандартных направлений программирования с использованием HTTP. Вы можете применять этот протокол для любых своих целей. Например, автоматические системы обновления данных, посылка запросов в Интернетовские базы, и еще множество всяческих других возможностей!

Краткое описание свойств, методов и событий

Ниже приведена таблица, содержащая наиболее краткое описание основных свойств, методов и событий компонента TNMHTTP:

Body — строка, содержащая либо путь к файлу, в который будет записано тело http-документа (если св-во InputFileMode равно True ), либо непосредственно само тело (если св-во InputFileMode равно False ). Тип: string ;
Header — строка, содержащая либо путь к файлу, в который будет записан заголовок http-документа (если св-во InputFileMode равно True ), либо непосредственно сам заголовок (если св-во InputFileMode равно False ). Тип: string ;
HeaderInfo — структура, содержащая различную информацию о http-документе (подробней см. в help-файле). Тип: THeaderInfo ;
InputFileMode — тип записи результата. Значение True — запись в файлы, указанные в свойствах Body и Header , False — запись в сами эти свойства. Тип: Boolean ;
OutputFileMode — тип отсылаемых данных (методами Put , Post и Trace ). Значение True — данные для отправки содержатся в файлах, указанных при вызове этих методов, а False — в самих аргументах этих методов. Тип: Boolean ;

Далее некоторые свойства, унаследованные от TPowerSock:

BytesRecvd , BytesSent , BytesTotal — количество отправленных, принятых и общее количество байтов соотвественно. Тип: LongInt ;
Connected — показывает, установленно ли в данный момент соединение. Тип: Boolean ;
BeenCanceled — показывает, было ли прервано соединение с сервером. Тип: Boolean ;
Host — строка, содержащая хост-имя удаленного компьютера. Заполнять не надо, так как это свойство устанавливается автоматически при вызове методов Get , Put , Post и т.д. Тип: string . Port — Integer , содержащий порт удаленного компьютера (заполняется тоже автоматически);
TimeOut — таймаут в миллисекундах. Тип: Integer ;

Еще есть множество свойств, но я пока остановлюсь на уже перечисленных. За дополнительной информацией обращайтесь к help-у по Дельфи.

Get (URL: string) — посылает запрос на указанный URL. Данные после выполнения этого запроса записываются в файлы или в сами свойства Body и Header (в зависимости от значения свойства InputFileMode );
Head (URL: string) — посылает запрос на указанный URL. Данные после выполнения этого запроса записываются в файл или в само свойство Header (в зависимости от значения свойства InputFileMode ). В отличие от метода Get , при вызове Head запрос отсылается только на заголовок http-документа;
Post (URL, PostData: string) — посылает запрос на изменение http-документа (с адресом URL) на данные, содержащиеся в параметре PostData. Если OutputFileMode равен True , то в PostData должен содержаться путь к файлу, содержащему нужные данные.
Put (URL, PutData: string) — посылает запрос на создание http-документа (с адресом URL), содержащего данные, переданные в параметре PutData. Если OutputFileMode равен True , то в PostData должен содержаться путь к файлу, содержащему нужные данные.
Trace (URL, TraceData: string) — посылает запрос на получение отладочных данных (для отладки соединения с HTTP-сервером). Данные для запроса нужно указать в параметре TraceData. Если OutputFileMode равен True , то в TraceData должен содержаться путь к файлу, содержащему нужные данные.
Delete (URL: string) — посылает запрос на удаление http-документа (с адресом URL).

Далее некоторые методы, унаследованные от TPowerSock:

Abort и Cancel — прерывают соединение и обмен данными;
Disconnect — отсоединение от HTTP-сервера;

OnAuthenticationNeeded — возникает, когда сервер требует указания имени пользователя и пароля. В обработчике этого события (если оно возникнет) Вы должны ответить серверу, запонив нужными значениями соответствующие переменные. Примечание: Перед установлением соединения можно сразу заполнить поля UserID и Password в свойстве HeaderInfo ;
OnAboutToSend — возникает, когда компонент TNMHTTP собирается отправлять данные (запрос). В обработчике этого события можно заполнить дополнительной информацией свойство SendHeader ;
OnFailure — возникает, когда текущая операция завершилась неудачно, т.е. произошла ошибка;
OnRedirect — возникает, сервер переадресовал ссылку с указанной URL на другую ссылку. Установив параметр handled в значение True можно запретить переадресацию и остановиться на запрошенной URL. Значение по умолчанию — False ;
OnSuccess — возникает, когда текущая операция завершилась успешно, т.е. запрос был выполнен без ошибок;

Далее некоторые методы, унаследованные от TPowerSock:

OnConnect — возникает, когда соединение с сервером успешно установлено;
OnDisconnect — возникает, когда соединение с сервером завершено;
OnConnectionFailed — возникает, когда соединение с сервером установить не удалось;
OnError — возникает, когда последняя операция была завершена с ошибкой;
OnHostResolved — возникает, когда от DNS получен IP-адрес указанного хоста;
OnInvalidHost — возникает, когда DNS вернул ошибку при попытке определить IP-адрес указанного хоста;
OnPacketRecvd — возникает, когда значения свойств BytesRecvd и BytesTotal изменены, т.е. была принята новая порция данных от сервера;
OnPacketSent — возникает, когда значения свойств BytesSent и BytesTotal изменены, т.е. была отправлена новая порция данных на сервер;
OnStatus — возникает, когда статус компонента был изменен (для обновления визуального оповещения пользователя);

Практика и примеры

Ну а теперь приступим к самому главному методу изучения — на примерах.

И самый первый пример — программа, позволяющая определить, существует ли заданный URL:

Пример 1. Проверка существования указанной URL

<В форму нужно поместить кнопку TButton и одно поле TEdit. При нажатии на
кнопку вызывается обработчик события OnClick — Button1Click. Перед этим в
TEdit нужно ввести адрес URL. НЕ ЗАБУДЬТЕ ПОМЕСТИТЬ В ФОРМУ КОМПОНЕНТ TNMHTTP!>
procedure Button1Click(Sender: TObject);
begin
<Пытаемя получить заголовок>
NMHTTP1.Head(Edit1.Text);
<Если URL неверный, то здесь выскочит ошибка>
end;

Следующий пример — скачивание сразу нескольких URL одновременно. Надо заметить, что многие программисты пренебрегают многозадачностью Windows (неважно, как она реализована, речь сейчас не об этом). В Дельфи очень легко создавать отдельные, подчиненные Вашей программе процессы (а точнее — потоки) с помощью базового класса TThread . Но об этом мы поговорим в другой раз (в другой статье).

Пример 3. Одновременное скачивание указанных URL в заданный каталог

// Здесь идет заголовок файла и определение формы TForm1 и ее экземпляра Form1

// Описание класса отдельного процесса
type
THTTPThread = class(TThread)
private
<Для каждого процесса - создаем свой компонент TNMHTTP>
FHTTP: TNMHTTP;
protected
// Execute вызывается при запуске процесса; override — заменяем
// существующую процедуру базового класса TThread
procedure Execute; override;
// DoWork — созданная нами функция, выполнение которой синхронизируется в Execute
procedure DoWork;
public
// URL — созданная нами строка, указывающая процессу, какой URL ему нужно скачать
URL: string;
end;

// В форму нужно поместить три кнопки TButton, одно поле TEdit и один список
// TListBox. При нажатии на кнопку Button1 вызывается обработчик события
// OnClick — Button1Click. Перед этим в TEdit нужно ввести путь к каталогу, в
// котором будут храниться скачанные файлы, а ListBox1 нужно заполнить списком
// URL-ов для скачивания (с помощью кнопок Add (Button2) и Delete (Button3)).

procedure TForm1.Button3Click(Sender: TObject);
begin
<Удаление выделенного URL из списка>
if ListBox1.ItemIndex >= 0 then
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;


procedure TForm1.Button2Click(Sender: TObject);
var s: string;
begin
<Добавление URL в список>
s := InputBox(‘Добавить’,’Введите URL:’,»);
if s <> » then
ListBox1.Items.Add(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
<Проверка на существование каталога>
if Length(Edit1.Text) > 0 then
if not DirectoryExists(Edit1.Text) then
MkDir(Edit1.Text);
<Далее идет создание для каждого URL в списке своего процесса>
for i := 0 to ListBox1.Items.Count-1 do begin
with THTTPThread.Create(True) do begin
<Создаем приостановленную задачу, указываем ей ее URL и запускаем ее>
URL := ListBox1.Items[i];
Resume;
end;
end;
end;

// Операторы процесса THTTPThread

procedure THTTPThread.Execute;
begin
// Делаем так, чтобы каждый процесс выполнялся одновременно с другими (синхронизация)>
Synchronize(DoWork);
end;

ПРИМЕЧАНИЕ: Чтобы завершить некоторый процесс (Thread), нужно вызвать метод Terminate класса этого процесса. Приостановить процесс можно оператором Suspend , а продолжить выполнение — Resume . Также можно настроить приоритет каждого отдельного процесса через свойство Priority .

Неплохой пример работы с процессами можно найти в подпапке Demos\Threads папки, куда Вы установили Delphi.

Замечания по алгоритмам типовых задач

Если Вы собираетесь создать скачивалку сайтов, то Вам необходимо учитывать следующее (решить следующие проблемы):

  • Нужно скачивать не только саму страничку в формате HTML, но и все входящие в нее рисунки (gif, jpg, и т.д.);
  • в некоторых случаях удобно скачивать не одну страничку, а несколько страниц, ссылки на которые находятся на первой из скачиваемых страничек. При этом нужно учитывать, что на страничке могут находиться и ссылки на другие сайты, поэтому необходимо анализировать скачиваемые ссылки (чтобы случайно не скачать весь Интернет). Для решения задачи со скачиванием нескольких страничек нужно использовать рекурсию;
  • необходимо качественно информировать пользователя о ходе закачки. Т.е. показывать общее и скачанное количество информации;
  • после скачивания нужно заменить Интернетовские ссылки на локальные, чтобы можно было просматривать странички в режиме offline.

Delphi и flash совмещение несовместимого

Выпуск от 08.10.02 09:04

Новые компоненты |x|
    ZReport v.2.0k (138kb)(08.10.02 08:17)

Новая версия компоненты
С исходными текстами
Компонента из раздела: Reports: Report Tools

ZReport — визуальный построитель и генератор отчетов.
Предназначен для печати отчетов на матричных принтерах.
Основные особенности: текстовый вывод с корректировкой принтера;
работа через спулер печати Windows;
неограниченные master-detail отчеты,
разбиение на страницы и т.д.
Новая версия компоненты.
С исходными текстами.
Источник: www.torry.net Автор: ZYZ
-= * VCL * DB-aware * Samples * =- [Перевел: Сергей Зинин]

SynEdit — мощные GPL многострочные средства редактирования для Delphi, Kylix и CppBuilder.
Подсветка синтаксиса, завершение кода, текстовые метки, поиск и замена, обеспечение связи с базами данных, регистрация макрокоманд, и другое.
В CVS версии в настоящее время могут быть подсвечены 43 различных формата файла.
С исходными текстами.
Источник: www.torry.net Автор: Open Source Project http://synedit.sourceforge.net
-= * VCL * Samples * =- [Перевел: Сергей Зинин]

Delphi компонент, инкапсулирующия часть ICQ v.8 протокола (используемого в ICQ2002A): регистрация на сервере и изменение статуса, управление контактом, списками visible, unvisible и ignor, получение (без авторизации) файлов списков контактов с сервера, и многое другое.
Помощь на английском и русском языках.
Новая версия компоненты.
С исходными текстами.
Источник: www.torry.net Автор: Alex Demchenko http://www.cobans.net
-= * VCL * Samples * =- [Перевел: Сергей Зинин]

Компонент для отправки электронной почты посредством MAPI (из почтового ящика по умолчанию).

Программа бухгалтерского учета, анализа и отчетности для одного компютера:
— Формирование плана счетов с учетом специфики компании
— Учет курсов валют с любой периодичностью
— Учет по счетам в любой валюте
— Прстейшая — ордерная форма записи бухгалтерской проводки.
— Сложные проводки без ограничения количество записей
— Использование субсчетов II и III уровней вместо карточек
— Складской, количественный учет, цены (усредненный метод)
— Суммарный и количественный оборотный баланс с учетом курсов валют
— Баланс по всем уровням, детализированный по всем счетам и субсчетам
— Автоматический расчет курсовых разниц с отражением результата
— Система контроля доступа для отдельных пользователей
И многое другое.
Источник: www.delphipages.com Автор: FINANCES Ltd http://www.finances-ltd.narod.ru/index.html
-= * VCL * =- [Перевел: Сергей Зинин]

Библиотека позволяет получить доступ к Microsoft shell dialogs & wizards из вашего приложения!
В библиотеку включены: TOrtusShellControlPanel TOrtusShellAbout TOrtusShellOpenWith TOrtusShellNewShortcut TOrtusShellBrowseComputer TOrtusShellBrowseFolder TOrtusShellRun TOrtusShellExitWindows TOrtusShellDiskFull TOrtusShellFormatDisk TOrtusShellProperties TOrtusShellOrganizeFavorites.
Эта персональная версия не имеет никаких ограничений, но Вы не можете использовать её для коммерческой или деловой цели. В противном случае необходимо приобрести лицензию.
Источник: www.delphipages.com Автор: Ortus Software http://www.ortus-software.com
-= * VCL * =- [Перевел: Сергей Зинин]

Ориентированные на данные и обычные компоненты с метками.
В библиотеку входят: EditLabel, DBEditLabel, MemoLabel, DBMemoLabel.
Можно задать бордюр с корректируемыми цветами. Настраиваемые цвета фона и текста. Имеют свойства ColorOnFocus и ColorNotOnFocus.
С исходными текстами
Источник: www.delphipages.com Автор: Steven Waugh
-= * VCL * DB-aware * Samples * =- [Перевел: Сергей Зинин]

  • Для уменьшения объема писем здесь публикуется не весь список новых компонент, потому заглядывайте и на сайт!
  • Лучшее из нашего FAQ |x|

    Комментарий от Alex Zemliansky:
    if Table1.Modified then Table1.Post;

    Эту строку надо поставить в обработчике закрытия формы OnClose или каком-нить другом событии (по желанию автора). Главное, что это позволит очистить кэш.

    Обсуждается в конференциях |x|
    • Обмен с шиной ISA
      Есть некое устройство под шину ISA, как организовать с ним обмен под Windows?
    • Помогите, плз. Или я торможу уже или.
      Есть 2 таблицы. В первой хранится справочник бланков строгой отчетности( Серия | № п/п | начало пачки | конец пачки | .
    • Помогите а то я уж запарился!
      Работаю с базой данных MS Access и мне приходится ручками указывать путь к моей базе и прочие параметры, но я хочу все .
    • ERWin и русский шрифт
      Ни как не получается использовать кириллицу в ERWin Logical diagram! Вместо русских букв каракули! Может кто с этим .
    • DLLs: Invalid Pointer Operation
      Определённый алгоритм, отменно работающий в модуле, в DLL выдаёт «Invalid Pointer Operation» .. Причём DLL-овская .
    • OleDB Provider for ODBC/Microsoft Visual FoxPro Driver
      Приветствую, мастера! Работаю через ADO, использую OleDB Provider for ODBC и ODBC-шный драйвер Microsoft Visual FoxPro .
    • проблема с BDE или еще чем-то.
      дано: несколько программ обращается к одной dbf (foxpro’шной, с одной записью) на чтение через bde при обращении .
    У нас большой выбор статей |x|

    Delphi и Flash. Совмещение несовместимого!
    Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах.

    Новинки книжного рынка |x|

    Delphi 6 и Kylix для программиста
    В этой книге на практических примерах рассмотрены все возможности среды Delphi 6. Читательузнает, как создавать многоуровневые программы для работы с базами данных, Интернет-системы и сетевые распределенные приложения на основе технологий СОМ и CORBA. Рассмотрены механизмы преобразования XML-данных и приемы разработки служб WebServices. В большинстве случаев программист может обойтись визуальными средствами Delphi.Характер авторских работ С. Бобровского традиционно отличается тем, что они не только служат фундаментальными руководствами по новым технологиям программирования, но и представляют собой удобные справочники, полезные каждому программисту, независимо от уровня его подготовки.
    Автор: Бобровский С.

    Другие сайты о DELPHI |x|

    DelphiCity
    Открылся новый сайт, посвященный исключительно компонентам, библиотекам и инстpументам для Delphi и C++ Builder. От себя заметим, что сайт в самом деле достоен, чтобы его посетили, а приятный дизайн, .
    » Оценка сайта: 5

    Опрос населения :)

    Новый журнал для программистов «RSDN Magazine». За какую сумму вы готовы его покупать?
    »»» 80р.
    »»» 100р.
    »»» 120р.
    »»» 150р.
    Журнал «RSDN Magazine» |x|

    Дорогие друзья! Мы рады представить вам новый совместный проект сайтов www.rsdn.ru, delphi.mastak.ru и www.optim.ru — профессиональный журнал для программистов RSDN Magazine.
    Несомненно, ваше мнение о необходимости такого журнала, содержании рубрик и темах отдельных статей поможет сделать журнал более полезным и интересным. Высказать свое мнение, проголосовать или же подписаться вы можете на сайте. Без вашего участия, нам будет трудно сделать правильный журнал!
    На сайте выложен анонс пилотного выпуска журнала, вступительное слово от редакции. Для души

    Хокку дня
    Там среди ветвей
    Тень вороны поплыла,
    Темный лист упал.

    Афоризмы
    Когда обращаешься к богу — будь немногословным.

    Фраза дня
    Я повтоpяю свой вопpос: «Reboot?!»

    Дурацкие законы (информация предоставлена сайтом kurilka.com)
    Во Флориде (США), чтобы кататься на скейтборде, необходимо получить специальные права.
    В городе Ки Вест в штате Флориде (США) куры объявлены редким видом птиц, находящихся под охраной закона.

    И на закуску коротенький анекдот
    — Мама, скажи: фунь.
    — Зачем?
    — Ну, скажи.
    — Да что это хоть такое?
    — Какая тебе разница, просто скажи: фунь!
    — Не буду я повторять глупости, которых не понимаю!
    — Вот и меня не заставляй английский учить!

    Совместимость

    1. Какие операционные системы Delphi поддерживает?

    Версия Delphi 1.0 предназначается для Windows 3.1x. Hет причин, по которым Delphi 1.0 не работал бы в системах, которые обеспечивают эмуляцию Windows 3.1, подобно OS/2 Warp, Windows NT, UnixWare 2.0 и т.д.

    Delphi 2.0 предназначена для работы под Win32/Intel — на данный момент это Windows 95 (в т.ч. OSR2), Windows NT (3.5 и 4.0).

    Delphi 3.0 также работает под Win32, но на данный момент некоторые возможности, предоставляемые продуктом можно использовать только в ОС Windows NT 4.0. Возможно, очередная версия Windows 95 (Windows 97), будет обладать этими функциями.

    2. Какие средства управления проектом совместимы с Delphi?

    Delphi 1.0 Client/Server поддерживает совместимость с PVCS компании InterSolv.

    Delphi 2.0 Client/Server Suite включает в себя комплект PVCS, интегрированный в IDE.

    Кроме того, должна быть возможность совмещения с большинством систем контроля исходных текстов. Однако, формы в Delphi сохраняются в двоичном формате, так что пакет управления исходными текстами должен поддерживать двоичные данные для того, чтобы это работало с Delphi . Если у вас есть администратор исходных текстов, который просто не может иметь дело с двоичными файлами, то согласно документам, вы может сохранять формы в виде ASCII текста для редактирования или в целях контроля за версиями. Файлы ASCII могут также загружаться и снова сохраняться в двоичном *.DFM формате.

    MKS Source Integrity (MKS SI — 2-ой на рынке администраторов исходного текста для PC/PCLAN с более чем 35,000 разработчиками, использующими SI) также предлагает средства интеграции в Delphi. Эти средства в настоящее время поставляются наряду с MKS SI.

    3. Можно ли в Delphi использовать DLL, разработанные в C или C ++?

    Delphi способен вызывать и получать обратные вызовы (callback) из любого стандартного модуля DLL для Windows.

    4. Можно ли вызывать код, созданный в Delphi из C или C ++?

    Delphi может генерировать DLL, которые можно вызывать из C, C++, Visual Basic, PowerBuilder, или чего-нибудь еще, что понимает стандартные Windows DLL. Имеется пример DLL в каталоге DEMOSDBDLL из комплекта Delphi.

    5. Что известно о пакетах других фирм, которые работают (или не работают) с Delphi?

    6. Есть ли поддержка Dynamic Data Exchange (DDE), VBX, OLE, OCX, OpenDoc?

    Да, Delphi позволяет с разной степенью комфорта использовать все технологические стандарты, имеющиеся в Windows.

    7. Можно ли на Delphi написать VBX или OCX?

    Можно. Ведь по сути дела VBX — это .dll, написанная по определенным правилам. Однако скорее всего вам потребуется дополнительно соответствующий SDK от компании Microsoft. Существует даже статья, где обсуждаются все аспекты такой работы.

    Относительно OCX все то же самое, что и относительно VBX.

    Delphi 3.0 позволяет визуально создавать элементы ActiveX.

    8. Какие генераторы отчетов можно использовать с Delphi кроме ReportSmith?

    В порядке предпочтения:

    1. Имеется QuickReport — генератор отчетов, сделанный в виде компонентов и встраиваемый непосредственно в приложение. Успех 16-разрядной версии привел к тому, что начиная с версии Delphi 2.0 32-разрядный QuickReport входит в стандартный вариант поставки.

    2. Crystal Reports — подключается через VBX.

    3. R&R Report Writer — хорошо работает с Delphi, позволяет выполнять запросы, preview, вызовы DLL, передачу параметров. (производитель — Concentric Data Systems)

    4. Также есть еще несколько генераторов отчетов, выполненных аналогично QuickReport в виде компонентов.

    Следует также заметить, что на данный момент Borland International продал ReportSmith другой фирме, так что его присутствие в Delphi 3.0 под вопросом.

    Delphi и flash совмещение несовместимого

    Delphi и Flash. Совмещение несовместимого!
    Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах. Если вы сумеете гармонично вписать небольшой флэш-ролик в вашу программу, то несомненно внешний вид программы будет намного привлекательнее (главное не переборщить, увлекаясь дизайном, не надо забывать о том что программа должна быть удобна и проста в использовании! ).

    Итак, как же совместить Флэш и Дельфи? (Надеюсь, что у вас Флэш установлен:))

    Запустите Дельфи и выберите пункт меню Component->Import ActiveX Control. Перед вами откроется диалоговое окно с заголовком Import ActiveX Control. В разделе Registered Controls выберите Shockwave Flash. В разделе Pallete Page. Выберите страницу в палитре компонентов, на которой будет располагаться установленный компонент (по умолчанию это ActiveX). В разделе Unit Dir Name. путь к папке куда будет установлен компонент.


    Нажмите на кнопку Install. Перед вами появится окно, в котором вам нужно будет выбрать в какой пакет будет установлен компонент (вы можете установить как в уже существующий, так и в новый пакет). Затем перед вами появится окно редактирования выбранного пакета и Дельфи вас спросит: «. Package will be rebuilt. Continue?». Ответьте Yes. Все готово теперь можно использовать флэш в ваших приложениях.

    Теперь, чтобы показать вам как пользоваться этим компонентом, попробуем вместе сделать программу для просмотра *.SWF файлов. Для этого нам понадобятся следующие компоненты: TShockwaveFlash (для удобства назовите его просто Flash1), TTrackBar, TTimer, TOpendialog и три кнопки TButton («открыть», «старт» и «стоп»).

    Для начала установим необходимые свойства OpenDialog’a

    Свойство Filter может быть таким: Флэш-ролики|*.swf

    Свойство DefaultExt должно быть: *.swf

    Для Timer’a нужно установить свойство Interval равным 1.

    Name сделайте равным Flash1

    Свойство Playing установите в false

    Свойство BGColor, установите как вам хочется (цвет фона)

    Теперь напишем обработчик события OnClick для кнопки, которая вызывать OpenDialog:

    if open1.Execute then begin
    flash1.Movie:=open1.FileName;
    trackbar1.Max:=flash1.TotalFrames;

    В обработчик события OnClick для второй кнопки («Старт») напишем:

    Ну тут вообще все просто! Почти таким же образом это будет выглядеть для третьей кнопки («Стоп»):

    Теперь сделаем, чтобы при перемещении ползунка Trackbar’a мы могли посмотреть каждый кадр (событие OnChange):

    if Flash1.IsPlaying=true then Flash1.Stop; <если ролик проигрывается, то надо его остановить>
    flash1.GotoFrame(trackbar1.position);

    Ну и наконец осталось сделать чтобы при проигрывании ролика ползунок перемещался, указывая сколько осталось и сколько прошло. Для этого то мы и используем Timer. В обработчик события OnTimer,напишем:

    Приведу полный код приложения:

    delphi
    unit flash;

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ComCtrls, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;

    type
    TForm1 = class (TForm)
    Flash1: TShockwaveFlash;
    Button1: TButton;
    TrackBar1: TTrackBar;
    Open1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject );
    procedure Button2Click(Sender: TObject );
    procedure Button3Click(Sender: TObject );
    procedure TrackBar1Change(Sender: TObject );
    procedure Timer1Timer(Sender: TObject );
    private
    < Private declarations >
    public
    < Public declarations >
    end ;

    var
    Form1: TForm1;

    procedure TForm1.Button1Click(Sender: TObject );
    begin
    if open1.Execute then
    begin
    flash1.Movie := open1.FileName;
    trackbar1.Max := flash1.TotalFrames;
    end ;
    end ;

    procedure TForm1.Button2Click(Sender: TObject );
    begin
    flash1.Play;
    end ;

    procedure TForm1.TrackBar1Change(Sender: TObject );
    begin
    if Flash1.IsPlaying = true then Flash1.Stop;
    flash1.GotoFrame(trackbar1.position);
    end ;

    procedure TForm1.Button3Click(Sender: TObject );
    begin
    flash1.Stop;
    end ;

    procedure TForm1.Timer1Timer(Sender: TObject );
    begin
    trackbar1.Position := flash1.CurrentFrame;
    end ;

    Ну вот и все. Как оказалось ничего сложного.

    Дополнительная информация
    Автор: Михаил Христосенко.

    Delphi и Flash. Совмещение несовместимого!

    Название Delphi и Flash. Совмещение несовместимого!
    Дата конвертации 07.07.2013
    Размер 4.63 Kb.
    Тип Тексты

    Delphi и Flash. Совмещение несовместимого!
    Михаил Христосенко, Development и Дельфи Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах. Если вы сумеете гармонично вписать небольшой флэш-ролик в вашу программу, то несомненно внешний вид программы будет намного привлекательнее (главное не переборщить, увлекаясь дизайном, не надо забывать о том что программа должна быть удобна и проста в использовании! ).

    Итак, как же совместить Флэш и Дельфи? (Надеюсь, что у вас Флэш установлен:))

    Запустите Дельфи и выберите пункт меню Component->Import ActiveX Control. Перед вами откроется диалоговое окно с заголовком Import ActiveX Control. В разделе Registered Controls выберите Shockwave Flash. В разделе Pallete Page. Выберите страницу в палитре компонентов, на которой будет располагаться установленный компонент (по умолчанию это ActiveX). В разделе Unit Dir Name. путь к папке куда будет установлен компонент.

    Нажмите на кнопку Install. Перед вами появится окно, в котором вам нужно будет выбрать в какой пакет будет установлен компонент (вы можете установить как в уже существующий, так и в новый пакет). Затем перед вами появится окно редактирования выбранного пакета и Дельфи вас спросит: «. Package will be rebuilt. Continue?». Ответьте Yes. Все готово теперь можно использовать флэш в ваших приложениях.

    Теперь, чтобы показать вам как пользоваться этим компонентом, попробуем вместе сделать программу для просмотра *.SWF файлов. Для этого нам понадобятся следующие компоненты: TShockwaveFlash (для удобства назовите его просто Flash1), TTrackBar, TTimer, TOpendialog и три кнопки TButton («открыть», «старт» и «стоп»).

    Для начала установим необходимые свойства OpenDialog’a

    Свойство Filter может быть таким: Флэш-ролики|*.swf

    Свойство DefaultExt должно быть: *.swf

    Для Timer’a нужно установить свойство Interval равным 1.

    Name сделайте равным Flash1

    Свойство Playing установите в false

    Свойство BGColor, установите как вам хочется (цвет фона)

    Теперь напишем обработчик события OnClick для кнопки, которая вызывать OpenDialog:

    if open1.Execute then begin
    flash1.Movie:=open1.FileName;
    trackbar1.Max:=flash1.TotalFrames;

    В обработчик события OnClick для второй кнопки («Старт») напишем:

    Ну тут вообще все просто! Почти таким же образом это будет выглядеть для третьей кнопки («Стоп»):

    Теперь сделаем, чтобы при перемещении ползунка Trackbar’a мы могли посмотреть каждый кадр (событие OnChange):

    if Flash1.IsPlaying=true then Flash1.Stop; <если ролик проигрывается, то надо его остановить>flash1.GotoFrame(trackbar1.position);

    Ну и наконец осталось сделать чтобы при проигрывании ролика ползунок перемещался, указывая сколько осталось и сколько прошло. Для этого то мы и используем Timer. В обработчик события OnTimer, напишем:

    Приведу полный код приложения:

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;

    type
    TForm1 = class(TForm)
    Flash1: TShockwaveFlash;
    Button1: TButton;
    TrackBar1: TTrackBar;
    Open1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    private
    < Private declarations >
    public
    < Public declarations >
    end;

    var
    Form1: TForm1;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if open1.Execute then begin
    flash1.Movie:=open1.FileName;
    trackbar1.Max:=flash1.TotalFrames;
    end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    flash1.Play;
    end;

    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
    if Flash1.IsPlaying=true then Flash1.Stop;
    flash1.GotoFrame(trackbar1.position);
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    flash1.Stop;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    trackbar1.Position:=flash1.CurrentFrame;
    end;

    Ну вот и все. Как оказалось ничего сложного.

    Flash-элементы

    Меню навигации

    Пользовательские ссылки

    Информация о пользователе

    Вы здесь » Flash-элементы » Flash + Delphi, Flash + Builder C++ » Взаимодействие Flash и Delphi, Flash и Builder C++

    Взаимодействие Flash и Delphi, Flash и Builder C++

    Сообщений 1 страница 16 из 16

    Поделиться12012-11-10 00:52:35

    • Автор: Prolistof
    • Администратор
    • Зарегистрирован: 2012-11-09
    • Приглашений: 0
    • Сообщений: 194

    • Уважение: [+0/-0]
    • Позитив: [+0/-0]
    • Провел на форуме:
      7 дней 9 часов
    • Последний визит:
      2020-08-02 00:24:38

    В данном разделе рассматриваем взаимодействие Flash и Delphi.
    Вопрос такого взаимодействия (так же как и Flash + Builder C++) возникает далеко не у всех. Еще несколько лет назад он был совершенно не проработан и по нему можно было найти крохи информации. Он и сейчас остается почти таким же в отличие от Flash + PHP.

    Взаимодействие Flash и Delphi происходит посредством элемента ActivX для Flash (Shockwave Flash), устанавливаемого в Delpi-приложение.
    (Аналогично происходит взаимодействие Flash и Builder C++)
    Спрашивается, а зачем это надо? Ну, если у Вас возник такой вопрос, то, значит пока это Вам, точно, не надо.
    А, вообще, ответ может звучать примерно так. К Delphi-приложению с его огромной многофункциональностью присоединяется элемент с огромными возможностями по управлению графикой. То есть приложению добавляется этакое интеллектуальное графическое ядро. И смысл такого подключения в том, чтобы передать во Flash нужную информацию, а уж она и сгенерирует и нарисует все, что нужно. И результаты такого симбиоза очень даже впечатляют.

    Поделиться22012-11-10 00:53:26

    • Автор: Prolistof
    • Администратор
    • Зарегистрирован: 2012-11-09
    • Приглашений: 0
    • Сообщений: 194
    • Уважение: [+0/-0]
    • Позитив: [+0/-0]
    • Провел на форуме:
      7 дней 9 часов
    • Последний визит:
      2020-08-02 00:24:38

    Ссылка на хорошую статью по Установка компонента Shockwave Flash
    Можно сказать пошаговая инструкция по установке.

    А здесь ресурс, название которого говорит само за себя. Но что-то сильной активности там нет delphiflash.com.
    На главной странице предлагаются для скачивания два пакета.
    1. Flash Viewer Engine — набор компонентов для Delphi, C++ Builder and Lazarus, которые добавляют некоторые возможности, такие как загрузка из разных источников, сграбивание 32-RGBA фреймы и тд..

    2. Flash SlideShow Engine (ActiveX Edition and Delphi Edition) — компонент для создания анимации во Flash, подобно слайд-шоу с различными эффектами движения и трансформации.

    Поделиться32012-11-18 15:31:07

    • Автор: Brunoff
    • Администратор
    • Зарегистрирован: 2012-11-18
    • Приглашений: 2
    • Сообщений: 117
    • Уважение: [+1/-0]
    • Позитив: [+0/-0]
    • Провел на форуме:
      3 дня 16 часов
    • Последний визит:
      2020-09-14 00:17:01

    Эту статью «Установка компонента . » хорошо знаю, попалась мне пару лет назад. Все очень подробно и хорошо описано (особенно для тормозов).
    Конечно, установка ShockwaveFlash в Delphi-приложение не вызывает особых проблем (хотя у кого как). Но, судя по информации в сети, технология эта не особенно популярна вследствие непонимания, а зачем это надо. Flash как отдельная web-технология, благодаря значительному развитию ее AS3 Адобом, почти самодостаточна. А Delphi традиционно сама по себе. Вот и непонятно, зачем их совмещать?
    Необходимость совмещения чаще возникает у разработчиков ПО, чем у web-мастеров и админов. И при правильном применении этой технологии результат можно получить очень впечатляющий. Это я говорю на основе личного опыта.

    Отредактировано Brunoff (2012-11-18 15:33:29)

    Поделиться42012-11-18 19:49:40

    • Автор: Modus
    • Активный участник
    • Зарегистрирован: 2012-11-10
    • Приглашений: 0
    • Сообщений: 75
    • Уважение: [+0/-0]
    • Позитив: [+2/-0]
    • Провел на форуме:
      1 день 10 часов
    • Последний визит:
      2020-06-02 16:22:25

    Ну, надо или не надо — это от поставленной задачи зависит. А здесь решение как раз очень простое и удобное. Вставил компонент shockwave, настроил протокол обмена с программой и все. Потом даже редактировать Flash можно независимо от общей программы, что очень удобно.

    Поделиться52012-11-19 21:41:33

    • Автор: Brunoff
    • Администратор
    • Зарегистрирован: 2012-11-18
    • Приглашений: 2
    • Сообщений: 117
    • Уважение: [+1/-0]
    • Позитив: [+0/-0]
    • Провел на форуме:
      3 дня 16 часов
    • Последний визит:
      2020-09-14 00:17:01

    Конечно, возможность независимого редактирования графики очень удобно. Особенно, если нужно править только графику. Но это не единственное достоинство. И с передачей данных во Flash-приложение можно получить большой выигрыш, ведь не надо передавать буквально все, достаточно только то, на основе чего Flash сама может отрисовать графические объекты (особенно если много однотипных с одинаковыми свойствами).
    Был у меня такой проект по мониторингу серверных процессов. Там как раз было много однотипных граф. объектов, которые рисовала Flash как наглядный результат мониторинга.

    Поделиться62012-11-23 14:07:05

    • Автор: Prolistof
    • Администратор
    • Зарегистрирован: 2012-11-09
    • Приглашений: 0
    • Сообщений: 194
    • Уважение: [+0/-0]
    • Позитив: [+0/-0]
    • Провел на форуме:
      7 дней 9 часов
    • Последний визит:
      2020-08-02 00:24:38

    Brunoff, можете рассказать об этом проекте? Лишние подробности можно опустить (если это касается коммерческого проекта), только суть применения технологии.

    Поделиться72012-11-23 21:44:57

    • Автор: Modus
    • Активный участник
    • Зарегистрирован: 2012-11-10
    • Приглашений: 0
    • Сообщений: 75
    • Уважение: [+0/-0]
    • Позитив: [+2/-0]
    • Провел на форуме:
      1 день 10 часов
    • Последний визит:
      2020-06-02 16:22:25

    Да, было бы интересно услышать о применении технологии в реальном проекте.

    Поделиться82012-11-24 22:25:45

    • Автор: Brunoff
    • Администратор
    • Зарегистрирован: 2012-11-18
    • Приглашений: 2
    • Сообщений: 117
    • Уважение: [+1/-0]
    • Позитив: [+0/-0]
    • Провел на форуме:
      3 дня 16 часов
    • Последний визит:
      2020-09-14 00:17:01

    Некоторое время назад мы разрабатывали информационную систему. В общих чертах суть этой системы следующая.
    На сервере содержится тематическая информация (в базе данных). Тематик не слишком много, около пары сотен. Внешний пользователь после регистрации в системе может сделать запрос на сервер для получения любой тематической информации из БД. Запрос делается из клиента, установленного на ПК пользователя.
    Клиент формирует запрос к системе по доступным тематикам (он знает о доступности в результате обновление, приходящих с сервера).
    На стороне севера запрос обрабатывается обработчиками. Их порядка 10, работают последовательно. Сначала анализ санкционированности запроса, затем проверка регистрации пользователя, затем разбирается что запрашивается и т. д. до последнего. Последний обработчик формирует собственно задание на подготовку архива с запрошенной информацией. Архив пересылается пользователю и клиент расшифровывает архив. Это сама инфосистема.

    Если все обработчики отработали корректно, то все нормально. Но если на любом этапе какой-то из обработчиков определил некорректную информацию, то он выставляет код ошибки и завершает весь цикл обработки.
    Каждый обработчик пишет свой суточный лог-файл. При большом количестве запросов эти файлы могут достигать несколько десятком Мб.
    Задача была в мониторинге работы всех обработчиков с возможностью видеть незавершенные циклы обработки.
    Делала это программа на Builder С++ с графическим Flash-ядром. Она считывала файлы логов и передавала для отрисовки во Flash. Хоть файлы логов и большие, но для отрисовки важны только времена событий.
    Flash по полученной информации строила гистограммы для каждого обработчика. Поскольку время всего цикла обработки невелико (неск. мс). то гистограммы для всех обработчиков (в масштабе графика) для одного события выстраиваются вдоль одной вертикальной линии. А если цикл не завершен, то линия обрывается и это сразу видно на графике.
    Вот пара скринов с гистограммами для 4-х обработчиков. Второй скрин с увеличенным масштабом (раздвинут по времени). Хорошо видны незавершенные группы.

    Функциональная схема самой системы приведена на картинке. Картинка снята с Flash-приложения для демонстрации наглядности работы информационной системы. Само Flash-приложение можно посмотреть в Галерее в разделе приложений.

    Вот, собственно, такое совместное использование С++ и Flash.

    Отредактировано Brunoff (2012-11-26 09:24:50)

    Delphi и flash совмещение несовместимого

    Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах. Если вы сумеете гармонично вписать небольшой флэш-ролик в вашу программу, то несомненно внешний вид программы будет намного привлекательнее (главное не переборщить, увлекаясь дизайном, не надо забывать о том что программа должна быть удобна и проста в использовании! ).

    Итак, как же совместить Флэш и Дельфи? (Надеюсь, что у вас Флэш установлен:))

    Запустите Дельфи и выберите пункт меню Component->Import ActiveX Control. Перед вами откроется диалоговое окно с заголовком Import ActiveX Control. В разделе Registered Controls выберите Shockwave Flash. В разделе Pallete Page. Выберите страницу в палитре компонентов, на которой будет располагаться установленный компонент (по умолчанию это ActiveX). В разделе Unit Dir Name. путь к папке куда будет установлен компонент.

    Нажмите на кнопку Install. Перед вами появится окно, в котором вам нужно будет выбрать в какой пакет будет установлен компонент (вы можете установить как в уже существующий, так и в новый пакет). Затем перед вами появится окно редактирования выбранного пакета и Дельфи вас спросит: «. Package will be rebuilt. Continue?». Ответьте Yes. Все готово теперь можно использовать флэш в ваших приложениях.

    Теперь, чтобы показать вам как пользоваться этим компонентом, попробуем вместе сделать программу для просмотра *.SWF файлов. Для этого нам понадобятся следующие компоненты: TShockwaveFlash (для удобства назовите его просто Flash1), TTrackBar, TTimer, TOpendialog и три кнопки TButton («открыть», «старт» и «стоп»).

    Для начала установим необходимые свойства OpenDialog’a

    Свойство Filter может быть таким: Флэш-ролики|*.swf

    Свойство DefaultExt должно быть: *.swf

    Для Timer’a нужно установить свойство Interval равным 1.

    Name сделайте равным Flash1

    Свойство Playing установите в false

    Свойство BGColor, установите как вам хочется (цвет фона)

    Теперь напишем обработчик события OnClick для кнопки, которая вызывать OpenDialog:

    В обработчик события OnClick для второй кнопки («Старт») напишем:

    Ну тут вообще все просто! Почти таким же образом это будет выглядеть для третьей кнопки («Стоп»):

    Теперь сделаем, чтобы при перемещении ползунка Trackbar’a мы могли посмотреть каждый кадр (событие OnChange):

    Ну и наконец осталось сделать чтобы при проигрывании ролика ползунок перемещался, указывая сколько осталось и сколько прошло. Для этого то мы и используем Timer. В обработчик события OnTimer,напишем:

    Delphi и Flash

    Delphi и Flash.

    Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается. И сейчас я вам расскажу об этом. Во-первых хочется отметить преимущества использования флэш-роликов в ваших программах. Если вы сумеете гармонично вписать небольшой флэш-ролик в вашу программу, то несомненно внешний вид программы будет намного привлекательнее (главное не переборщить, увлекаясь дизайном, не надо забывать о том что программа должна быть удобна и проста в использовании! ).

    Итак, как же совместить Флэш и Дельфи? (Надеюсь, что у вас Флэш установлен:))

    Запустите Дельфи и выберите пункт меню Component->Import ActiveX Control. Перед вами откроется диалоговое окно с заголовком Import ActiveX Control. В разделе Registered Controls выберите Shockwave Flash. В разделе Pallete Page. Выберите страницу в палитре компонентов, на которой будет располагаться установленный компонент (по умолчанию это ActiveX). В разделе Unit Dir Name. путь к папке куда будет установлен компонент.

    Нажмите на кнопку Install. Перед вами появится окно, в котором вам нужно будет выбрать в какой пакет будет установлен компонент (вы можете установить как в уже существующий, так и в новый пакет). Затем перед вами появится окно редактирования выбранного пакета и Дельфи вас спросит: «. Package will be rebuilt. Continue?». Ответьте Yes. Все готово теперь можно использовать флэш в ваших приложениях.

    Теперь, чтобы показать вам как пользоваться этим компонентом, попробуем вместе сделать программу для просмотра *.SWF файлов. Для этого нам понадобятся следующие компоненты: TShockwaveFlash (для удобства назовите его просто Flash1), TTrackBar, TTimer, TOpendialog и три кнопки TButton («открыть», «старт» и «стоп»).

    Для начала установим необходимые свойства OpenDialog’a

    Свойство Filter может быть таким: Флэш-ролики|*.swf

    Свойство DefaultExt должно быть: *.swf

    Для Timer’a нужно установить свойство Interval равным 1.

    Name сделайте равным Flash1

    Свойство Playing установите в false

    Свойство BGColor, установите как вам хочется (цвет фона)

    Теперь напишем обработчик события OnClick для кнопки, которая вызывать OpenDialog:

    [an error occurred while processing this directive]

    В обработчик события OnClick для второй кнопки («Старт») напишем:

    Ну тут вообще все просто! Почти таким же образом это будет выглядеть для третьей кнопки («Стоп»):

    Теперь сделаем, чтобы при перемещении ползунка Trackbar’a мы могли посмотреть каждый кадр (событие OnChange):

    Ну и наконец осталось сделать чтобы при проигрывании ролика ползунок перемещался, указывая сколько осталось и сколько прошло. Для этого то мы и используем Timer. В обработчик события OnTimer, напишем:

    Приведу полный код приложения:

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ComCtrls, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;

    type
    TForm1 = class(TForm)
    Flash1: TShockwaveFlash;
    Button1: TButton;
    TrackBar1: TTrackBar;
    Open1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    private
    < Private declarations >
    public
    < Public declarations >
    end;

    var
    Form1: TForm1;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if open1.Execute then begin
    flash1.Movie:=open1.FileName;
    trackbar1.Max:=flash1.TotalFrames;
    end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    flash1.Play;
    end;

    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
    if Flash1.IsPlaying=true then Flash1.Stop;
    flash1.GotoFrame(trackbar1.position);
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    flash1.Stop;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    trackbar1.Position:=flash1.CurrentFrame;
    end;

    Ну вот и все. Как оказалось ничего сложного.

    Илон Маск рекомендует:  header в HTML
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL