Время от времени я наблюдаю вопросы с просьбой рассказать о процессе создания с помощью Delphi хранителя экрана, которого можно было бы выбрать с помощью панели управления (Control Panel / Desktop). После того, как я увидел несколько общих ответов, частично отвечавших на заданный вопрос, я решил создать данный совет и полностью посвятить вас в технологию создания хранителя экрана Windows от начала до конца. Приведенный ниже код позволяет создать предмет нашего разговора, а именно - простой хранитель экрана Windows.
Read more »
Filed in Графика by admin | Декабрь 27, 2007 | No Comments
Пасьянс косынка - сильнодействующий психотропный препарат для нейролингвистического зомбирования разработанный в секретной лаборатории КГБ ¦7708. Вызывает 100%-ное привыкание с первой дозы. Позволяет контролировать сознание косынкоманов, подавляет желание работать, вызывает состояние апатии и расслабленности. Побочные эффекты: редкие уколы совести (надо поработать), но проходит по мере увеличения дозы препарата.
// К заголовку RadialBlur(For OpenGL)
// Данный код работает правильно только, если в пректе 0 форм ,
// а сам код введен в DPR файл!
program RadialBlur;
uses
Windows,
Messages,
OpenGL;
const
WND_TITLE = ‘Radial Blur’;
FPS_TIMER = 1; // Timer to calculate FPS
FPS_INTERVAL = 1000; // Calculate FPS every 1000 ms
type
TVector = array[0..2] of glFloat;
var
h_Wnd: HWND; // Global window handle
h_DC: HDC; // Global device context
h_RC: HGLRC; // OpenGL rendering context
keys: array[0..255] of Boolean; // Holds keystrokes
FPSCount: Integer = 0; // Counter for FPS
ElapsedTime: Integer; // Elapsed time between frames
Read more »
Filed in Графика by admin | Ноябрь 27, 2007 | No Comments
Каким обpазом выбиpать pазмеp шpифта, т.к. все мои стpадания по выбоpyпаpаметpов шpифта в CreateFont() никак не отpажались на его pазмеpе. Все что я пpидyмал, это юзать glScale(), но в этом слyчае полyчаем плохое качество (по сpавнению с той-же Воpдой) пpи малом pазмеpе символов
Вот часть работающего примера на Си (переведенного мною на Паскаль (АА)).
procedure GLSetupRC(pData: Pointer)
//void GLSetupRC(void *pData)
//{
var
// HDC hDC;
hDC: HDC;
// HFONT hFont;
hFont: HFONT;
// GLYPHMETRICSFLOAT agmf[128];
agmf: array[0..127] of GLYPHMETRICSFLOAT;
// LOGFONT logfont;
Read more »
Filed in Графика by admin | Ноябрь 27, 2007 | No Comments
Идет кинофильм, какой то душераздирающий триллер. Главная героиня в ажурном нижнем белье медленно продвигается по темному коридору. Музыка нагнетает обстановку. Главная героиня подходит к двери, протягивает руку, что бы открыть ее … И тут истошный крик из зала:
- Сохраняйся, дура!!! Сохраняйся!!!
Содержимое контекста
Итак, если необходимо осуществить вывод на поверхность чужого окна, надо, получив ссылку на это окно, получить ссылку на контекст устройства, связанную с этим окном, после чего можно рисовать на чужом окне. Когда мы работаем с OpenGL, мы создаем контекст воспроизведения OpenGL, связанный с контекстом устройства нашего окна, далее обращаемся к функциям OpenGL, отрабатывая которые, OpenGL строит картинку на поверхности нашего устройства.
То есть схема здесь такая - приложение отдает команды машине OpenGL, получая результат на поверхности своего окна. Такая архитектура называется “клиент - серверной”, в роли клиента выступает наше приложение, в роли сервера - система OpenGL. Задача сервера - отрабатывать команды клиента. В принципе, сервер может располагаться и не на нашем компьютере, а удаленно, возможно и за тысячи километров от нас. Наше приложение должно передать серверу требуемые для работы данные - контексты и команды на языке сервера. Также важно понимать, что основную работу выполняет не наше приложение, а сервер. Наше приложение лишь создает окно - платформу для работы сервера, и передает команды серверу. При грамотном подходе нет разницы, какими средствами мы спроектировали приложение - С или Delphi, скорость воспроизведения целиком зависит от производительности сервера - машины OpenGL. Мы выбрали в качестве средства разработки приложений именно Delphi за выдающуюся скорость компиляции и обаятельность концепций.
Read more »
Filed in Графика by admin | Ноябрь 27, 2007 | No Comments
{
Before importing an image (jpg) into a database,
I would like to resize it (reduce its size) and
generate the corresponding smaller file. How can I do this?
Load the JPEG into a bitmap, create a new bitmap
of the size that you want and pass them both into
SmoothResize then save it again …
there’s a neat routine JPEGDimensions that
gets the JPEG dimensions without actually loading the JPEG into a bitmap,
saves loads of time if you only need to test its size before resizing.
}
uses
JPEG;
type
TRGBArray = array[Word] of TRGBTriple;
pRGBArray = ^TRGBArray;
{—————————————————————————
———————–}
Read more »
Filed in Графика by admin | Ноябрь 27, 2007 | No Comments