الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كود مفيد (أشكال مختلفة للفورم بدون قيود)

مغلق
بدأه newmember في 16 يوليو 2002 · 6 رد · 824 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخوانى رواد هذا المنتدى الرائع

السلام عليكم ورحمة الله وبركاته

الكود التالى يقوم بإظهار الفورم فى أى شكل ممكن يخطر على بالك :

unit Unit1;

interface

uses

Windows, Classes, SysUtils, Graphics, Forms;

type

TRGBArray = array[0..32767] of TRGBTriple;

PRGBArray = ^TRGBArray;

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

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

begin

TransparentColor := Row[0];

end;

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('إسم الصورة .bmp');

FRegion := CreateRegion(Bmp);

SetWindowRGN(Handle, FRegion, True);

finally

Bmp.Free;

end;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

DeleteObject(FRegion);

end;

end.

مع ملاحظة أن اللون الأبيض فى الصورة المختارة لن يظهر .

(f) (f)

#2

هل قام أحد بتجريب هذا الكود ؟؟؟؟؟؟؟؟؟؟؟؟؟:(

#3

السلام عليكم

الكود رائع جدا . مشكور اخي العزيز .

اضافه بسيطه لمن يحب البحث في هذا المجال :

يمكن دراسه دوال الـ API الخاصه بذلك Region Function :

CombineRgn , CreateEllipticRgn , CreateEllipticRgnIndirect

CreatePolygonRgn , CreatePolyPolygonRgn , CreateRectRgn

CreateRectRgnIndirect , CreateRoundRectRgn , EqualRgn

ExtCreateRegion , FillRgn , FrameRgn , GetPolyFillMode

GetRegionData , GetRgnBox , InvertRgn , OffsetRgn

PaintRgn , PtInRegion , RectInRegion , SetPolyFillMode

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#4

السلام عليكم

هناك ملاحظة بعد وضع هذا الكود فلا يظهر سوى الصورة فقط اما اذا كان هناك زر مثلا فلا يظهر ما هو الحل

تحيات

عنيزة

#5

السلام عليكم

بالنسبه لسؤالك اخ عنيزه فيمكن حله باستعمال الدوال التي ذكرتها سابقا .

هذه اضافه على الكود الذي وضعه الاخ العزيز newmember

على اعتبار ان لدينا Button1

procedure TForm1.FormCreate(Sender: TObject);
var
Bmp: TBitmap;
//***
btrgn:HRGN;
upper_left,lower_right:TPoint;
//***
begin
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile('h:a.bmp');
FRegion := CreateRegion(Bmp);
//***
upper_left.X:=Button1.Left+4;
upper_left.Y:=Button1.Top+23;  // 23 is the height of blue border
// or u can say the upper-left point of the form's clientrect is x=4,y=23
lower_right.X:=upper_left.X+Button1.Width;
lower_right.Y:=upper_left.Y+Button1.Height;
// At first we create region for the button
btrgn:=CreateRectRgn(upper_left.x,upper_left.Y,lower_right.X,lower_right.Y);
// Then we combine the regions
CombineRgn(FRegion,FRegion,btrgn,RGN_OR	);
//***
SetWindowRGN(Handle, FRegion, True);
finally
Bmp.Free;
end;
end;

هذه فقط محاول سريعه و يمكن لمن له اهتمام في هذا المجال اعتماد نفس الطريقه واستخدام Region Functions للحصول على نتائج افضل .

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#6

مشكور جداً أخ tamee

بالنسبة لملاحظة الأخ عنيزة فأنه لاأعتقد بوجود أى مشكلة فبإمكانك أن تضع أى شى على الصورة وستظهر بإذن الله بس لاتضع الأزرار مثلا على أى لون أبيض فى الصورة لأنه زى ماتشوف اللون الأبيض لايظهر .

bye

#7

السلام عليكم

المشكله التي واجهها الاخ عنيزة لانه وضع الـButton داخل الصوره في منطقه لونها هو اللون المختار كــ TransparentColor( في المثال اللون الابيض) او في منطقه خارج مجال الصوره , لحل المشكله كان لابد من اضافه Region تصم الـ Button و عمل اتحاد بينها و بين الـ Region التابعه للصوره كما في الكود الموضح في ردي السابق .

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…