كيف يتم رسم مستطيل شفاف
#1
السلام عليكم

في الدلفي 7 كيف يتم رسم مستطيل و اللون الاحمر شفاف
كود :
buffer.Canvas.Brush.Color:= clred; buffer.Canvas.Pen.Color:= clred; buffer.Canvas.Rectangle(Rect(0,0,100,50)); buffer.Canvas.Brush.Color:= clred;
بارك الله بالجميع
سبحان الله و بحمده سبحان الله العظيم
الرد
#2
في الحقيقة .. لا يمكن تطبيق الفكرة مباشرة بسبب قصور دوال ال GDI على التعامل مع النظام ARGB (اللون الشفاف )
يمكن عمل ذلك بكل سهولة باستخدام ال GDI+ أو ال FireMonkey
-----------------------------------------
لكن على حسب مافهمته فأنت تستخدم دلفي 7 (احتمال أنك لا تملك +GDI )
يمكنك عمل المطلوب باستخدام هذه الدالة :
PHP كود :
{ AlphaRect By SMP3 .
 Use 
this function to draw transparent Rectangle
}
procedure AlphaRect(DC: HDC;X,Y,Width,Height:Integer;Color:TColor;const Opacity :Byte = 255);
var
BlendFunction : TBlendFunction;
hBmp          : HBITMAP;
BmpInfo       : TBitmapInfo ;
CompatibleDC  : HDC;
P4            :Pointer;
BitmapInfoSize:LongInt;
i,j:Integer;
begin

 ZeroMemory
(@BmpInfo, sizeof(TBitmapInfo));

 
bmpinfo.bmiHeader.biSize :=Sizeof(TBitmapInfoHeader);
 
bmpinfo.bmiHeader.biWidth := Width;
 
bmpinfo.bmiHeader.biHeight := Height;
 
bmpinfo.bmiHeader.biPlanes := 1;
 
bmpinfo.bmiHeader.biBitCount := 32;
 
bmpinfo.bmiHeader.biCompression := BI_RGB;
 
bmpinfo.bmiHeader.biSizeImage := Width * Height ;

 
CompatibleDC :=CreateCompatibleDC(DC);

 
hBmp := CreateDIBSection(CompatibleDC, bmpinfo, DIB_RGB_COLORS, P4, 0, 0);
 
SelectObject(CompatibleDC, hBmp);

 
BlendFunction.BlendOp:= AC_SRC_OVER;
 
BlendFunction.BlendFlags := 0;
 
BlendFunction.SourceConstantAlpha:=Opacity;
 
BlendFunction.AlphaFormat := 0;

 for 
i := 0 to Width do
 for 
j := 0 to Height do
 
SetPixel(CompatibleDC, i, j, Color) ;

 
Windows.AlphaBlend(DC, X,Y,Width, Height,
 
CompatibleDC, 0, 0, Width, Height, BlendFunction);

 
DeleteObject(hBmp);
 
DeleteDC(CompatibleDC);

end; 
الاستعمال :
PHP كود :
AlphaRect(GetWindowDC(Handle),0,0,100,30,clRed,100); 
كود :
http://im34.gulfup.com/bhkCS.png
الرد
#3
احسنت و بارك الله فيك و جعله في ميزان حسناتك لكني واجهت بعض الصعوبات و استعمله
استخدم متغير من نوع TBitmap;
فكيف استطيع ان اضف هذه العمليه عليه
المتغير اسمه buffer
مثلا اختصر الكود بلا من هذا
GetWindowDC(Handle
نكتب هذا
buffer
الذي هوه متغير من نوع
Bitmap
وبارك الله فيك
سبحان الله و بحمده سبحان الله العظيم
الرد
#4
Anew كتب :المتغير اسمه buffer
PHP كود :
AlphaRect(buffer.Canvas.Handle,0,0,100,30,clRed,100); 
الرد
#5
احسنت عمل معب بصوره صحيحة
بارك الله بيك و ليجعله في ميزان حسناتك
بخصوص ال(gdi) استخدم دلفي 7 لانه لا يعتمد على الفروم ورك او اي شي اخر
فهل نسخ دلفي الحديثه تعتمد على الفروم او اي شي اخر
بارك الله فيك
سبحان الله و بحمده سبحان الله العظيم
الرد
#6
تقصد +gdi
لا , لا تعتمد على الفرام وورك ..
الرد
#7
السلام عليكم...

ببساطة لماذا لا تجعل الـ Brush شفافة و ذلك بضبط الخاصية Style على bsClear:

كود :
buffer.Canvas.Pen.Color:= clRed; buffer.Canvas.Brush.Style := bsClear; // <<< buffer.Canvas.Rectangle(0, 0, 100, 50);

نرجو الاستفادة و السلام.
الرد
#8
Najy Ibraheem كتب :ببساطة لماذا لا تجعل الـ Brush شفافة و ذلك بضبط الخاصية Style على bsClear:
[/CODE]
نرجو الاستفادة و السلام.
[COLOR="Red"]الأخ يقصد ال Opacity
ألق نظرة على الصورة :
[/COLOR]
كود :
http://im34.gulfup.com/bhkCS.png
الرد
#9
السلام عليكم...

يبدو أني أخطأت الفهم!

سلام.
الرد
#10
SMP3
بارك الله بيك و شكرا على المجهود الطيب
najy
بارك الله فك
سبحان الله و بحمده سبحان الله العظيم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم