PDA

View Full Version : تبدیل شکل فرم به عکس روی آن



hamidr
سه شنبه 02 آبان 1385, 09:44 صبح
سلام
میخوام ظاهر فرممو به شکل عکسی که روی آن قرار میدهم در بیاورم
چه کار کنم؟

حتما دیدید که بعضی از فرمها به صورت فانتزی به شکل خاصی است.
مثلا به صورت دایره

ghabil
سه شنبه 02 آبان 1385, 13:37 عصر
عکس رو بزار رو فرمت، یک رنگی که تو عکس نیست رو بعنوان TransparentColorValue فرم انتخاب کن رنگ فرم رو هم بکن همون رنگ، TransParentColor رو هم True کن.
ضمنا چون عکست باید مستطیل باشه قسمتهای اضافه از عکس رو هم که میخوای دیده نشند رو یزار همون رنگ Transparent....

hoshyar
چهارشنبه 03 آبان 1385, 09:20 صبح
سلام دوست عزیز
اول یه عکس به هر شکلی که میخوای تو فتوشاپ یا هر چی ایجاد کن فقط کادر عکس رو سفید بزار حالا یه imag روی فرم بزار و عکسو load کن بعد تو formcreat فرم کد زیرو کپی البته به اسم imag دقت کن اگر اسمشو عوض کردی تو کد هم اونو عوض کن


procedure Tframz.FormCreate(Sender: TObject);
var TransparentColor : TColor;
X,Y,l, dX, dY : integer;
Points : array[0..10000] of TPoint;
Vertex : array[0..5000] of Integer;
CountVertex : integer;
BeginPoligon : Boolean;
P : TPoint;
Region : HRGN;
Incr : Integer;
begin
L:=50;
TForm(Sender).BorderStyle := bsNone;
dY := Height - ClientHeight;
CountVertex := -1;
Incr := 1;
with Image1,Canvas do begin
dX := Left;
inc(dY,Top);
TransparentColor := Pixels[0,0];
Y := 0;
while Y < Height do begin
X := 0;
BeginPoligon := False;
while X < Width do begin
if (not BeginPoligon) and (Pixels[X,Y] <> TransparentColor) then begin
BeginPoligon := True;
P := Point(X + dX,Y + dY);
end;
if BeginPoligon and (Pixels[X,Y] = TransparentColor) then begin
BeginPoligon := False;
inc(CountVertex);
Vertex[CountVertex] := 4;
Points[CountVertex * 4] := P;
Points[CountVertex * 4 + 1] := Point(X + dX, Y + dY);
Points[CountVertex * 4 + 2] := Point(X + dX, Y + Incr + dY);
Points[CountVertex * 4 + 3] := Point(P.X, P.Y + Incr);
end;
inc(X,Incr);
end;
inc(Y,Incr);
end;
end;
Region := CreatePolyPolygonRgn(Points, Vertex, CountVertex, WINDING);
SetWindowRgn(TForm(Sender).Handle, Region, True);
//================================================== =================
V:=Screen.Width;
H:=Screen.Height;
If (V<>800) and (H<>600) Then
Begin
SetResolution(800,600);
End;

//================================================== =================
application.BiDiKeyboard:='00000429';
application.BiDiMode :=bdrighttoleft;
end;

arshia_
یک شنبه 07 آبان 1385, 09:29 صبح
متغیرهای V,H رو تعریف نکردید؟
راستی این چند خط آخر چه ارتباطی به برنامه داره؟
گمون کنم کد برای تغییر زبان و تغییر رزولوشن است
من اونا رو حذف کردم و برنامه اجرا شد
کد جالبی بود
ممنون

hoshyar
یک شنبه 07 آبان 1385, 19:50 عصر
بله درسته من اشتباه کردم اون تیکه آخر برای تغییر رزولوشن چون تو یه برنامه استفاده کرده بودم و ازهمون برنامه هم کدو کپی کردم اشتباه قاطی شده بود

یاسر مددیان
یک شنبه 07 آبان 1385, 22:27 عصر
سلام
دوست عزیز شما باید عکستون رو داخل فتوشاپ با پسوند gif ویا png که transparent دارند ذخیره کنی . بعد با کامپوننت gif یا png اون عکس رو رو فرمت بیاری. سپس کارهایی که آقای کوشا گفتند رو اعمال کنی.
حالا فرمت دیگه نمایش داده نمی شه و اون عکس به جای فرم به نمایش در می آد که می تونه فانتزی هم باشه .

موفق باشی .