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

Рассылка сайта Delphi coding

  Все выпуски  

Рассылка сайта Delphi coding 'Рассылка сайта Delphi coding'


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

Рассылка сайта Delphi Coding

Выпуск от 19 Октября 2005 года. Noil.pri.ee

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

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

Желаем Вам приятного чтения.


Архивы статей по различным тематикам Delphi

Delphi и XakepСкачать (Статей: 3)
Графика в DelphiСкачать (Статей: 6)
Работа с системойСкачать (Статей: 9)
Защита данныхСкачать (Статей: 2)
РазноеСкачать (Статей: 9)
Работа со звукомСкачать (Статей: 5)
АлгоритмыСкачать (Статей: 14)
WinApiСкачать (Статей: 3)
KOL и MCKСкачать (Статей: 10)
Программирование игрСкачать (Статей: 6)
Delphi и ActiveXСкачать (Статей: 4)
Delphi НачинаюшимСкачать (Статей: 2)
ОтладкаСкачать (Статей: 2)
COBRA и COMСкачать (Статей: 3)

Коллекции статей

Коллекция статей № 1Скачать (Статей: 20)
Коллекция статей № 2Скачать (Статей: 20)
Коллекция статей № 3Скачать (Статей: 20)
Коллекция статей № 4Скачать (Статей: 20)

Последнии файлы

Get Symbols Table v.1.0 в категории Система

Приложение позволяет показать шрифты Windows в различных таблицах шрифтов

Полная функциональность.
Исходный код.
Пример приложения.


Поддерживаемые версии: D3 D4

Автор: Max Zabalov

Подробнее... Скачать


Desktop Sprite Demo v.1.51 в категории Система

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

Полная функциональность.
Исходный код.
Пример приложения.


Поддерживаемые версии: D2 D3 D4

Автор: Nelson Chu

Подробнее... Скачать


Desktop Icons Positon v.1 в категории Система

Небольшая программа (исходный код включён) для установки/перемещения иконок на рабочем столе. Только для Windows XP

Автор выражает благодарность Антонии Баратта и Александру Краменко за предоставленные модули.

Полная функциональность.
Исходный код.


Поддерживаемые версии: D7

Автор: William Bouter

Подробнее... Скачать


DLL Inject v.1.01 в категории Система

Пример показывает как вставить свою DLL в какой-либо процесс, используя VirtualAllocEx и CreateRemoteThread.

Пример может быть использован для добавления дополнительной функциональности существующему приложению. Также может быть адаптирован для перехвата вызова API функций.

Из-за того, что пример использует несколько NT функции, он недоступен в Windows 9X

Полная функциональность.
Исходный код.


Поддерживаемые версии: D2 D3 D4 D5 D6 D7

Автор: Rezmond

Подробнее... Скачать


Создание интерактивных Сервисов для Windows NT в категории Система

Создание интерактивных Сервисов для Windows NT
Цель этой работы описать некоторые аспекты создания сервисов для Windows NT в Delphi. Я не буду касаться фактов, которые уже описаны другими авторами. Я постараюсь рассказать о не очевидных и недостаточно хорошо описанных вещах.

А именно:
∙ Получение доступа к рабочему столу
∙ Создание гибридных приложений, которые могут запускаться как сервис или как обычное приложение
∙ Несколько полезных советов по создание NT сервисов

Полная функциональность.
Исходный код.


Поддерживаемые версии: D4 D5 D6

Автор: M. Jastrebtsoff

Подробнее... Скачать


Restorator2005 в категории Программы

Это самая популярная программа для редактирования программ. Поддерживает большое количество файлов - от scr (скринсейвер) до dll библиотек. Возможность создания патчей для применения Ваших изменений без использования ресторатора. Редактирует почти все внутренние ресурсы. Редактирование ресурсов идет в специальном окне. Ресурсы отображаются стандартно, как текстовые файлы. Встроенная система поиска ресурсов. На сайте производителя есть русская версия программы. Недостатки тоже есть - в окне не редактируются файлы больше 64 kb из за использования memo-edit.

