Чтение онлайн

на главную

Жанры

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 FillRgn(OffScreen.Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);

 OffsetRgn(ShadeRgn, 0, RgnBox.Top);

 // BitBlt работает быстрее CopyRect

 BitBlt(OffScreen.Canvas.Handle, 0, 0, OffScreen.Width, OffScreen.Height, Canvas.Handle, RgnBox.Left, RgnBox.Top, SRCAND);

 Canvas.Brush.Color := clBlack;

 FillRgn(Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);

 BitBlt(Canvas.Handle, RgnBox.Left, RgnBox.Top, OffScreen.Width, OffScreen.Height, OffScreen.Canvas.Handle, 0, 0, SRCPAINT);

 OffScreen.Free;

 Pattern.Free;

 OffsetRgn(ShadeRgn, –WDepth, –HDepth);

 ReleaseDC(Form1.Handle, Canvas.Handle);

 Canvas.Handle := hOldDC;

end;

Комментарии:

Функция

рисует тень сложной формы на форме Form2 (извиняюсь за стиль). Для определения формы тени используется регион ShadeRgn, который был создан где-то раньше (например в OnCreate). Относительно регионов см. Win32 API. 

Как рисовать на органе управления, например, на TPanel?

Nomadic советует:

У всех компонентов, порожденных от TCustomControl, имеется свойство Canvas типа TCanvas.

Если свойство Canvas недоступно, Вы можете достучаться до него созданием потомка и переносом этого свойства в раздел Public.

{ Example. We recommend You to create this component through Component Wizard.

 In Delphi 1 it can be found as 'File|New Component…', and can be found

 as 'Component|New Component…' in Delphi 2 or above. }

type

 TcPanel = class(TPanel)

public

 property Canvas;

end;

У меня есть маленькое замечание.

Если у объекта нет свойства Canvas (у TDBEdit вроде-бы нет), то, по крайней меpе в D3, можно использовать класс TControlCanvas. Примерное использование:

var

 cc: TControlCanvas;

 …

 cc := TControlCanvas.Create;

 cc.Control := yourControl;

 …

и далее как обычно можно использовать методы Canvas.

Как мне из Handle битовой картинки, получить адрес битового изображения в памяти?

Nomadic советует:

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

Сразу оговорюсь, что все это работает только под Win95/NT.

type

 TarrRGBTriple=array[byte] of TRGBTriple;

 ParrRGBTriple=^TarrRGBTriple;

{организует
битмэп размером SX,SY;true_color}

procedure TMBitmap.Allocate(SX,SY:integer);

var DC:HDC;

begin

 if BM<>0 then DeleteObject(BM); {удаляем старый битмэп, если был}

 BM:=0;

 PB:=nil;

 fillchar(BI,sizeof(BI),0);

 with BI.bmiHeader do {заполняем структуру с параметрами битмэпа}

 begin

biSize:=sizeof(BI.bmiHeader);

biWidth:=SX;

biHeight:=SY;

biPlanes:=1;

biBitCount:=24;

biCompression:=BI_RGB;

biSizeImage:=0;

biXPelsPerMeter:=0;

biYPelsPerMeter:=0;

biClrUsed:=0;

biClrImportant:=0;

FLineSize:=(biWidth+1)*3 and (-1 shl 2); {размер строки(кратна 4 байтам)}

if (biWidth or biHeight)<>0 then begin

DC:=CreateDC('DISPLAY',nil,nil,nil);

{замечательная функция (см.HELP), возвращает HBITMAP, позволяет сразу разместить выделяемый битмэп в спроецированном файле, что позволяет ускорять работу и экономить память при генерировании большого битмэпа}

{!} BM:=CreateDIBSection(DC,BI, DIB_RGB_COLORS, pointer(PB), nil, 0);

DeleteDC(DC); {в PB получаем указатель на битмэп-----^^}

if BM=0 then Error('error creating DIB');

end;

 end;

end;

{эта процедура загружает из файла true-color'ный битмэп}

procedure TMBitmap.LoadFromFile(const FileName:string);

var

 HF:integer; {file handle}

Поделиться:
Популярные книги

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6

Сердце Дракона. Предпоследний том. Часть 1

Клеванский Кирилл Сергеевич
Сердце дракона
Фантастика:
фэнтези
5.00
рейтинг книги
Сердце Дракона. Предпоследний том. Часть 1

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Под маской, или Страшилка в академии магии

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.78
рейтинг книги
Под маской, или Страшилка в академии магии

Мой любимый (не) медведь

Юнина Наталья
Любовные романы:
современные любовные романы
7.90
рейтинг книги
Мой любимый (не) медведь

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Играть, чтобы жить. Книга 3. Долг

Рус Дмитрий
3. Играть, чтобы жить
Фантастика:
фэнтези
киберпанк
рпг
9.36
рейтинг книги
Играть, чтобы жить. Книга 3. Долг

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист

Вечный Данж. Трилогия

Матисов Павел
Фантастика:
фэнтези
юмористическая фантастика
6.77
рейтинг книги
Вечный Данж. Трилогия

Мужчина не моей мечты

Ардова Алиса
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Мужчина не моей мечты

Последний Паладин. Том 7

Саваровский Роман
7. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 7

Истинная со скидкой для дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Истинная со скидкой для дракона

Волк 7: Лихие 90-е

Киров Никита
7. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк 7: Лихие 90-е

Кровь Василиска

Тайниковский
1. Кровь Василиска
Фантастика:
фэнтези
попаданцы
аниме
4.25
рейтинг книги
Кровь Василиска