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

Программирование на Delphi

  Все выпуски  

Программирование на Delphi #31


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

Программирование на DELPHI
Выпуск #31 (18 сентября 2005 г.) 

Разделы сайта:

Новости сайта
Система "Эксперт"
Вопросы и Ответы

Отправить вопрос
Файловый архив
Статьи
Компоненты
Plug-in's
Документация
Исходники
Изображения
Игры
Программы
Форум
Гостевая книга
F.A.Q.
Архив рассылки
Каталог сайтов
Обратная связь
Хостинг



Связь:

Администратор
Система "Эксперт"
Информация


Доброго времени суток , уважаемые читатели!

Подведём результаты опроса:

Нужна ли нашей рассылке web-форма отправки ответов на вопросы?

Да, это необходимо - 8 голосов.

Нет, по почте удобнее - 23 голоса.

Гм! Не ожидал, что такие формы никому не нужны. Впрочем, посмотрим... Быть может и сделаем - просто, чтобы было... :)

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

Изменение иконки другого exe-файла

Управление WinAmp'ом

Создание заставки

Программная смена иконки самого EXE-шника

Процесс копирования

Balloon Message

Экспорт в Word

Ждём Вас на нашем форуме!

До встречи!

Разделы рассылки:

Авторское слово
Новые вопросы
Ответы на вопросы
Статья по Delphi
Файловый архив
Друзья
Юмор


Количество читателей рассылки: 3272.


Подписка на рассылку:


Лидеры по количеству баллов:


Место
Имя
Баллы
Статус
1
Feniks
281
Практикант
2
Dron
224
Практикант
3
Iron Monk
200
Практикант
4
Ermakova Dasha
190
Практикант
5
Садовников Владимир
187
Практикант
6
Андрей Лучников
83
Эксперт: 9-ый класс
7
Igor Danilevych
81
Эксперт: 9-ый класс
8
VeroLom
71
Эксперт: 8-ой класс
9
Ершов Денис
63
Эксперт: 7-ой класс
10
mvp
55
Эксперт: 6-ой класс

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


Основные правила нашей рассылки:

1. Не присылайте ответов на вопросы вроде "да я не знаю" или "да/нет". Такие ответы не публикуются.
2. Вопросы, не касающиеся Delphi, не принимаются (для этого существуют другие рассылки).
3. Запрещено присылать вложенные файлы, объёмом выше установленного ограничения (ограничения указаны в правилах).
4. Не изменяйте тем присылаемых писем. Письма с "неправильными" темами не обрабатываются! Используйте текстовый (не HTML) формат писем. HTML-теги применяйте только в том случае, если Вы уже достигли статуса, где это разрешено (см. правила).


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


Вопрос #150 (автор вопроса: Андрей; вопрос отправлен: 08.09.2005 16:02):

Доброго времени суток всем! Поможите кто может! У меня есть база в ACCESS, в Дельфях(7) написана программка по её управлению. На основе данных базы идут вычисления (вычисляемые поля). ВОПРОС: Как сделать сортировку по вычисляемому полю? Можно ли данные из вычисляемого поля записать в таблицу? Спасибо! [Ответить на вопрос]


Вопрос #151 (автор вопроса: MaXXX; вопрос отправлен: 08.09.2005 18:39):

Как сделать бегущую строку с прозрачным фоном текста поверх всех окон, когда, допустим, смотришь фильм, во весь экран? [Ответить на вопрос]


Вопрос #152 (автор вопроса: Слава; вопрос отправлен: 09.09.2005 03:08):

Подскажите, пожалуйста, как объявлять свои собственые типы данных и работать с ними? [Ответить на вопрос]


Вопрос #153 (автор вопроса: sun rain; вопрос отправлен: 11.09.2005 18:12):

