delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف يتم رسم مستطيل شفاف
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

في الدلفي 7 كيف يتم رسم مستطيل و اللون الاحمر شفاف
كود :
buffer.Canvas.Brush.Color:= clred; buffer.Canvas.Pen.Color:= clred; buffer.Canvas.Rectangle(Rect(0,0,100,50)); buffer.Canvas.Brush.Color:= clred;
بارك الله بالجميع
في الحقيقة .. لا يمكن تطبيق الفكرة مباشرة بسبب قصور دوال ال 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
احسنت و بارك الله فيك و جعله في ميزان حسناتك لكني واجهت بعض الصعوبات و استعمله
استخدم متغير من نوع TBitmap;
فكيف استطيع ان اضف هذه العمليه عليه
المتغير اسمه buffer
مثلا اختصر الكود بلا من هذا
GetWindowDC(Handle
نكتب هذا
buffer
الذي هوه متغير من نوع
Bitmap
وبارك الله فيك
Anew كتب :المتغير اسمه buffer
PHP كود :
AlphaRect(buffer.Canvas.Handle,0,0,100,30,clRed,100); 
احسنت عمل معب بصوره صحيحة
بارك الله بيك و ليجعله في ميزان حسناتك
بخصوص ال(gdi) استخدم دلفي 7 لانه لا يعتمد على الفروم ورك او اي شي اخر
فهل نسخ دلفي الحديثه تعتمد على الفروم او اي شي اخر
بارك الله فيك
تقصد +gdi
لا , لا تعتمد على الفرام وورك ..
السلام عليكم...

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

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

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

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

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