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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.08.2010, 12:18   #1
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
Вопрос Нестандартная форма

Всем привет.Хочу сделать форму нестандартной формы,а точнее что-нибудь корявое как при загрузке Photoshop'a.Делаю вот так:
1)Ложу на форму картинку без фона
2)Пишу такой код:
Код:
procedure Tform4.WMNCHitTest (var M:TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;

procedure TForm4.FormCreate(Sender: TObject);
var
regn, tmpRegn: integer;
x, y: integer; 
nullClr: TColor; 
begin
form4.Color:=clred;
nullClr := image1.picture.Bitmap.Canvas.Pixels[0, 0];
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(form4.handle, regn, true);
end;
Все это работает,проблема состоит в следующем.Форма приобретает форму картинки,а хотелось бы чтоб форма устанавливала свои границы по имаге(ну пря как в фотошоп(нестандартная форма с картинкой внутри))
вот форма,а чтоб картинка внутри...Помогите пожалуйста!!!
ZvEr_HaCkEr вне форума
Старый 26.08.2010, 12:23   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может Transparent формы порыть?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 26.08.2010, 12:35   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

У Вас 2 способа решения:

1) Регионы
2) Transparent

У второго способа тоже 2 метода.

1) Ставим BorderStyle в None
2) На изображении "прозрачные места" заливаем, например, розовым.
3) У формы ставим Transparent = TRUE
4) У формы ставим TransparentColor = $FF00FF или фуксю из готовых.

Вуаля.

Второй способ второго метода сделан для тех, кто не может найти Transparent свойства у формы:
Код:
  SetWindowLong(FRMMain.Handle, GWL_EXSTYLE,
   GetWindowLong(FRMMain.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(FRMMain.Handle, clFuchsia, 0, LWA_COLORKEY);
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 26.08.2010, 12:36   #4
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Да я и не знаю как( Вот видел компонент(или исходник)там форма круглая,а в ней глобус.Так вот ,форма формы устанавливалась по картинке.С png что-то связано.Может видели подобное?

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Код:
  SetWindowLong(FRMMain.Handle, GWL_EXSTYLE,
   GetWindowLong(FRMMain.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(FRMMain.Handle, clblack, 0, LWA_COLORKEY);
Так получилосьТолько края картинки в image1 в черный цвет окрасились(черный цвет поставил)

Последний раз редактировалось artemavd; 27.08.2010 в 05:16.
ZvEr_HaCkEr вне форума
Старый 26.08.2010, 13:09   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

TImage должна быть размером точно как картинка.

Попросту говоря:
Код:
FRMMain.Width := BitMap.Width;
FRMMain.Height := BitMap.Height;
FRMMain.IMGMain.Height := FRMMain.Height;
FRMMain.IMGMain.Width := FRMMain.Width;
FRMMain.IMGMain.Canvas.Draw(0,0,BitMap);
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 26.08.2010, 15:33   #6
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Да нет я вот про эти краяРамка в цвет формы.А избавиться от нее никак?
ZvEr_HaCkEr вне форума
Старый 26.08.2010, 15:41   #7
Vikenty
Заслуженный флудер
Участник клуба
 
Аватар для Vikenty
 
Регистрация: 31.03.2010
Сообщений: 1,473
По умолчанию

Цитата:
Сообщение от ZvEr_HaCkEr Посмотреть сообщение
Да нет я вот про эти краяРамка в цвет формы.А избавиться от нее никак?
установи у формы значения
Transparent=true
Color=цвет фона рисунка
TransparentColor=цвет фона рисунка

у меня правильно работает
Vikenty вне форума
Старый 26.08.2010, 15:44   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

попробуй поставить цвет формы в clFuchsia
если я все верно понял конечно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 26.08.2010, 16:02   #9
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
попробуй поставить цвет формы в clFuchsia
если я все верно понял конечно
SetLayeredWindowAttributes(FRMMain. Handle, clyellow, 0, LWA_COLORKEY);
Причем тут это?Ну рамка тогда розовой будет,а я желтый захотел.Розовый в глаза бросается.
ZvEr_HaCkEr вне форума
Старый 26.08.2010, 16:08   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я сказал цвет формы, а не цвет фона, кстати, картинка bmp надеюсь?
ибо jpeg размазывает края(а прозрачности нужно точное попадание цвета)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нестандартная сортировка массива. MafoR Общие вопросы C/C++ 8 24.04.2010 17:41
Нестандартная форма приложения zmey31313 Общие вопросы Delphi 4 18.02.2010 15:09
Нестандартная сортировка DJOV Microsoft Office Excel 5 10.09.2009 01:17
Нестандартная авторизация krot98 Работа с сетью в Delphi 7 09.12.2008 22:09
Нестандартная форма Лубышев Общие вопросы Delphi 7 28.01.2008 20:33