Ситуация: есть прокся, которая блокирует доступ к форуму, но можно получить доступ к нему введя вместо него IP адрес... Я смог написать программку на Delphi, которая при помощи стандартного компонента браузера грузила страницы форума, но без картинок и тем более нельзя было войти туда под логином. Как сделать чтоб все адреса (файлы, линки..), что этот "браузер" запрашивает у сервера, менялись на нужные мне и в итоге я видел все правильно? [Ответить на вопрос]


Вопрос #154 (автор вопроса: Алексей; вопрос отправлен: 13.09.2005 21:50):

Помогите начинающему. Изучаю Дельфи по рассылкам и статьям. Пытаюсь свернуть программу в трей. Все делаю по статье, но при компиляции строка "Shell_NotifyIcon(NIM_ADD,@no);" вызывает ошибку "Unsafe code only allowed in unsafe procedure" (Опасный код, только позволенный в опасной процедуре). Что это значит? И что делать? Дельфи 8-я версия. [Ответить на вопрос]


Вопрос #155 (автор вопроса: Ольга; вопрос отправлен: 14.09.2005 09:11):

Мне нужен компонент MNSMTP из закладки FastNet. На моей версии Delphi 7 нет такой закладки. Где его взять? Спасибо. [Ответить на вопрос]


Вопрос #156 (автор вопроса: Eugene; вопрос отправлен: 16.09.2005 12:49):

У меня такой вопрос. Есть на форме 6 Editor'ов. В пять из них юзер вводит числа, а в шестом, при щелчке на кнопке выводится ответ. Т.е. программа берет эти числа и выдает в шестой Editor ответ по формуле ((Edit1 * Edit2 * Edit3) - Edit4) / Edit5. Как все это осуществить? Заранее спасибо! [Ответить на вопрос]



Вопросы, на которые нет ответов:

Вопрос #78 (автор вопроса: Hires; вопрос отправлен: 20.02.2005 16:33):

Как получить скорость работы GPU и памяти видео карты? [Ответить на вопрос]


Вопрос #88 (автор вопроса: Sergey; вопрос отправлен: 15.03.2005 19:57):

Вопрос по TChart. Как осуществить привязку указателя мыши к линии LineSeries? И еще. По оси X - время (DateTime). Как "вытащить" значение Y в любой точке LineSeries? [Ответить на вопрос]


Вопрос #90 (автор вопроса: Nanny_Jagg; вопрос отправлен: 17.03.2005 07:56):

Как в DBGrid из библиотеки Ehlib 3.6 добавить Lookup-поле, чтобы оно действительно работало? Поле вроде сделано, но ключевое поле, оставленное рядом для контрола не меняется, по какому событию обработчик писать? [Ответить на вопрос]


Вопрос #105 (автор вопроса: Crazy_Jack; вопрос отправлен: 03.04.2005 14:44):

Как прочитать под WinXP MBR? [Ответить на вопрос]


Вопрос #131 (автор вопроса: YaricZ; вопрос отправлен: 21.05.2005 15:01):

У меня такой вопрос: я использую библиотеку KOL и MCK, но компонентов в этих библиотеках немного - только стандартные. Внимание - вопрос знатокам: возможно ли использование компонентов Delphi совместно с KOL? Если добавить обычный компонент из вкладки, к примеру, "стандартные" - программа не компилируется. И второй вопрос: если совместное использование KOL со стандартными компонентами Delphi невозможно, то где можно скачать аналог компонентов DataSource, ClientDataSet, DBGrid. DBEdit, DBMemo? На официальном сайте ничего нет. Заранее выражаю благодарность всем, кто сможет мне помочь. [Ответить на вопрос]


Вопрос #138 (автор вопроса: YaricZ; вопрос отправлен: 04.06.2005 21:47):

Как сделать анализатор звука (спадающие пики как в Winamp) ? [Ответить на вопрос]


Вопрос #144 (автор вопроса: Angen; вопрос отправлен: 03.07.2005 22:41):

Пишу программу "Редактор настроек Windows" наподобие "WinSEr". Подскажите, пожалуйста, как в свойствах "Пароли" под Win98 в закладке "Удаленное управление" программно добавить определенного пользователя или удалить его? [Ответить на вопрос]


