Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 518

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, эксперты!
Хочу на фон программ поставить картинку! Но она не прямоугольная... (ну вообще-то прямоугольная, но описывает контур - все остальное прозрачное) Как можно сделать так, что бы места, в которых изображение прозрачное - было прозрачным? Конечно сформулировал непонятно... ну думаю разобрать о чем я можно.. Боьшое спасибо!

Хитманчан Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Хитманчан (статус: Посетитель)
Вопрос отправлен: 13 марта 2009, 21:47
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, Хитманчан! Трудно понять чего вы хотите, но рискну предположить....
почитайте вот это...
там вы найдете ответ на свой вопрос...

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 13 марта 2009, 21:58
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо!

Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 14 марта 2009, 17:13; участников в обсуждении: 3.
Хитманчан

Хитманчан (статус: Посетитель), 13 марта 2009, 22:10 [#1]:

Ученый, да - про это я и говорил... только как-то это сильно сложно... че-то я думал, что как-то саму форму убрать с фона можно - и оставить один Image в который вгрузить PNG изображение с прозрачным фоном... Щас еще пару раз прочту - может пому что-то! Большое спасибо)
Amidamaru

Amidamaru (статус: 4-ый класс), 13 марта 2009, 22:14 [#2]:

Работа с регионами только кажется сложной
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Хитманчан

Хитманчан (статус: Посетитель), 13 марта 2009, 22:19 [#3]:

Amidamaru, возможно! Прочитав еще раз понял, что тут только код вбить правильно надо... Но и это для меня что-то нереально... Ну вот как я делаю - создал новую форму - добавил в Image 1 PNG изображение с прозрачным фоном... Накопировал код от туда... весь проходит кроме вызова самой функции

SetWindowsRgn(Form1.Handle, True);

Куда ее, не подскажите, вставить?
Хитманчан

Хитманчан (статус: Посетитель), 13 марта 2009, 23:17 [#4]:

Погуглил немного и нашел код... вообще класс! То, что доктор прописал)

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Brush.Style := bsClear;
Form1.BorderStyle := bsNone
end;

Но есть одно но! Если форму перемещать (Image) то оно вместе с собой фон берет) Вот код который использую для перемещения

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
const
SC_DragMove = $F012;
begin
ReleaseCapture;
Self.Perform(WM_SysCommand, SC_DragMove, 0);
end;

Может как-то можно добиться нормального перемещения? Спасибо!
Хитманчан

Хитманчан (статус: Посетитель), 14 марта 2009, 11:46 [#5]:

Вот - сегодня нашел еще один код - тут все идиально с перемещением, но проблема с тем, что все полупрозрачные пиксели изображения пееркрашивает в цвет, который задаешь - тут стоит clLime... Что только не пробовал - но убрать не смог - только хуже было... Может подскажите, как это оключить можно? Выложил код (надеюсь правильно... нет - не вышло... извиняюсь) Спасибо...

<code>
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, pngimage, jpeg;

type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
TransparentColorValue:=cllime;
TransparentColor:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;

procedure TForm1.FormPaint(Sender: TObject);
var T:TTime;
begin
T:=(Now);
Canvas.Brush.Color:=cllime;
Canvas.Pen.Color:=cllime;
Canvas.Rectangle(0,0,Form1.Width,Form1.Height);

end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
const
SC_DragMove = $F012;
begin
ReleaseCapture;
Self.Perform(WM_SysCommand, SC_DragMove, 0);
end;

end.
<code>
Dron

Dron (статус: Студент), 14 марта 2009, 11:52 [#6]:

Используйте компонент ShapedForm. Он есть на сайте в разделе Компоненты. Помимо картинки-фона нужно будет сделать чёрно-белый образ, чтобы определить, какие части формы убрать, а какие оставить. Делается это в том же Photoshop несколькими кликами. Компонент в использовании очень прост.
С уважением.
Хитманчан

Хитманчан (статус: Посетитель), 14 марта 2009, 16:42 [#7]:

Dron, большое спасибо! Скачал компонент! Вроде установил... не могли бы Вы по подробнее рассказать как с этим работать! молжет пример завалялся какой-то у Вас..? Был бы очень признателен! Ато гугл устал от меня уже.... Спасибо!
Dron

Dron (статус: Студент), 14 марта 2009, 17:01 [#8]:

Там ничего сложного - есть свойство, отвечающее за картинку-образ. Туда нужно загрузить обычный bmp. Чёрный цвет - форма, белый - прозрачность (вроде бы так, хотя может и наоборот - это несложно узнать проверкой). Например, чёрный круг на белом фоне даст круглую форму. Картинка здесь не нужна - нужно только "пятно" для формы. После загрузки нужно поставить свойство активности в True. Называется скорее всего Active или Enabled. Всё, форма обретёт при запуске нужную форму.
С уважением.
Хитманчан

Хитманчан (статус: Посетитель), 14 марта 2009, 17:13 [#9]:

Спасибо! Буду пробовать)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 марта 2023, 05:43
Выполнено за 0.02 сек.
Рейтинг@Mail.ru