Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 17:47   #1
nikmay
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 33
Счастье Форма по контуру рисунка

Хочу сделать заставку в своем приложении.
Это будет невидимая форма, на которой бедут расположен TImage с рисунком.

ВОПРОС: Как сделать так, чтобы эта форма была по форме рисунка?

Я сделал форму прозрачной, а компоненты на ней видимые. Рисунок типа [EM]png[/EM] без фона.
У TImage свойство прозрачности установлено.
Проблема в том, что фон у рисунка остается серым все равно.
Как быть, подскажите?
nikmay вне форума Ответить с цитированием
Старый 29.09.2009, 18:00   #2
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Смотри прилепленный архив , накидал по быстрому
Вложения
Тип файла: rar FormFromBmpPict.rar (12.9 Кб, 82 просмотров)
Lime вне форума Ответить с цитированием
Старый 29.09.2009, 18:39   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Как создать форму определенной формы

Можно создать форму по картинке. Т.е. находишь картинку в форме ножниц и создаёшь по ней форму.
Код

procedure Tmain.WMNCHitTest (var M:TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;

procedure Tmain.FormCreate(Sender: TObject);
var
regn, tmpRegn: integer; // регион окна и временный регион
x, y: integer; // координаты пикселя
nullClr: TColor; // <прозрачный цвет>

begin
nullClr := image1.picture.Bitmap.Canvas.Pixels[0, 0];
// Image1 это картинка по которой создается форма окна
regn := CreateRectRgn(0, 0, image1.picture.Graphic.Width,
image1.picture.Graphic.Height);
for x := 1 to image1.picture.Graphic.Width do
for y := 1 to image1.picture.Graphic.Height do
if image1.picture.Bitmap.Canvas.Pixels[x - 1, y - 1] = nullClr then
begin
tmpRegn := CreateRectRgn(x - 1, y - 1, x, y);
CombineRgn(regn, regn, tmpRegn, RGN_DIFF);
DeleteObject(tmpRegn);
end;
SetWindowRgn(main.handle, regn, true);

end;
Поипиксельно проверяешь цвет и если он должен быть прозрачный то создаёшь его регион (смотри выше). Потом выкалываешь сумму регионов.
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер перевод рисунка из 2д в 3д TOSAgrk Помощь студентам 3 05.01.2013 02:27
Корректное масштабирование рисунка devi409 Мультимедиа в Delphi 16 12.06.2012 21:54
Движение шарика по контуру delphi Map4eJIo Помощь студентам 2 03.03.2009 11:10
Движение по треугольному контуру?? Roberto Помощь студентам 1 04.05.2008 18:34
Разгупировка рисунка asale Microsoft Office Excel 1 23.10.2007 22:30