Вопрос #149 (автор вопроса: Alexandr Prokhoda; вопрос отправлен: 04.09.2005 11:18):

Добрый день. Подскажите пожалуйста, каким образом программа (пишу в Delphi 5) может изменить параметры электропитания WindowsXP (или хоть какой-то)? Конкретно – время выключения монитора. Заранее благодарю, Александр Прохода. [Ответить на вопрос]

 


Ответы на вопросы.


Вопрос #145:
Здравстуйте, помогите, пожалуйста, с решением такого вопроса: Как мне сделать, чтобы при раскрытии одного из подпунктов моего попап-меню отображалость контекстное меню Проводника (например, как при щелчке правой кнопкой на файле)? И еще: Как сделать самому команды аналогичные Копировать, Вырезать, Отправить...? Заранее благодарю!

1. [Отвечает: #One, 10.09.2005 13:10]: По-поводу "Как сделать самому команды аналогичные Копировать, Вырезать, Отправить...?" есть книга М. Е. Фленова "Программирование в Delphi глазами хакера". Там в разделе 3.11. Работа с файлами и директориями стр.116-132 всё есть.

2. [Отвечает: Константин Ситников, 09.09.2005 06:31]: Очень непонятный вопрос Вы задаете. А почему бы просто не создать свое меню и снабдить его такими же командами, как в стандартном контекстном меню?

Про команды Вырезать, Копировать, Вставить: я на Delphi не программирую, но наверняка есть на Delphi обработчик буфера обмена. Стандартными командами Копировать и Вставить он наделен, а вот Вырезать уже можно состряпать... Надеюсь, понятно?

3. [Отвечает: Ершов Денис, 16.09.2005 14:50]: Проще всего добавить пункт в контекстное меню проводника можно в
подменю "Отправить(Send To)". Для этого нужно просто создать ярлык на вашу программу в каталоге "C:\Documents and
Settings\(ЮЗЕР)\SendTo". Тогда проводник будет запускать вашу программу с параметром содержащим имя файла. Так дело построено в The Bat. Более продвинутый способ добавить пункт к группе пунктов содержащих пункты Открыть, Редактировать, пункты управления архивами WinRAR'а и тд. Для этого необходимо создать и зарегистрировать в системе
COM-сервер поддерживающий интерфейсы IUnknown, IConextMenu, IShellExtInit.


Вопрос #146:
Есть программа, есть dll. Каким образом можно передать объект (класс) исходной программе dll, чтобы dll могла вызывать корректно его методы? Использование процедур и функций (не методов класса) не предлагать. Дело в том, что в программе создаётся только один экземпляр класса, который должен использоваться сообща dll и программой. Что-то у меня не сильно получается. Если можно, небольшой исходничек. Спасибо.

1. [Отвечает: Ершов Денис, 16.09.2005 15:25]: Абсолютно не вижу никаких проблем в передаче в DLL объекта как и
класса. Может я чего-то не так понял. Исходники.

Текст DLL:

library Shwlst;uses
SysUtils, Dialogs,
Classes;Procedure ShowList(Lst: TStrings; Cls: TClass); stdcall;
begin
ShowMessage(Cls.ClassName + #13#13 + Lst.Text);
end;exports
ShowList;{$R *.res}

begin
end.

Передается Объект и класс. Затем выводится имя класса и его данные.

Текст проекта ее использующий:

unit UnitTestDll;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationProcedure ShowList(Lst: TStrings; Cls: TClass); stdcall; external 'Shwlst.DLL';{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ShowList(Memo1.Lines, Memo1.Lines.ClassType);
end;

end.


Вопрос #147:
Подскажите, пожалуйста, как обработать комбинацию клавиш, например (Ctrl+Enter) через OnKeyDown? У меня получается обработать только Ctrl, либо только Enter.

1. [Отвечает: mvp, 08.09.2005 18:05]: procedure TForm1.onKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = vk_return) and (ssCtrl in Shift) then
begin
//нажат ctrl+Enter
end;
end;

Вот так определяется TShiftState:
TShiftState = set of (ssShift, ssAlt, ssCtrl,
ssLeft, ssRight, ssMiddle, ssDouble);
Что соответствует шифту, альту, контрлу, левой, правой, средней кнопки мыши соответственно. Последний параметр - двойной щелчёк мышки. Например, выполнить действия при нажатии alt+ctrl+enter+левая кнопка мышки:
procedure TForm1.onKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = vk_return) and ([ssCtrl, ssAlt, ssLeft] in Shift) then
begin
//нажаты
end;
end;

2. [Отвечает: Dron, 08.09.2005 19:34]: Можно ставить сразу несколько условий. В переменной Key хранится значение
клавиши, которая была нажата, а в переменной Shift - альтернативные
клавиши, которые были нажаты (Ctrl, Shift, Alt и т.д.). Для Вашего случая:
If (Key = VK_RETURN) And (Shift = [ssCtrl]) Then
Begin
...
End;

3. [Отвечает: dicking@rambler.ru, 08.09.2005 21:00]:if (ssCtrl in Shift) and (Key = VK_RETURN) then
YourAction;

4. [Отвечает: Тихонов Михаил, 09.09.2005 06:15]: Простейший пример:
Поместите на форму
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
и далее на событие Edit1KeyDown повесте следующую процедуру

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
begin
if (Shift = [ssCtrl]) then
Button1.SetFocus;
if (Shift = [ssAlt]) then
Button2.SetFocus;
end;
end;

по Ctrl+Enter - фокус из Edit1 будет передаваться на Button1 а
по Alt+Enter - фокус из Edit1 будет передаваться на Button2. ВСЕ!!!

5. [Отвечает: Науменко Ольга Геннадьевна, 09.09.2005 06:31]: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = VK_RETURN) then
ShowMessage('Нажали Ctrl+Enter');
end;

6. [Отвечает: Ermakova Dasha, 09.09.2005 14:24]: В OnKeyDown есть переменная Shift типа TShiftState, которая представляет собой массив нажатых функциональных клавиш. Имеем:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ssCtrl in Shift then
if key = VK_RETURN then
ShowMessage('Ctrl + Enter');
end;

7. [Отвечает: Igor Danilevych, 09.09.2005 19:13]: Вот так, если из функциональных клавиш нажата только контрол, т.е.
Shift+Ctrl+Enter не сработает.

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ([ssCtrl] = Shift) and (Key = VK_RETURN) then begin
. . .
end;
end;

А так и Ctrl+Enter и Shift+Ctrl+Enter сработает:

if (ssCtrl in Shift) and (Key = VK_RETURN) then begin

8. [Отвечает: #One, 10.09.2005 13:01]: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = VK_RETURN) and (ssCtrl in Shift) then
application.MessageBox('Ты нажал Ctrl+Enter','Ctrl+Enter',mb_IconInformation)
end;

9. [Отвечает: Yurchik, 12.09.2005 23:01]: procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) and (Shift = [ssCtrl]) then
Label1.Caption:= 'Ctrl+Enter has been pressed :)';
end;

10. [Отвечает: PiRAT, 17.09.2005 10:17]: Используй переменную Shift: TShiftState она принимает значения
хранящиеся в сонстантах
<..>
ssShift The Shift key is held down.
ssAlt The Alt key is held down.
ssCtrl The Ctrl key is held down.
ssLeft The left mouse button is held down.
ssRight The right mouse button is held down.
ssMiddle The middle mouse button is held down.
ssDouble The mouse was double-clicked.
<..>
Т.о. твой код должен выглядеть примерно так:
if (key = vk_return) and (ssCtrl in Shift) then ...

11. [Отвечает: Садовников Владимир, 08.09.2005 20:40]: Так кэшируй нажатие специальных клавиш. Используй также функцию OnKeyUp.

