| 
| 
 | Вопрос # 2 518/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Хочу на фон программ поставить картинку! Но она не прямоугольная... (ну вообще-то прямоугольная, но описывает контур - все остальное прозрачное) Как можно сделать так, что бы места, в которых изображение прозрачное - было прозрачным? Конечно сформулировал непонятно... ну думаю разобрать о чем я можно.. Боьшое спасибо!
 
|  |   Вопрос задал: Хитманчан (статус: Посетитель)Вопрос отправлен: 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 (статус: 4-ый класс), 13 марта 2009, 22:14 [#2]:Работа с регионами только кажется сложной |  
|   | Хитманчан (статус: Посетитель), 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 (статус: Студент), 14 марта 2009, 11:52 [#6]:Используйте компонент ShapedForm. Он есть на сайте в разделе Компоненты. Помимо картинки-фона нужно будет сделать чёрно-белый образ, чтобы определить, какие части формы убрать, а какие оставить. Делается это в том же Photoshop несколькими кликами. Компонент в использовании очень прост. С уважением. |  
|   | Хитманчан (статус: Посетитель), 14 марта 2009, 16:42 [#7]:Dron, большое спасибо! Скачал компонент! Вроде установил... не могли бы Вы по подробнее рассказать как с этим работать! молжет пример завалялся какой-то у Вас..? Был бы очень признателен! Ато гугл устал от меня уже.... Спасибо! |  
|   | Dron (статус: Студент), 14 марта 2009, 17:01 [#8]:Там ничего сложного - есть свойство, отвечающее за картинку-образ. Туда нужно загрузить обычный bmp. Чёрный цвет - форма, белый - прозрачность (вроде бы так, хотя может и наоборот - это несложно узнать проверкой). Например, чёрный круг на белом фоне даст круглую форму. Картинка здесь не нужна - нужно только "пятно" для формы. После загрузки нужно поставить свойство активности в True. Называется скорее всего Active или Enabled. Всё, форма обретёт при запуске нужную форму. С уважением. |  
|   | Хитманчан (статус: Посетитель), 14 марта 2009, 17:13 [#9]:Спасибо! Буду пробовать) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |