SalarSoftwares logo

خوش آمدید. در این سایت می توانید ابزارهای دلفی و نرم افزارها را دریافت کنید.

صفحه اصلی | مقالات | سوال و جواب | Downloads | Beeper help | جستجو | تصاویر برنامه ها | تبلیغات | تماس با ما | وبلاگ شخصی

چگونه مي توان يك فرم به شكلي غير از شكل عادي خود داشت؟

function BitmapToRegion(Bitmap:TBitmap;TransColor:TColor;FInverted:Boolean=false):HRgn;
const AllocUnit=100;
var BMP:TBitmap;
MaxRects:Integer;
HData:HGlobal;
PData:PRgnData;
CB,CR,CG,LR,LG,LB:Byte;
P32:Pointer;
X,X0,Y:Integer;
P:PLongInt;
PR:PRect;
H:Hrgn;
begin
Result:=0;
BMP:=TBitmap.Create;
BMP.Assign(Bitmap);
BMP.HandleType:=bmDIB;
BMP.PixelFormat:=pf32bit;
MaxRects:=AllocUnit;
HData:=GlobalAlloc(GMem_Moveable,SizeOf(TRgnDataHeader)+SizeOf(TRect)*MaxRects);
PData := GlobalLock(HData);
PData^.RDH.dwSize:=SizeOf(TRgnDataHeader);
PData^.RDH.iType:=RDH_Rectangles;
PData^.RDH.nCount:=0;
PData^.RDH.nRgnSize:=0;
SetRect(PData^.RDH.rcBound,MaxInt,MaxInt,0,0);
LR:=GetRValue(ColorToRGB(TransColor));
LG:=GetGValue(ColorToRGB(TransColor));
LB:=GetBValue(ColorToRGB(TransColor));
for Y:=0 to Bitmap.Height-1 do
begin
X:=-1;
P32:=BMP.ScanLine[Y];
while X+1<Bitmap.Width do
begin
Inc(X);
X0:=X;
P:=PLongInt(P32);
Inc(PChar(P),X*SizeOf(LongInt));
while X<Bitmap.Width do
begin
CR:=GetBValue(P^);
CG:=GetGValue(P^);
CB:=GetRValue(P^);
if ((CR=LR) and (CG=LG) and (CB=LB)) xor FInverted then
Break;
Inc(PChar(P),SizeOf(LongInt));
Inc(X)
end;
if X>X0 then
begin
if PData^.RDH.nCount>=MaxRects then
begin
GlobalUnlock(HData);
Inc(MaxRects,AllocUnit);
HData:=GlobalReAlloc(HData,SizeOf(TRgnDataHeader)+SizeOf(TRect)*
MaxRects,GMem_Moveable);
PData:=GlobalLock(HData)
end;
PR:=@PData^.Buffer[PData^.RDH.nCount*SizeOf(TRect)];
SetRect(PR^,X0,Y,X,Y+1);
if X0<PData^.RDH.rcBound.Left then
PData^.RDH.rcBound.Left:=X0;
if Y<PData^.RDH.rcBound.Top then
PData^.RDH.rcBound.Top:=Y;
if X>PData^.RDH.rcBound.Right then
PData^.RDH.rcBound.Left:=X;
if Y+1>PData^.RDH.rcBound.Bottom then
PData^.RDH.rcBound.Bottom:=Y+1;
Inc(PData^.RDH.nCount);
if PData^.RDH.nCount=2000 then
begin
H:=ExtCreateRegion(nil,SizeOf(TRgnDataHeader)+(SizeOf(TRect)*MaxRects),PData^);
if Result<>0 then
begin
CombineRgn(Result,Result,H,RGN_OR);
DeleteObject(H);
end
else
Result:=H;
PData^.RDH.nCount:=0;
SetRect(PData^.RDH.rcBound,MaxInt,MaxInt,0,0)
end
end
end
end;
H:=ExtCreateRegion(nil,SizeOf(TRgnDataHeader)+(SizeOf(TRect)*MaxRects),PData^);
if Result<>0 then
begin
CombineRgn(Result,Result,H,RGN_OR);
DeleteObject(H);
end
else
Result:=H;
Globalfree(HData);
BMP.free
end;

این تابع را به تابع setWindowRgn ارسال کنید تا پنجره شما تغییر حالت دهد.

مثال:

SetWindowRgn( form1.handle , BitmapToRegion( bitmap1 , clBlack ) , true );


Titles

صفحه اصلی
Up
مقالات
Downloads
Beeper help
جستجو
تصاویر برنامه ها
تبلیغات
تماس با ما
وبلاگ شخصی

جستجو در سایت

لینک سایر سایت ها


 صفحه اصلی | مقالات | سوال و جواب | Downloads | Beeper help | جستجو | تصاویر برنامه ها | تبلیغات | تماس با ما | وبلاگ شخصی
در صورت بروز هر گونه مشكل در استفاده از نرم افزار هاي اين سايت, مشكل را با مدير اين سايت در ميان بگذاريد.

Creative Commons License
This work is licensed under a Creative Commons Attribution 2.5 License.

آخرين به روز رسانی: آمار بازدید: