Форум: "Прочее";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
ВнизОкна нестандартной формы Найти похожие ветки
← →
ronyn (2006-07-26 00:54) [0]В своей проге использовал рисунок синего цвета - для создания окна нестандартной формы. Потом этот рисунок сделал градиентным и после этого все белые места стало видно . В общем окно получилось просто квадратным. Файл для фона в формате *.bmp. Брал его же в формате *.jpeg, тык там окно вообще не прорисовывается.
← →
ssk © (2006-07-26 01:01) [1]ну и...
← →
Homo Sapiens © (2006-07-26 01:03) [2]и чего ты хочешь спрсить?
← →
ronyn (2006-07-27 00:16) [3]ПОЧЕМУ, КОГДА Я СТАЛ ИСПОЛЬЗОВАТЬ ДЛЯ ФОНА ГРАДИЕНТНУЮ КАРТИНКУ, ТО БЕЛАЯ ЧАСТЬ РИСУНКА СТАЛА ПРОРИСОВЫВАТЬСЯ, ХОТЯ НА МОНОЛИТНОМ РИСУНКЕ БЕЛЫЙ ЦВЕТ НЕ ПРОРИСОВЫВАЛСЯ.
← →
Footballer © (2006-07-27 00:31) [4]А градиент какого цвета? Или ещё лучше выложи картинку где-нибудь и дай посмотреть
← →
McSimm © (2006-07-27 00:35) [5]кричать не прилично :)
потому что цвет, задающий места прозрачности изменился.
← →
SergProger © (2006-07-27 03:22) [6]Цитата из статьи "Форма окна по Bitmap":
unit Unit1;
interface
uses
Windows, Classes, SysUtils, Graphics, Forms;
type
TRGBArray = array[0..32767] of TRGBTriple;
PRGBArray = ^TRGBArray;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FRegion: THandle;
function CreateRegion(Bmp: TBitmap): THandle;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.CreateRegion(Bmp: TBitmap): THandle;
var
X, Y, StartX: Integer;
Excl: THandle;
Row: PRGBArray;
TransparentColor: TRGBTriple;
begin
Bmp.PixelFormat := pf24Bit;
Result := CreateRectRGN(0, 0, Bmp.Width, Bmp.Height);
for Y := 0 to Bmp.Height - 1 do
begin
Row := Bmp.Scanline[Y];
StartX := -1;
if Y = 0 then
TransparentColor := Row[0];
for X := 0 to Bmp.Width - 1 do
begin
if (Row[X].rgbtRed = TransparentColor.rgbtRed) and
(Row[X].rgbtGreen = TransparentColor.rgbtGreen) and
(Row[X].rgbtBlue = TransparentColor.rgbtBlue) then
begin
if StartX = -1 then StartX := X;
end
else
begin
if StartX > -1 then
begin
Excl := CreateRectRGN(StartX, Y, X + 1, Y + 1);
try
CombineRGN(Result, Result, Excl, RGN_DIFF);
StartX := -1;
finally
DeleteObject(Excl);
end;
end;
end;
end;
if StartX > -1 then
begin
Excl := CreateRectRGN(StartX, Y, Bmp.Width, Y + 1);
try
CombineRGN(Result, Result, Excl, RGN_DIFF);
finally
DeleteObject(Excl);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile("C:\YourBitmap.bmp");
FRegion := CreateRegion(Bmp);
SetWindowRGN(Handle, FRegion, True);
finally
Bmp.Free;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteObject(FRegion);
end;
end.
← →
Nic © (2006-07-27 07:39) [7]
> ronyn (26.07.06 00:54)
Код в студию ;)
← →
GeLLeR © (2006-08-01 17:46) [8]вот
procedure TMainForm.CreateBWindow(AHWND: HWND;bitmap:TBitmap);
var
back_color:COLORREF;
wnd_dc,hdc_bmp,tmp_rgn,wnd_rgn:HDC;
width,height,x,y,x0:integer;
begin
width:=bitmap.width;
height:=bitmap.height;
wnd_dc:=GetDC(aHwnd);
hdc_bmp:=CreateCompatibleDC(wnd_dc);
SelectObject(hdc_bmp,bitmap.handle);
back_color:=GetPixel(hdc_bmp,0,0);
tmp_rgn:=CreateRectRgn(0,0,0,0);
wnd_rgn:=CreateRectRgn(0,0,0,0);
x:=0;
for y:=0 to height-1 do begin
while (x<width-1) do
begin
while((GetPixel(hdc_bmp,x,y)=back_color) and
(x<width)) do inc(x);
if(x<>width) then
begin
x0:=x;
while((GetPixel(hdc_bmp,x,y)<>back_color) and
(x<width)) do inc(x);
tmp_rgn:=createrectrgn(x0,y,x,y+1);
CombineRgn(wnd_rgn,wnd_rgn,tmp_rgn,RGN_XOR);
end;
end;
x:=0;
end;
DeleteObject(tmp_rgn);
DeleteDC(hdc_bmp);
SetWindowRgn(aHwnd,wnd_rgn,True);
DeleteObject(wnd_rgn);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
CreateBWindow(MainForm.Handle,Image1.Picture.Bitmap);
end;
← →
Gero © (2006-08-02 00:45) [9]> while((GetPixel(hdc_bmp,x,y)=back_color) and
Вот где собака порылась.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c