Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Как создать disable'ный битмап из обычного (emboss etc)?
Nomadicсоветует:
CreateMappedBitmap() :-)
Один из параметров указатель на COLORMAP, в нем для 16 основных цветов делаешь перекодировку, цвета подберешь сам из принципа:
• все самые яркие → в GetSysColor(COLOR_3DLIGHT);
• самые темные → GetSysColor(COLOR_3DSHADOW);
• нейтральные, которые бyдyт прозрачными → GetSysColor(COLOR_3DFACE);
Так на самом деле вот как делается данная задача:
procedureTform1.aaa(bmpFrom, bmpTo:Tbitmap);
var
TmpImage,Monobmp:TBitmap;
IRect:TRect;
begin
MonoBmp := TBitmap.Create;
TmpImage:=Tbitmap.Create;
TmpImage.Width := bmpFrom.Width;
TmpImage.Height := bmpFrom.Height;
IRect := Rect(0, 0, bmpFrom.Width, bmpFrom.Height);
TmpImage.Canvas.Brush.Color := clBtnFace;
try
withMonoBmp do begin
Assign(bmpFrom);
Canvas.Brush.Color := clBlack;
ifMonochrome then begin
Canvas.Font.Color := clWhite;
Monochrome := False;
Canvas.Brush.Color := clWhite;
end;
Monochrome := True;
end;
withTmpImage.Canvas do begin
Brush.Color := clBtnFace;
FillRect(IRect);
Brush.Color := clBlack;
Font.Color := clWhite;
CopyMode := MergePaint;
Draw(IRect.Left + 1, IRect.Top + 1, MonoBmp);
CopyMode := SrcAnd;
Draw(IRect.Left, IRect.Top, MonoBmp);
Brush.Color := clBtnShadow;
Font.Color := clBlack;
CopyMode := SrcPaint;
Draw(IRect.Left, IRect.Top, MonoBmp);
CopyMode := SrcCopy;
bmpTo.assign(TmpImage);
TmpImage.free;
end;
finally
MonoBmp.Free;
end;
end;
procedureTForm1.Button1Click(Sender: TObject);
begin
aaa(image1.picture.bitmap,image2.picture.bitmap);
Image2.invalidate;
end;
Писал это не я. Это написал сам Борланд (некузявно было бы взглянуть на класс TButtonGlyph. Как раз из него я это и выдернул). Ну а если уже совсем хорошо разобраться, то можно заметить функцию ImageList_DrawEx, в которой можно на 25 и 50 процентов уменьшить яркость (но визуально это очень плохо воспринимается). Соответственно параметры ILD_BLEND25, ILD_BLEND50, ILD_BLEND-A-MED. Естественно, что последний абзац работает только с тройкой.
Denis Tanayeff
Это кусочек из рабочей проги на Си, Вроде все лишнее я убрал.
#define CO_GRAY 0x00C0C0C0L
hMemDC = CreateCompatibleDC(hDC);
hOldBitmap = SelectObject(hMemDC, hBits);
// hBits это собственно картинка, которую надо «засерить»
GetObject(hBits, sizeof(Bitmap), (LPSTR) &Bitmap);
if (GetState(BS_DISABLED)) // Blt disabled
{
hOldBrush = SelectObject(hDC, CreateSolidBrush(CO_GRAY));//CO_GRAY
PatBlt(hDC, BD_BORDERWIDTH, BD_BORDERWIDTH, Bitmap.bmWidth, Bitmap.bmHeight, PATCOPY);
DeleteObject(SelectObject(hDC, hOldBrush));
lbLogBrush.lbStyle = BS_PATTERN;
lbLogBrush.lbHatch =(int)LoadBitmap(hInsts, MAKEINTRESOURCE(BT_DISABLEBITS));
hOldBrush = SelectObject(hDC, CreateBrushIndirect(&lbLogBrush));
BitBlt(hDC, BD_BORDERWIDTH, BD_BORDERWIDTH, Bitmap.bmWidth, Bitmap.bmHeight, hMemDC, 0, 0, 0x00A803A9UL); // DPSoa
DeleteObject(SelectObject(hDC, hOldBrush));
DeleteObject((HGDIOBJ)lbLogBrush.lbHatch);
}
Компонент для работы с FLIC-анимацией
Новостная группа: comp.lang.pascal.delphi.components
Тема: Компонент для работы с FLIC-анимацией: отправной пункт.
От: Paul Kuczora < paul@kuczora.demon.co.uk>
Дата: Чет, 03 Авг 95 16:51:19 GMT
В качество ответа на целый круг вопросов, я включил в свой ответ два файла:
aaplay1.inc — include-файл с интерфейсом для библиотеки aaplay.dll
aaplay1.pas — сырой скелет компонента для проигрывания FLIC-анимации
Я разработал это глядя на другой компонент (это был полнофункциональный плейер, работающий как форма), и вынужден был сохранить некоторые вещи неприкосновенными (попробуй тут сделай иначе :-)
Для работы вам понадобится библиотека aaplay.dll от Autodesk, которую вы можете найти на множестве мест (например, я так предполагаю, на Encarta CD). Для полного счастья вы можете обратиться к файлу помощи для Animation Player for Windows, который, не удивляйтесь, содержит справку для этой DLL — на первой странице найдите в ее самой нижней части указание на эту библиотеку, и перед вами предстанет полная справка по вызовам этой самой DLL.
Надеюсь что помог вам…
ВНИМАНИЕ! Это мой первый код, написанный для Windows (спасибо Delphi), поэтому он рекомендуется только для ознакомления.
{ ============================================================================ }
{ aaplay1.inc }
{ (c) P W Kuczora }
{ 17-го апреля 1995 }
{ Заголовочный файл, содержащий константы и определения типов для aaplay1.pas }
const
NULL = 0;
NULLPTR = ^0;
{
Доступные Флаги wMode: integer;
Используются в aaLoad, aaReLoad
Первые восемь бит wMode используются в aa_flags.
}
AA_MEMORYLOAD = $1; { Загрузка в память }
AA_HIDEWINDOW = $2; { Скрывать окно анимации }
AA_NOPALETTE = $4 ; { Анимация без палитры }
AA_RESERVEPALETTE = $8; { Резервировать при старте всю палитру }
AA_LOOPFRAME = $10; { Циклическая загрузка кадров }
AA_FULLSCREEN = $20; { Использовать полноэкранный режим воспроизведения }
AA_STOPNOTIFY = $40; { Исключать любые уведомляющие сообщения }
AA_STOPSTATUS = $80; { Исключать сообщения об изменении статуса }
AA_NOFAIL = $100; { Уменьшение типа нагрузки при ошибке }
AA_DONTPAINT = $200; { Не делать paByVal-анимацию при загрузке }
AA_BUILDSCRIPT = $400; { lpzFileName – скрипт, не имя }
AA_ALLMODES = $FF;
{
Доступные флаги для режимов звука – wMode: integer;
Используются в aaSound
}
AA_SNDFREEZE = $1; { Заморозка кадров при проигрывании звуков }
AA_SNDDEVICEID = $100; { ID устройства, не имя }
AA_SNDBUILDALIAS = $200; { создавать псевдоним звукового устройства }
{
aaNotify позволяет извещать приложение о проигрывании определенных кадров.
lPosition – позиция, на которой должно происходить уведомление.
wParam для этого сообщения – hAa, а lParam копируется из этого вызова.
При установке сообщения возвращается TRUE.
Следующее значение определяет необходимость завершения цикла анимации по окончании проигрывания звука. Если звук отсутствует, анимация зацикливается навсегда.
}
AA_LOOPSOUND = $FFFF;
{
Автоматическое уведомление посылается при перезагрузке в скрипте анимации.
lParam для этого сообщения определен ниже
}
AA_ANIMATIONLOADED = 0;
{
Типы параметров
Используется с aaGetParm и aaSetParm.
}
AA_STATUS = 1; { Получить текущий статус }
AA_FILETYPE = 2; { Получить тип анимации на диске }
AA_MODE = 3; { Получить/установить флаги анимации }
AA_WINDOW = 4; { Установить/получить окно анимации }
AA_SPEED = 5; { Установить/получить текущую скорость }
AA_DESIGNSPEED = 6; { Получить скорость на этапе дизайна }
AA_FRAMES = 7; { Получить число кадров }
AA_POSITION = 8; { Установить/получить позицию текущего кадра }
Интервал:
Закладка: