| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Работа с потоками.
Работа с потоками. Поговорим про потоки в KOL. Вещь безусловно нужная и поэтому очень приятная :). Потоки позволяют сделать более гибкой работу по обмену и выводу данных из различных источников. Для разных источников (носителей), чтение данных происходит по разному, а потоки унифицируют этот процесс. Теоретическую часть этого вопроса можно найти в любой книжке по Delphi, так что особо разглагольствовать я не буду. Скажу лишь что во многих случаях без них совершенно не обойтись. Например : Вы в ресурс вашей программы поместили gif или jpg файл (ну не хочется вам таскать их отдельными файлами). Разумеется вы захотите когда-нибудь показать их миру . Но не все так просто. Объекты PGif и PJpeg не читают данные из ресурса (только поток или файл). Т.е. у нас сложилась так, что ресурс (источник), не может передать информацию объектам PGif или PJpeg. Вот тут и приходят на помощь потоки. И таких примеров если покопаться можно отыскать достаточно. В конце урока будет приведен пример именно работы с ресурсами (вывод изображения формата gif на экран и сохранения ресурса на диск), а сейчас рассмотрим "школьный минимум". Конструкторы. Для создания потока в памяти (чтение и
запись): Для создания потоков работающих с файлами:
FileName - имя фала на диске. Основные свойства PStream
Список методов:
А теперь сам обещанный пример. Для его работы у вас должен
быть установлен KolGif (можете скачать в разделе
файлы). Вы также должны создать ресурс содержащий любой gif с именем
logo.gif (в моем случаем это логотип нашего сайта). program Primer11;
uses
kol,
messages,
windows,
kolgif;
{$R *.RES}
{$R pic.res}
var
forma,
pb:pControl;
Gif: pGif;
PicStream:PStream;
//////////////////////////////////////////////////////////////////////////
// рисование избражения
procedure DrawPaint( Dummy: Pointer; Sender: PControl; DC: HDC );
begin
Gif.Draw(PB.Canvas.Handle,0,0);
end;
//////////////////////////////////////////////////////////////////////////
//"забрасываем" ресурс на диск
procedure SavePic( Dummy : Pointer; Sender: PControl );
begin
//GetWindowsDir[1] - будем мусорить на системном диске :)
//создаем файл-поток для изображения
PicStream := NewWriteFileStream(GetWindowsDir[1]+':logo.gif');
// переводим данные из ресурса в поток
Resource2Stream(PicStream,HInstance,'LOGOTIP',RT_RCDATA);
PicStream.free;
end;
//////////////////////////////////////////////////////////////////////////
// показываем картинку из ресурса
procedure ShowForma( Dummy : Pointer; Sender: PControl );
begin
PicStream := NewMemoryStream; //создаем поток для изображения
// переводим данные из ресурса в поток
Resource2Stream(PicStream,HInstance,'LOGOTIP',RT_RCDATA);
//Указываем с какой позиции у нас будут читаться данные
PicStream.Position := 0;
gif := NewGif;
gif.LoadFromStream(PicStream);
PB := NewPaintBox(forma);
PB.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) );
// в случае клика по картинке сохраняем ее на диск
PB.OnClick := TOnEvent( MakeMethod( nil, @SavePic ) );
PB.Width := gif.Width ;
PB.Height:= gif.Height;
PB.CenterOnParent;
PicStream.free;
end;
//////////////////////////////////////////////////////////////////////////
begin
Applet:=NewApplet('Работа с потоком');
Forma :=NewForm(Applet,'Работа с потоком (вывод gif)');
Forma.SetSize(310,120);
Forma.CenterOnParent;
Forma.Font.FontName := 'MS Sans Serif';
Forma.Font.FontHeight := 9;
Forma.onShow := TOnEvent(MakeMethod(nil,@ShowForma));
Run(Applet);
end.
Исходный текст : 1,9 Кб ; размер программы: 56,5Кб (без сжатия и замены System). Из этих 57 килобайт около 12 занимает картинка. Пример не совсем выгоден с точки зрения экономии дискового пространства :) Дело в том что логотип в bmp весит всего 24 Кб (цвет 8 бит), а KOLGif примерно 12Кб добавляет в размер программы + 12 Кб рисунок. Но при больших картинках помещать в ресурс gif уже более разумней. Источник: http://bonanzas.rinet.ru , http://kol.mastak.ru Рубрика: Kol и MCK
Подгрузка через AJAX HTML-кода, содержащег....
При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Обзор нового релиза самой мощной Ajax библ....
Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Firebug 1.3 и 1.4 alpha — что нового и инт....
Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 19.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|