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

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


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

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

Выпуск : № 52


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


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

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


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


Вопрос № 125 задаёт:  illuha Ответить
Первый вопрос такой: Программа сканирует реестр, и когда дохожу к ключу HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\lanmanserver\Shares, то функция RegQueryInfoKey выдает, NumSubKeys=1, а MaxSubKeyLen=0 и дальше пошла ошибка получения имени ключа. В чем причина? Открываю RegOpenKeyEx с атрибутом KEY_READ.

А вот и второй: В некоторых ключах RegOpenKeyEx выдает ошибку 2 или 5, хотя в ключе присутствуют данные, почему?

Ответы.

Вопрос № 124 задаёт: Levtal   Ответить
Я знаю, как получить список открытых в системе окон (т.е. их хэндлы и текст заголовков). А как для каждого из этих окон (т.е. по хэндлу окна) получить информацию о полном пути к тому файлу программы, которая создала окно?
Отвечает:  Dynamic
1.
 
uses tlHelp32;
 
function GetFilePath(const WinH: THandle): String;
var
SnapshotH: THandle;
PE32: TProcessEntry32;
PrId: Cardinal;
begin
 
Result := '';
SnapshotH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapshotH = -1 then Exit;
PE32.dwSize := SizeOf(PE32);
GetWindowThreadProcessID(WinH, PrId);
if Process32First(SnapshotH, PE32) then
repeat
 if PE32.th32ProcessID = PrId then begin
  Result := PE32.szExeFile;
  Break;
 end;
until not Process32Next(SnapshotH, PE32);
CloseHandle(SnapshotH)
end;
 
2.
 
function GetAppFileName (hWnd: THandle) :string;
var dPID: dWord;
    hHandle: THandle;
begin
  GetWindowThreadProcessId(hWnd, @dPID);
  SetLength (Result, MAX_PATH);
  hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, dPID);
  if GetModuleFileNameEx (hHandle, 0, PChar (Result), MAX_PATH) > 0
    then SetLength (Result, StrLen (PChar (Result)));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var Handle :THandle;
begin
  Handle := FindWindow (nil, 'Microsoft Excel - Книга2');
  Edit1.Text := GetAppFileName (Handle);
end;


Статья:    "Где искать DsgnIntf.dcu, DesignIDE.dcu и Proxies.pas?" Автор: Dynamic 

На часть этого вопроса, касающуюся DsgnIntf.dcu ответ прост и не вызывает затруднений в реализации. Модуль DsgnIntf.dcu достается "в наследство" с компонентами, разработанными в версии Дельфи ниже шестой. Он содержал интерфейсы и базовые классы, их реализующие, для разработки дизайнеров компонент и редакторов свойств, а также редакторы и дизайнеры для стандартных типов свойств: Integer, Set, Enum, String, TStrings, Variant, TComponentName и т.д., и элементы заимодействия со средой разработки, такие как двойной щелчок на компоненте или выбор соответствующего пункта контекстного меню. Начиная с шестой версии Дельфи этот модуль был разделен на два самостоятельных модуля: DesignIntf и DesignEditors, в первый из которых были перемещены интерфейсы и базовые классы редакторов и дизайнеров, а во второй - редакторы стандартных типов свойств. 

Поэтому теперь, чтобы адаптировать компонент, разработанный, допустим, в четвертой версии Дельфи, в разделе USES необходимо заменить ссылку на модуль DsgnIntf ссылками на модули DesignIntf и DesignEditors. 

Большая универсальность достигается при использовании директив условной компиляции, таких как {IFDEF}..{ELSE}..{ENDIF}, где в качестве условия компиляции можно проверить версию компилятора: 

{IFDEF VER120}
uses DsgnIntf;
{ELSE}
uses DesignIntf, DesignEditors;
{ENDIF}

В этом случае для компилятора Дельфи 4 (VER120) будет использоваться строка uses DsgnIntf, иначе - uses DesignIntf, DesignEditors;. 

Ниже приведен список предопределенных в Дельфи символов условной компиляции, определяющих версию компилятора: 

VER80 -- Delphi 1
VER90 -- Delphi 2
VER93 -- C++Builder 1
VER100 -- Delphi 3
VER110 -- C++Builder 3
VER120 -- Delphi 4
VER130 -- Delphi 5
VER140 -- Delphi 6
VER150 -- Delphi 7

Однако чаще всего одной подмены ссылок оказывается недостаточно и компиляция компонента прерывается с грозным сообщением, что IDE не может отыскать DesignEditors.dcu или Proxies.pas. Первым делом программисты, впервые с этим столкнувшиеся, пытаются отыскать эти файлы в каталоге установки Дельфи, потом на диске с дистрибутивом, и, наконец, расширяют круг поиска на весь Интернет. Решение в итоге находится, но большинство программистов, в особенности начинающих, оно мало удовлетворяет. Самый распространенный ответ: "Просто реорганизуйте ваш проект на использование runtime пакетов и добавьте "DesignIDE" к вашему списку runtime пакетов.", мягко говоря, слишком лаконичен, чтобы внести в дело ясность. 

Итак, по-порядку. 

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

Но за все приходится платить: значительная часть кода компонента, облегчающая программисту процесс разработки программы, попадает в итоге в исполняемый файл, увеличивая его объем. Частичным выходом из этого положения стало решение разработчиков Дельфи некоторую часть кода, используемую исключительно при разработке, но не требующуюся для функционирования самой программы, размещать отдельно от компонента. 

Эта часть компонента, включающая редакторы свойств и дизайнеры, а также всевозможные эксперты IDE, получила название интерфейса времени разработки (Design-time interface). Часть кода компонента, отвечающая за его функциональность, относится к интерфейсу времени исполнения (Run-time interface). Строго говоря, к интерфейсу времени разработки можно отнести также свойства и события, объявляемые в секции published компонента и для которых генерируется дополнительная информация о типе (RTTI - Run time type information), позволяющая редактировать их в Инспекторе объектов, но эти самые свойства и события используются и при работе программы, то есть относятся в то же время и к интерфейсу времени исполнения. Можно сказать, что published свойства и события относятся к интерфейсу разработчика (Developer interface), объединяющему оба вышеописанных интерфейса. 

На основании приведенной информации, мы и можем провести предлагаемую в совете "реорганизацию" проекта. Для этого необходимо разделить проект как минимум на 2 пакета: в одном будет сосредоточена основная функциональность компонента (класс компонента и реализация его методов, а также процедура регистрации), во втором - функциональность компонента, определяющая его поведение в IDE (редакторы свойств, дизайнер, процедуры их регистрации). Причем во второй пакет в раздел USES необходимо добавить ссылку на первый пакет, так как процедура регистрации редактора компонента потребует указать тип компонента. 

Для компиляции первого пакета больше препятствий нет, но во втором нам необходимо будет предпринять еще ряд шагов. Во-первых, необходимо указать компилятору, что данный пакет должен использоваться только во время разработки программы в IDE Дельфи и не должен включаться в выходной файл. Для этого откроем окно опций проекта (выбором пункта меню Proect|Options, нажатием сочетания клавиш Shift+Ctrl+F11 или кнопки Options на панели инструментов редактора пакета), на вкладке "Description" ("Описание") в списке "Usage Options" ("Опции Использования") необходимо выбрать пункт "Designtime only" ("Только для времени проектирования"). Закрываем окно нажатием копки "Ok", чтобы сохранить изменения. 

В разделе Uses модуля DesignEditors присутствует сссылка на модуль Proxies, но ни в виде скомпилировнного DCU-файла, ни в виде исходного PAS-файла вы его не найдете, так как он поставляется только в виде кода, включенного в файл DesignIde.DCP (DCP - Delphi Compiled package, но мне попадались и такие расшифровки: Delphi Collection Package, Delphi Component Package). Это вызвано лицензионным ограничением Borland® на использование Design-time пакетов вне среды Дельфи. Чтобы включить пакет DesignIde.DCP в наш проект, можно в окне редактора щелкнуть правой кнопкой мыши на пункте "Requires" ("Требуются"), в открывшемся меню выбрать "Add...", перейти в каталог $(Delphi)\Lib, найти и выбрать файл designide.dcp, после чего закрыть окно нажатием кнопки "Ok". Вы увидите, что выбранный модуль добавился в секцию "Requires" нашего проекта. 