Используя эту программу вы сможете:

  • Узнать, что находиться внутри программ
  • Получить доступ к иконкам, курсорам, картинкам, звукам, которые находятся внутри exe файлов, с возможностью редактирования и замены
  • Менять значения в текстовых блоках
  • Создавать патчи, вносящие в файлы ваши изменения


Функция редактирования, замены и создания патчей доступна только после регистрации (67$). Есть скидки студентам.

За добавление этого файла благодарим пользователя Gensun

Ссылка на обсуждение на форуме

Подробнее... Скачать


Control Panel Demo v.1.0.0 в категории Система

Документированный демо проект, который показывает как создавать свои собственные аплеты для Windows Control Panel.

Полная функциональность.
Исходный код.

Поддерживаемые версии: D2 D3 D4

Автор: Troels Jakobsen

Подробнее... Скачать


Port95 v.1.00 в категории Hardware

Delphi модуль и пример для доступа к портам ввода/вывода. Выполнен в традиционном для Pascal стиле. Только для Win9X.

Полная функциональность.
Исходный код.

Поддерживаемые версии: D2 D3 D4

Автор: Vlad Sharnin

Подробнее... Скачать


K-Keyboard v.1.0 в категории Hardware

Используя, этот пример Вы сможете изменить значение любой клавиши, или связать её с определенным приложением/словом, или заблокировать клавишу.

Полная функциональность.
Исходный код.
Пример приложения.

Поддерживаемые версии: D4 D5 D6 D7

Автор: Marco Ronzano

Подробнее... Скачать


CPUSpeed v.1.00 в категории Hardware

CPUSpeed измеряет скорость центрального процессора. Работает только с процессорами Pentium или более новыми.

Полная функциональность.
Исходный код.

Поддерживаемые версии: D2 D3

Автор: Cybermagic

Подробнее... Скачать


Статья

Автоматическая обработка ошибок

Введение

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

У всех

Типичная обработка ошибки заключается в том, чтобы обрамить блоки кода в конструкции try..except или try..finally. В общем, все по учебнику. Тем не менее, многие попросту не делают этого, так как им недосуг или обработка исключений оставляется "на потом". Когда подходит время сдачи проекта, нередко такие программисты начинают спешно латать дыры, что может дать не только положительный эффект, я имею ввиду появившуюся у программы обработку исключений, но и отрицательный. Дело в том, что обработка исключительных ситуаций тоже является частью кода, а внесение нового кода может повлечь за собой и внесение новых ошибок.

Избавиться от сложившейся ситуации не так трудно, как может показаться на первый взгляд. Почти все становится ясно, когда вспоминаешь про объект Application и его свойство OnException.
Не у всех

Как вы уже, наверное, догадались, свойство Application.OnException является глобальным обработчиком событий приложения. Перед тем как описать метод использования этого свойства, давайте договоримся, что у нас есть объект класса TgsCatcher (именно его я и описываю в данной статье), у которого есть метод TgsCatcer.Catcher, который и будет обработчиком ошибок приложения. Простейший вариант вышесказанного выглядит следующим образом:

Листинг 1. Код Delphi/Pascal
unit gsCatcher;

//**! ----------------------------------------------------------
//**! This unit is a part of GSPackage project (Gregory Sitnin'‌s
//**! Delphi Components Package).
//**! ----------------------------------------------------------
//**! You may use or redistribute this unit for your purposes
//**! while unit'‌s code and this copyright notice is unchanged
//**! and exists.
//**! ----------------------------------------------------------
//**! (c) Gregory Sitnin, 2001-2002. All rights reserved.
//**! ----------------------------------------------------------

{***} interface {***}

uses Classes, SysUtils, JPEG;

type
TgsCatcher = class(TComponent)
private
FEnabled: boolean;
FGenerateScreenshot: boolean;
FJPEGScreenshot: boolean;
FJpegQuality: TJPEGQualityRange;
FCollectInfo: boolean;
Fn: TFilename;
procedure SetEnabled(const Value: boolean);
{ Private declarations }
protected
{ Protected declarations }
procedure EnableCatcher;
procedure DisableCatcher;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Catcher(Sender: TObject; E: Exception);
published
{ Published declarations }
property Enabled: boolean read FEnabled write SetEnabled
default False;
end;

procedure Register;

{***} implementation {***}

uses Windows, Forms, Dialogs, Graphics;

procedure Register;
begin
RegisterComponents('‌Gregory Sitnin'‌, [TgsCatcher]);
end;

{ TgsCatcher }
constructor TgsCatcher.Create(AOwner: TComponent);
begin
inherited;
end;

destructor TgsCatcher.Destroy;
begin
DisableCatcher;
inherited;
end;

procedure TgsCatcher.SetEnabled(const Value: boolean);
begin
FEnabled := Value;
if Enabled then EnableCatcher else DisableCatcher;
end;

procedure TgsCatcher.DisableCatcher;
begin
Application.OnException := nil;
end;

procedure TgsCatcher.EnableCatcher;
begin
Application.OnException := Catcher;
end;

procedure TgsCatcher.Catcher(Sender: TObject; E: Exception);
begin
{TODO: Write some exception handling code}
end;

end.


Это компонент, который умеет подключаться и отключаться от обработчика Application.OnException при помощи установки свойства Enabled. В подключенном состоянии все возникшие в приложении исключительные ситуации перенаправляются методу TgsCatcher.Catcher, который с этими исключениями, пока, ничего не делает.

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

Реализация функций

Для начала, давайте снимем скриншот активного окна. Сделать это довольно легко. В секцию implementation подключаем модуль Graphics.

Лирическое отступление: Считается неплохим стилем, подключать модули в секцию implementation, если их информация требуется только в этой секции. Например, в секции interface я нигде не использовал ни одного класса или типа, который описан в модуле Graphics, поэтому и занес его в implementation.

После подключения вышеназванного модуля мы получили возможность работы с изображениями в формате BMP, то есть, мы можем описать объект класса TBitmap и получить в него снимок активного окна при помощи следующего вызова:

Листинг 2. Код Delphi/Pascal
bmp := Screen.ActiveForm.GetFormImage;


Сам объект класса TBitmap создавать нет необходимости, так как он будет автоматически создан вызываемым методом GetFormImage. Теперь нам хорошо бы было полученное изображение сохранить в файл, а для этого не плохо бы было назвать файл уникальным именем. Надо заметить, что в Windows, как и во многих операционных системах есть специальный механизм создания действительно уникальных имен файлов. Однако, имена файлов на выходе этих механизмов являются, по большей части, ничего не значащими наборами символов. Но суть этой технологии в уникальности, а это она делает. Мне же хотелось, чтобы имена несли смысловую нагрузку. Было бы здорово, если бы в них было записано имя исполняемого файла, имя формы, дата и время возникновения ошибки. Решается данная задача вот таким образом (Fn - переменная строкового типа):

Листинг 3. Код Delphi/Pascal
Fn := ExtractFilename(Application.ExeName)+'‌_'‌+
Screen.ActiveForm.Name+
FormatDateTime('‌_ddmmyyyy_hhnnss'‌,now)+
'‌_debug'‌;


Таким образом, мы получили генератор имен файлов, создающий имена, очень похожие на "PROJECT1.EXE_Form1_22092002_171956_debug.bmp", только без расширения. Теперь, запишем изображение в файл.

Листинг 4. Код Delphi/Pascal
bmp.SaveToFile(fn+'‌.bmp'‌);


Итог - любое исключение в приложении вызовет автоматическую запись скриншота в файл формата BMP. Но, такой графический формат имеет одну неприятную особенность, дельфи умеет работать только с несжатыми файлами, которые благодаря этому имеют большой объем, а мне бы хотелось посылать эти файлы автоматически по e-mail, чтобы всегда быть в курсе ошибок программы.

К счастью, фирма Borland бесплатно приложила к Delphi библиотеку работы с изображениями в формате JPEG. Поищите на компакт-диске с дельфи или на своем жестком диске в каталогах дельфи файлы, начинающиеся с букв "jpeg".

Таким образом, подключаем модуль JPEG после модуля Graphics и пишем вот такой код:

Листинг 5. Код Delphi/Pascal
procedure TgsCatcher.DoGenerateScreenshot;
var bmp: TBitmap;
jpg: TJPEGImage;
begin
bmp := Screen.ActiveForm.GetFormImage;
begin
jpg := TJPEGImage.Create;
jpg.CompressionQuality := 100;
jpg.Assign(bmp);
jpg.SaveToFile(fn+'‌.jpg'‌);
FreeAndNil(jpg);
end;
FreeAndNil(bmp);
end;


Теперь из метода Catcher достаточно просто вызвать метод DoGenerateScreenshot и автоматическое сохранение скриншота в формате JPEG с качеством 100% вам обеспечено.

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

Листинг 6. Код Delphi/Pascal
function TgsCatcher.CollectUserName: string;
var
uname: pchar;
unsiz: cardinal;
begin
uname := StrAlloc(255);
unsiz := 254;
GetUserName(uname,unsiz);
if (unsiz > 0) then
Result := string(uname) else
Result := '‌n/a'‌;
StrDispose(uname);
end;


Эта функция запросит у системы имя пользователя при помощи функции API GetUserName, и вернет строку "n/a", если имя пользователя получить не удалось.

Листинг 7. Код Delphi/Pascal
function TgsCatcher.CollectComputerName: string;
var
cname: pchar;
cnsiz: cardinal;
begin
cname := StrAlloc(MAX_COMPUTERNAME_LENGTH + 1);
cnsiz := MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(cname,cnsiz);
if (cnsiz > 0) then
Result := string(cname) else
Result := '‌n/a'‌;
StrDispose(cname);
end;


Эта функция аналогична функции CollectUserName, только запрашивает имя компьютера.

Листинг 8. Код Delphi/Pascal
procedure TgsCatcher.DoCollectInfo(E: Exception);
var sl: TStringList;
begin
sl := tstringlist.Create;
sl.add('‌--- This report is created by automated '‌+
'‌reporting system.'‌);
sl.add('‌Computer name is: ['‌+ComputerName+'‌]'‌);
sl.add('‌User name is: ['‌+UserName+'‌]'‌);
sl.add('‌--- End of report ----------------------'‌+
'‌-----------------'‌);
sl.SaveToFile(Fn+'‌.txt'‌);
end;


Последняя процедура создает объект класса TStringList, наполняет его информацией, которую надо записать и сохраняет в файл, с именем, аналогичном имени файла со скриншотом. Остается только прописать вызов этого метода в процедуре Catcher.

Заключение

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

Автор: Григорий Ситнин 2003

Посетите наши форумы:

Delphi, Kylix, Pascal
Delphi - общие вопросы | WinAPI | Работа с сетью | Delphi и Multimedia | Базы данных | Работа с oc Windows | Курилка | Паскаль | Delphi.Net | Kylix

Языки программирования
C++ | Java | .NET | Ассемблер

Web Технологии
Php | Perl | Asp | Html

Програмное обеспечение
Софт для Windows | Oc Windows | Linux | BSD

Разное
Железо | Взлом и защита | Периферия | Внекомпьютерная жизнь | Объявления

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

Рассылки Subscribe.Ru
Интернет для Delphi-программиста

На этом позвольте проститься с Вами и пожелать удачи. Свои замечания и предложения отправляйте на е-майл, указанный ниже. С уважением, Виталий (NoilTeam@gmail.com)

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

В избранное