Например, нажали Ctrl, в OnKeyDown ты проверяешь, что это Ctrl и выставляешь какой-нибудь флаг (CtrlDown:=True);
Теперь отпустили Ctrl, срабатывает OnKeyUp, где ты проверяешь, что это Ctrl и убираешь флаг (CtrlDown:=False);

При нажатии другой клавиши просто смотришь на наличие флага CtrlDown.


Вопрос #148:
Здравствуйте! После установки Delphi 2005 Офис 2003 начинает некоректно работать. А именно Excel - после работы в нём, когда закрываешь, постоянно выскакивает окно, что произошла ошибка. Подскажите пожалуйста, можно ли это исправить?

1. [Отвечает: Константин Ситников, 09.09.2005 06:31]: Может сначала лучше установить Delphi, а потом Офис 2003??? Я ставил Deplhi после офиса, никаких ошибок не замечал.

2. [Отвечает: Лялин Александр Николаевич, 08.09.2005 19:34]: Попробуйте установить официальные патчи на обе пограммы.


Все вопросы и ответы на них Вы можете найти на нашем сайте в разделе "Эксперт": http://www.delphi.int.ru/modules/expert/.


Статья по программированию.

Конвертирование графических форматов (часть 1)

С помощью Delphi можно полноценно конвертировать графические форматы один в другой. Для работы с изображениями существует несколько предопределённых классов. Рассмотрим некоторые варианты конвертирования.

1. Конвертирование BMP в EMF.

Следующая несложная процедура конвертирует bmp-файл SourceFileName в emf-файл и располагает его в той же директории, что и исходный файл.

function bmp2emf( const SourceFileName: TFileName): Boolean;
var Metafile: TMetafile; MetaCanvas: TMetafileCanvas; Bitmap: TBitmap;
begin
Metafile := TMetaFile.Create;
try
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(SourceFileName);
Metafile.Height := Bitmap.Height;
Metafile.Width := Bitmap.Width;
MetaCanvas := TMetafileCanvas.Create(Metafile, 0);
try
MetaCanvas.Draw(0, 0, Bitmap);
finally
MetaCanvas.Free;
end;
finally
Bitmap.Free;
end;
Metafile.SaveToFile(ChangeFileExt(SourceFileName, '.emf'));
finally
Metafile.Free;
end;
end;

Пример вызова:

procedure TForm1.Button1Click(Sender: TObject);
begin
bmp2emf( 'C:\TestBitmap.bmp' );
end;

2. Конвертирование BMP в JPG.

Данная процедура выполняет такое конвертирование:

procedure TfrmMain.ConvertBMP2JPEG;
var
jpgImg: TJPEGImage;
begin
chrtOutputSingle.CopyToClipboardBitmap;
Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
jpgImg := TJPEGImage.Create;
jpgImg.Assign(Image1.Picture.Bitmap);
jpgImg.SaveToFile('TChartExample.jpg');
end;

В Uses необходимо добавить модули Jpeg и Clipbrd. В данном примере chrtOutputSingle - это объект TChart (страница Additional). Перед вызовом функции в буфере обмена должен находиться объект типа TBitmap.

3. Конвертирование BMP в WMF.

Данное конвертирование также не составляет труда:

procedure ConvertBMP2WMF (const BMPFileName, WMFFileName: TFileName);
var
MetaFile : TMetafile;
Bitmap : TBitmap;
begin
Metafile := TMetaFile.Create;
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(BMPFileName);
with MetaFile do
begin
Height := Bitmap.Height;
Width := Bitmap.Width;
Canvas.Draw( 0 , 0 , Bitmap);
SaveToFile(WMFFileName);
end;
finally
Bitmap.Free;
MetaFile.Free;
end;
end;

Пример использования: ConvertBMP2WMF( 'c:\mypic.bmp' , 'c:\mypic.wmf').

4. Обратное конвертирование: WMF в BMP.

Обратное конвертирование мало чем отличается от предыдущего:

procedure ConvertWMF2BMP (const WMFFileName, BMPFileName: TFileName);
var
MetaFile : TMetafile;
Bitmap : TBitmap;
begin
Metafile := TMetaFile.Create;
Bitmap := TBitmap.Create;
try
MetaFile.LoadFromFile(WMFFileName);
with Bitmap do
begin
Height := Metafile.Height;
Width := Metafile.Width;
Canvas.Draw( 0 , 0 , MetaFile);
SaveToFile(BMPFileName);
end;
finally
Bitmap.Free;
MetaFile.Free;
end;
end;

Использование: ConvertWMF2BMP('c:\mypic.wmf' , 'c:\mypic.bmp').

5. Конвертирование BMP в DIB.

Допустим, что файл хранится в формате BMP. Нужно его преобразовать в DIB и отобразить. Итак... Это не тривиально, но помочь нам смогут функции GetDIBSizes и GetDIB из модуля GRAPHICS.PAS. Приведу две процедуры: одну для создания DIB из TBitmap и вторую для его освобождения:

{ Преобразование TBitmap в DIB }

procedure BitmapToDIB(Bitmap: TBitmap;
var BitmapInfo: PBitmapInfo;
var InfoSize: integer;
var Bits: pointer;
var BitsSize: longint);
begin
BitmapInfo := nil ;
InfoSize := 0;
Bits := nil;
BitsSize := 0;
if not Bitmap.Empty then
try
GetDIBSizes(Bitmap.Handle, InfoSize, BitsSize);
GetMem(BitmapInfo, InfoSize);
Bits := GlobalAllocPtr(GMEM_MOVEABLE, BitsSize);
if Bits = nil then
raise
EOutOfMemory.Create( 'Не хватает памяти для пикселей изображения' );
if not GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapInfo^, Bits^) then
raise Exception.Create( 'Не могу создать DIB' );
except
if BitmapInfo <> nil then
FreeMem(BitmapInfo, InfoSize);
if Bits <> nil then
GlobalFreePtr(Bits);
BitmapInfo := nil;
Bits := nil;
raise ;
end;
end;


{ используйте FreeDIB для освобождения информации об изображении и битовых указателей }

procedure FreeDIB(BitmapInfo: PBitmapInfo;
InfoSize: integer;
Bits: pointer;
BitsSize: longint);
begin
if BitmapInfo <> nil then
FreeMem(BitmapInfo, InfoSize);
if Bits <> nil then
GlobalFreePtr(Bits);
end;

Создаем форму с TImage Image1 и загружаем в него 256-цветное изображение, затем рядом размещаем TPaintBox. Добавляем следующие строчки к private-объявлениям вашей формы:

{ Private declarations }
BitmapInfo : PBitmapInfo;
InfoSize : integer;
Bits : pointer;
BitsSize : longint;


Создаем нижеприведенные обработчики событий, которые демонстрируют процесс отрисовки DIB:

procedure TForm1.FormCreate(Sender: TObject);
begin
BitmapToDIB(Image1.Picture.Bitmap, BitmapInfo, InfoSize,
Bits, BitsSize);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeDIB(BitmapInfo, InfoSize, Bits, BitsSize);
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
OldPalette: HPalette;
begin
if Assigned(BitmapInfo) and Assigned(Bits) then
with BitmapInfo^.bmiHeader, PaintBox1.Canvas do
begin
OldPalette := SelectPalette(Handle,
Image1.Picture.Bitmap.Palette,
false);
try
RealizePalette(Handle);
StretchDIBits(Handle, 0 , 0 , PaintBox1.Width, PaintBox1.Height,
0 , 0 , biWidth, biHeight, Bits,
BitmapInfo^, DIB_RGB_COLORS,
SRCCOPY);
finally
SelectPalette(Handle, OldPalette, true);
end;
end;
end;


Это поможет вам сделать первый шаг. Единственное, что вы можете захотеть, это создать собственный HPalette на основе DIB, вместо использования TBitmap и своей палитры. Функция с именем PaletteFromW3DIB из GRAPHICS.PAS как раз этим и занимается, но она не объявлена в качестве экспортируемой, поэтому для ее использования необходимо скопировать ее исходный код и вставить его в модуль.

Продолжение следует...


Присылайте свои статьи по адресу info@delphi.int.ru с темой 'Articles' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки и на сайте. Также вы можете заполнить вот эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). Если статья находится в формате HTML, пожалуйста, не используйте формат текста Performatted.


Файловый архив.

Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел, будем очень признательны! Чтобы сделать это, пожалуйста, заполните форму на сайте. Новые файлы на сайте:

Название / описание файла
Категория
Объём
Ссылки
Browser - Программа, представляющая собой простейший браузер.
Исходники
11.5 Кб
Sky - Имитация звездного неба. Программа показывает основные созвездия и
положения планет солнечной системы в зависимости от даты.
Исходники
99 Кб
RegFType - Модуль, позволяющий ассоциировать любой тип файлов с каким-либо приложением.
Исходники
9.05 Кб

Чтобы перейти к разделу "Файловый архив" на сайте, нажмите на эту ссылку.


Дружественные сайты.

Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите наш баннер на своём сайте. Подробнее о том, как это сделать, можно прочитать на странице данного раздела на нашем сайте. Узнать о всех наших друзьях более подробно вы сможете на той же странице...


http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом.


http://www.visualbasic.noka.ru/ - Программирование на Visual Basic & Basic. На сайте Вы найдете множество примеров, статьи, исходники, ActiveX, а также многое другое!


http://www.sashook.nm.ru/ - Игры, коллекция флешек, обои и заставки, компьютерные приколы, картинки, тосты и алкогольные присказки, смешные истории и анекдоты.


http://www.ssgroup.fatal.ru/ - Delphi 39. Ресурс для программистов. Статьи, исходники, компоненты, учебники, справочники, FAQ, программы и многое другое.


http://www.hkdsoft.narod.ru/ - H.K.D. Soft - Программирование на Delphi, C/C++, Assembler, Pascal, Basic/VB/VBA/VBS. Компоненты, статьи, исходники, множество е-книг, форум. Бесплатный софт. Скачать программу GamesBase - базу данных по играм содержащую описания, скриншоты, коды, прохождения игр.


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

Рассылки Subscribe.Ru :: Программирование
Интернет для Delphi-программиста
X-Program ПО, новости сайта и программирование в Delphi7
Visual Basic для новичков и профессионалов
Поиск текстов, переводов и аккордов песен
   

 


Юмор.

Что я понял о жизни, играя в квесты.

Hадо брать все, что плохо лежит.

В карманах может поместиться несколько десятков вещей, включая стаканы с кофе,
телевизоры и домашних животных.

Деньги ничего не стоят. Если перед вами торговец бананами и вам нужен банан,
бесполезно совать ему мешок денег - он будет иметь с вами дело только за
статуэтку Будды из Гондураса.

Банан из предыдущего пункта нужен не для того, чтобы его съесть, а чтобы ваш
враг поскользнулся на шкурке.

Даже если у вас есть с собой пистолет, вам все равно придется устранять врага
с помощью шкурки от банана.

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

Путешествие на другой конец света занимает несколько секунд.

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

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

Коды сверхсекретных сейфов пишут на заборах и стенах туалетов.

Любая задача решается одним и только одним способом.

Все предопределено сценарием.

Автор: Юрий Нестеренко
http://yun.complife.ru/

:))


Пожалуйста, присылайте свои анекдоты по этой ссылке: info@delphi.int.ru и они обязательно будут опубликованы! Желательно на компьютерную тему.

Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу!
Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Количество подписчиков постоянно растёт и, наверняка, найдётся тот человек,
который поможет вам! На сегодня всё. До встречи через неделю!
Ведущий рассылки, Ерёмин Андрей.

Вы можете оказать помощь нашему проекту через систему WebMoney:
R760630419845
Z947123691104
Будем очень благодарны!

 

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

В избранное