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

Интернет для Delphi-программиста


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

Интернет для Delphi программиста.

Выпуск : № 50


Здравствуйте уважаемые подписчики рассылки "Интернет для Delphi программиста". Данная рассылка предназначена для всех кого интересует Delphi, здесь будут выкладываться ссылки на различные ресурсы интернета так или иначе связанные с Delphi: книги, исходники, программы... Изучайте Delphi один из лучших языков программирования!!!


ЗАДАТЬ ВОПРОС :

Правила рассылки: 
1. Не присылайте ответов на вопросы типа "да, нет".  
2. Если отвечаешь на вопрос - то отвечай подробно с примерами (желательно с исходником примера).
3. Тема вопросов - программирование на Delphi.
Внимание авторам: - Я не указываю ваши адреса из-за спама, но кто хочет, чтобы его email был - пишите, иначе только имя(ник).
Отправить вопрос


Новые вопросы.


Вопрос № 123 задаёт:  Yaroshuk Yuriy Ответить
Работаю с компонентом TCalendar, помогите разобратся как из ячейок TCalendar переадресовать на TBitBtn или подобный компонетн. Задача вот в чем, нужно вивести календарь на форму одного месяця только даты!. Второе как форму послать на печать, нужно формат А4 (альбомная) полноформатная.

Ответы.

Ожидаются


Статья:    "Смотрим в глубь DLL средствами Delphi." Источник: http://delphid.dax.ru

Не раз приходилось получать письма с просьбой рассказать о создании и использовании DLL в Delphi. В этой статье мы с Вами во всем разберемся и создадим свою библиотеку.

Динамически связанные библиотеки (Dinamic Link Library) дают возможность различным приложениям при своей работе использовать общий набор ресурсов. Важно то, что процедуры и функции, помещенные в DLL, выполняются внутри того процесса, который их использует. DLL предоставляет для всех приложений одну единственную копию ресурса, который совместно используется всеми запросившими его приложениями, в отличие от подпрограмм, которые запускают для каждого вызвавшего их приложения свою отдельную копию. Так же в отличия DLL от подпрограмм можно включить и то, что DLL могут экспортировать только процедуры и функции, но не типы, константы и т.д.

Хочется привести отрывок из "Уроков по Дельфи" о структуре DLL в памяти:

DLL - библиотека, в отличие от приложения не имеет ни стека, ни очереди сообщений. Функции, помещенные в DLL, выполняются в контексте вызвавшего приложения, пользуясь его стеком. Но эти же функции используют сегмент данных, принадлежащий библиотеке, а не копии приложения.
В силу такой организации DLL, экономия памяти достигается за счет того, что все запущенные приложения используют один модуль DLL, не включая те или иные стандартные функции в состав своих модулей.
Часто, в виде DLL создаются отдельные наборы функций, объединенные по тем или иным логическим признакам, аналогично тому, как концептуально происходит планирование модулей ( в смысле unit ) в Pascal. Отличие заключается в том, что функции из модулей Pascal компонуются статически - на этапе линковки, а функции из DLL компонуются динамически, то есть в run-time.

Создание DLL

Структура DLL мало чем отличается от обычной структуры модуля в Object Pascal. Начинаться DLL должна со слова Library, за которым помещается название библиотеки. Функции и процедуры, которые DLL будет предоставлять другим пользователям (экспортировать), перечисляются после директивы exports

Для каждой процедуры или функции можно указать ее номер с помощью директивы Index. Если номер будет отсутствовать, то компилятор проведет автоматическую индексацию. Вместо номера процедуры можно использовать уникальное имя, которое задается с помощью директивы name. Если же не указано ни имени функции, ни ее номера, то Дельфи воспримет это как экспорт по имени, которое будет совпадать с названием функции.

Библиотека может содержать также и код инициализации, который будет выполнен при ее загрузке. Он помещается между begin и end. Вот общая структура DLL:

library First_Dll;
uses
<используемые модули>;

<объявления и описания функций>

exports
<экспортируемые функции>

<описание процедур и функций>

begin
<инициализационная часть>
end.

Приведу примеры описания экспортируемых функций в разделе exports

exports
Function1 index 2;
Fucntion2 name 'My_sqr';
Function3;

Как Вы уже догадались, имя функции может не совпадать с именем для экспорта!!!

Использование DLL

Модуль, в котором необходимо использовать процедуры и функции из DLL должен использовать директиву external. Существует два способа использования DLL (динамический и статический). В первом случае, приложение вызывающее функцию из DLL знает имя библиотеки и точку входа в нее, при этом предполагается, что библиотека не меняется. Во втором случае перед использованием DLL следует убедиться, что требуемая библиотека существует, и в ней есть необходимая подпрограмма. 

Импортировать подпрограмму можно по ее имени и номеру. Поиск подпрограммы по номеру происходит быстрее, но всегда это удобно. Ниже приведены примеры импорта функций из нашей First_DLL, которая была рассмотрена в примере:

{ импорт по специфицированному имени }
Function ImportByName; external 'First_DLL' name 'My_sqr'; 

{ импорт по индексу }
Function ImportByOrdinal; external 'First_DLL' index 2; 

{ импорт по оригинальному имени }
Function Fucntion3; external 'First_DLL';

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

uses
WinTypes, WinProcs, ... ;

type
TMyProc = procedure ;

var
Handle : THandle;
MyImportProc : TMyProc;

begin
Handle:=LoadLibrary('FirstDLL');

if Handle>=32 then { если <=32 - ошибка ! }
begin
@MyImportProc:=GetProcAddress(Handle,'My_sqr');
if MyImportProc<>nil then
...... {здесь используем полученную функцию}
end;

FreeLibrary(Handle);
end;

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

Нажмите в меню File -> New и выберите DLL. Сохраните готовый шаблон, как предлагается, под именем Project1.dpr. Ниже приведен его полный код:

library Project1;

uses
SysUtils,
Classes;

Function Function1(x,y:integer):integer; export;
Begin
Result:=x+y;
End;

Function Function2(x,y:real):real; export;
var t:real;
Begin
t:=exp(y*ln(x));
Result:=t;
End;

exports
Function1 index 1,
Function2 name 'My_sqr';

begin
end.

Здесь две функции, первая вычисляет сумму двух чисел и экспортируется по номеру, а вторая вычисляет x в степени y и экспортируется по имени.

Теперь создадим новый проект и сохраним его под каким-нибудь другим именем, например, DemoDLL. Разместим на форме две кнопки, щелчок на первой из них будет вызывать первую процедуру, а щелчок на второй - вторую. Вот полный код этого демо-проекта:

unit demo;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function ImportSumm(x,y:integer):integer;external 'Project1' index 1; //импорт по номеру
function ImportSqr(x,y:real):real;external 'Project1' name 'My_sqr'; //импорт по имени

procedure TForm1.Button1Click(Sender: TObject);
var t:real;
begin
//Узнаем сколько же будет два в третьей степени
t:=ImportSqr(2,3);
Showmessage(FloatTostr(t));
end;

procedure TForm1.Button2Click(Sender: TObject);
var t:integer;
begin
//Узнаем сколько же будет 10+10
t:=ImportSumm(10,10);
Showmessage(IntTostr(t));
end;

end.

Ну вот, надеюсь хоть немного прояснил ситуацию :))


Исходники:   

Basic threads sample v.1.0

Этот пример показывает, как создавать потоки в Delphi и как с ними работать. Он не претендует на всеобъемлющее изложение материала, но кого-то сможет научить основным операциям: создавать потоки , запускать их, приостанавливать и возобновлять и изменять их приоритет.

Программа F2Drive 0.06 
Описание:
Сейчас модно таким образом подключать к компьютеру ящик на Gmail. Речь идет о виртуальном жестком диске. Однако ящик на гигабайтном «мыле» от Google есть не у каждого. Да и не каждый сможет эффективно использовать такой удаленный объем. Эта программа ни в коей мере не альтернатива Gmail. Тем не менее сделать из локальной папки «отдельный» диск иногда бывает необходимо. Так можно получить быстрый доступ к часто используемой директории. Вот с помощью программы F2Drive 0.06 вы легко, буквально одним кликом, можете сделать у себя на машине хоть сотню «дисков», главное, чтобы букв хватило. Интегрируется в контекстное меню директорий.
Исходник

Программа SwfToScr 0.8 
Описание:
У Вас есть красивые флэш ролики, такие что их так и хочется зделать заставкой? Иимея эту программу, Вы сможете превратить любой flash-ролик в заставку для windows. Программа позволяет вырезать ненужные моменты и оставить только самое красивое - теперь не страшно что для запуска красивой части требуется нажать кнопку "Play". Среди аналогов программу выделяет размер получившигося скринсейвера - он превышает размер ролика всего на 35kb!!! и при этом она совершенно бесплатна и с открытым исходным кодом. Если при открытии Flash ролика у вас все кнопки в программе, кроме Open и About просто серые, и на нмх невозможно нажать... то скорее всего у вас просто не обновлен flash-плеер в IE... обычно он обновляется сам при просмотре страничек с флеш-анимацией... Обновить его вручную вы сможете перейдя по этой ссылке.
Исходник


Интересные и полезные сайты по Delphi: Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.
http://www.noil.pri.ee/ - Здесь вы можете почитать статьи, скачать исходники и компоненты, пообщаться на форуме.
http://www.delphi.int.ru/ - Ресурс для Delphi-программистов, где каждый найдёт что-то полезное!
http://www.ExCode.ru - Программирование на высоком уровне
http://decoding.narod.ru - Сайт для Delphi-программистов со статьями автора, компонентами, FAQ, и другой полезной информацией.

Немного юмора:  :))

:)

 Пропала собака - емейл не дошел.

:)

И опять рекурсия...

:)

Чайники ЕЩЕ люди...

:)

Человеческая тупость измеряется в "легальных дистрибутивах Windows"...

:)

В Интеpнет-клуб вpывается взъеpошенный паpень с пистолетом:
- Это огpабление! 10 часов Интеpнета, быстpо!

:)

Табачный магазин.
Заходит лётчик: "Мне наши". Продавщица даёт ему "Ту-134".
Заходит космонавт: "Мне наши". Продавщица даёт ему "Космос".
Заходит программист: "Мне наши".
"Это какие же это ваши то ?"
"А что, по твоему Ява -- это остров что ли?"

:)

Стоит фидошник ну... у мавзолея, покачиваеться..
спpашивает пpоходящего мимо :
- и-де я ?
- в 5020.
- к чеpту подpобности, какая зона ?


Дружественные рассылки:

Рассылки Subscribe.Ru
Программирование на Delphi
Рассылка сайта Delphi coding


Все кто хочет изучить Delphi и реально научиться писать свои программы, ЦПИ "Эверест" поможет Вам.
Всё, что Вам нужно это компьютер и доступ к интернету - для получения уроков.

10 причин в пользу платного обучения в ЦПИ "Эверест"…

1. Когда Вы платите деньги- появляется дополнительный стимул против лени: надо учиться, ведь деньги уже уплачены….
2. Учась платно, получаете удобный для Вас график работы.
3. Весь необходимый справочный материал Вы получите в свое время и на русском языке.
4. Используя интернет в качестве бесплатной библиотеки, Вы получаете все ее минусы:

  • трата времени на поиск необходимого материала (а это потерянные деньги и время). А у Вас есть лишние время и деньги?;
  • отсутствие гарантии, что Вы "осилите" данный материал, ведь пишут его, в основном, не педагоги- профессионалы, а программисты- профессионалы, а они пишут для таких же, как они. А Вы программист- профессионал?
  • отсутствие системности в скачиваемом материале (ведь человек, писавший для Вас материал, не знает, чем Вы владеете). А Вы обладаете системой знаний по Delphi?;

5. Стоимость обучения одного месяца в ЦПИ "Эверест" сравнима с ценой хорошей книги. Но часто ли Вам попадались книги, рассчитанные именно на Вас. Мы же работаем индивидуально.
6. Автор книги или магазин не несет никакой ответственности за то, поняли ли Вы материал или нет, мы же закрепляем за каждым курсантом преподавателя, курирующего Вас.
7. Освоив программирование в Delphi - Вы освоите:

  • основы настоящего программирования- структурного и процедурного программирования ;
  • систему работы с базами данных и SQL- запросами, а это одно из самых перспективных направлений в программировании;
  • язык программирования ObjectPascal, что позволит Вам легко перейти, при желании, на С или Паскаль;
  • работу с компьютерной графикой;
  • при желании - основы низкоуровневого программирования ( Ассемблер).

8. А это значит, что …Мы предлагаем получить "высшее образование" - профессию программиста всего за 1 год и 144 доллара, любой ВУЗ попросит в 3 раза больше за один только семестр.
9. Вы получаете самый практический курс в сети, поскольку теория дается только тогда, когда она действительно необходима…
10. Учиться у нас легко и просто. Весь материал доступен и простым людям, не имеющим никогда дел с программированием….


По всем вопросам обращайтесь ко мне.

Если вы встретили в интернете интересный сайт или статью, да и вообще, что угодно связанное с Delphi, поделитесь ссылкой.
Если можете написать статью связанную с Delphi - присылайте с радостью выложу.
Давайте поможем друг другу!  Архив рассылки.

Предложения, критику и пожелания пишите на e-mail.


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

В избранное