Теперь можно компилировать и регистрировать пакет в среде Дельфи: все нестандартные редакторы, используемые нашим компонентом, будут в нее интегрированы. Соответственно, при распространении компонента к архиву, помимо основного пакета, должен быть приложен и пакет с вашими редакторами. 

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

Желаю удачи, Dynamic.


Модуль  

AesLib v.1.1

AesLib v.1.1 это модуль для шифрования по алгоритму AES от Brian Gladman.

Особенности:
  1. Проверка пароля
  2. Создание «опознавательного» кода
  3. Шифрование в потоке
  4. Расшифровка в потоке
Исходный код примера включён в архив
Компоненты  

ColorPickerButton 1.2

Альтернативная кнопка для выбора цвета.

JanButtonsV

набор красивых кнопок различных форм

CaptionButton

кнопка в заголовке окна

Animated Menus

это набор красивых меню. Много скинов

Animation Effect v2.1.1

анимационные эффекты для окон и диалогов +crack и пример

THttpScan v4.1

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

SynEdit

компонент позволяет выполнять подсветку синтаксиса различных языков (от паскаля до php). Подборка примеров позволяет быстро освоить применение компонентов. (с примерами)


Интересные и полезные сайты по Delphi: Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.
http://www.noil.pri.ee/     - Здесь вы можете почитать статьи, скачать исходники и компоненты, пообщаться на форуме.
http://www.delphi.int.ru/  - Ресурс для Delphi-программистов, где каждый найдёт что-то полезное!
http://www.ExCode.ru     - Программирование на высоком уровне
http://decoding.narod.ru - Сайт для Delphi-программистов со статьями автора, компонентами, FAQ, и другой полезной информацией.
http://www.p-lib.pp.ru/    - На сайте находится множество статей по Visual C++, Visual Basic, ASP.NET/ASP, Delphi, Java, Базам Данных, 
PHP, Perl и т. д. Кроме того есть каталог сайтов, свежие компьютерные новости, софт, книги и многое другое.

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

:)

Чайник - это человек, который, наткнувшись на проблему, начинает громко свистеть.

:)

Сисадмин плюнул в монитор и растер слюни рукавом. "Обнаружено новое
оборудование - Чистый монитор", радостно сообщила винда.

:)

угу... И память о тебе навсегда останется в наших сырцах!

:)

Умерла мышка, остыл ее коврик...

:)

-Как размножается Microsoft?
-Делением.

:)

Звoнoк Юзера (Ю) в tech support фирмы (скажем Datacom) прoизвoдящей
блoки питания:
Ю- Дoбрый день у меня из блoка питания идет дым, чтo делать?
Сoтрудник (С) - Вам нужен нoвый блoк питания.
Ю - Нет не нужен, мне нужнo чтo бы из старoгo не шел дым.
С- Вы меня навернoе не пoняли нo Вам нужен нoвый блoк питания.
Ю- Зачем мне нoвый, Вы прoстo скажите чтo нужнo сделать чтo бы из
старoгo дым не шел.
С- Наберите в autoexec'e стрoку no smoke...
Прoхoдит 5 минут.
Ю- Не рабoтает.
С- Значит Вам нужен нoвый блoк питания.
Ю- Нет мне нужнo чтo бы из старoгo не шел дым.
С- У Вас Винды стoят?
Ю- Да.
С - Ок. Звoните в tech support Microsoft..там все oбъяснят..
Через 15 минут...
Тoт же Юзер - Дoбрый день, мне нужен нoвый блoк питания.
С (удивленнo) - Эээ... а мoжнo пoинтресoваться... чтo Вам сказали в
Microsoft???
Ю- Оказывается все былo oчень прoстo: кoманда no smoke не пoдхoдит к
мoему блoку питания...


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

Рассылки 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
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное