چه طور می تونیم در دلفی کاری کنیم که خود فرم مخفی بشه ولی اجزای روی فرم دیده بشن
Printable View
چه طور می تونیم در دلفی کاری کنیم که خود فرم مخفی بشه ولی اجزای روی فرم دیده بشن
یکمی بیشتر توضیح بده.
میخوای برنامه یه صورت رزیدنت کار کنه ویا اینکه ترنسپرنت بشه ؟؟
ببین ، نمی دونم تا حالادیدی یا نه
بعضی نرم افزارا قبل از باز شدن صفحه اولشون در صفحه ای که فرم نداره یه چیزی می نویسن مثلا بسم ا.. من می خوام یه کاری شبیه این بکنم
نمی دونم متوجه شدی یا نه؟؟
سلام
هر چيزي كه روي صفحه نمايش داده ميشود در واقع روي يك فرم قرار دارد(مگر اينكه روي Canvas ميزكار ويندوز چيزي بنويسد) اگر فرم نداشته باشند كه كنترلها ميريزند روي Desktop!
چيزي كه شما دنبال آن هستيد Splash است.
اين صفحه را ببينيد :
کد:http://forum.p30world.com/showthread.php?t=86765&highlight=splash
دوست عزیز در این حالت بازم خود فرم نمایش داده می شهنقل قول:
ببین من منظورم این نیس که فرم نباشه، منظورم اینه که نشون داده نشه
یعنی نوار عنوان و این چیزا نباشه یعنی مثل این که رو دسکتاپ یک متنی رو بنویسیم
سلامنقل قول:
کد:BorderStyle := bsNone
منظورت رو گرفتم. من تا حالا همچین کاری کردم.
یعنی هیچ چیز پشت دکمه ها و ... نباشه. اگر منظورت اینه بگو تا کد بهت بدم.
[/quote]کد:BorderStyle := bsNone
تا اینجاش ممنون حالا رنگش چی؟؟
بابا یعنی انقدر بد توضیح دادم
اگر با Alphabend کار کرده باشین می بینید که همه عناصر فرم رو با هم محو می کنه ولی من می خوام اجزا فرم بمونن و خود فرم به تنهایی محو شه
سلامنقل قول:
اینو توی formcreate بنویس. اینجا از formcreate و اسم رنگ استفاده شده. میتونی مستقیما در قسمت خصوصیات فرم مقادیر عددی یا رنگ دلخواه رو هم بدی.
کد:form1.Color:=clWhite;
form1.TransparentColorValue:=clWhite;
form1.TransparentColor:=true;
موفق باشی
farhad-g1 خیلی خیلی ممنون
بالاخره درس شد.
خیلی لطف کردی
البته اینایی که گفتی به علاوه کدی کهnoneforce گفتن
کد:border style:=bsnone
درسته منظورم همینهنقل قول:
اگه شمام کد دیگه دارین ممنون می شم بدین
پروژه من چندتا فرم داره ، حالا که فرم اول رو محو کردم نمی دونم چرا فرم دو رو پشت اون باز کرده
سلام
خاصیت Visible فرم های دیگه رو False کن.
یک کمپننت برای اینکار داشتم. میگردم پیدا کردم میزارم...
موفق باشی
وقتی این کار رو می کنم ، یک پیغام خطا می ده از فرم 2نقل قول:
و برنامه اجرا نمیشه
این مشکلی که شما میگی ندیدم تا حالا، تست هم کردم ولی اینجوری نشد.نقل قول:
form.showmodal رو امتحان کن.
درس می گی من جای دیگه امتحان کردم هیچ مشکلی نداشت، مشکل از برنامه خودمهنقل قول:
آخه سنگین شده و شلوغ (یکم)
باید بگردم ببینم مشکل از کجاشه!!!!!!!
خیلی ممنون از شما
مشکل حل شد ، نمی دونم چه ربطی داره ولی دستوراتی روکه تو on creat بود رو بردم تو on show بعد درس شد
از همه ممنون
این کد را امتحان کن
Form1.BorderStyle:=bsNone;
Form1.Color:=clBlack;
Form1.TransparentColorValue:=clBlack;
Form1.TransparentColor:=True;
کد بالا به هر چی که رنگش سیاه (clBlack) باشه گیر میده و نشونش نمیده.
با استفاده از تابع زیر که قبلا هم جناب تکنیک برتر زحمت اونو کشیدن می توان فقط فرم رو مخفی کرد:
مثلا اگر توی فرم منوی اصلی باشه و نخواهی که عنوان فرم نشون داده بشه تابع فوق رو اینجوری فراخونی کن:کد:procedure TranparentForm(Form:Tform; HaveCaption, HaveMenu:Boolean);
var
frmRegion,
tempRegion:HRGN;
i:Integer;
Arect:Trect;
begin
frmRegion:=0;
For i:=0 to Form.controlcount -1 do
begin
Arect:=Form.controls[i].BoundsRect;
Offsetrect(Arect,Form.ClientOrigin.x-Form.left,Form.ClientOrigin.y-Form.top);
tempRegion:=CreateRectRgnIndirect(Arect);
if frmRegion=0 then
begin
frmRegion:=tempRegion;
end
else
Begin
CombineRgn(frmRegion,frmRegion,TempRegion,RGN_OR);
DeleteObject(tempRegion);
end;
end;
tempRegion:=0;
If HaveCaption and HaveMenu then
tempRegion:= CreateRectRgn(0,0,Form.Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAME)+
GetSystemMetrics(SM_CYMENU));
If (HaveCaption=false) and HaveMenu then
tempRegion:= CreateRectRgn(0,GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYSIZEFRAmE),Form.Width,
(GetSystemMetrics(SM_CYSIZEFRAmE)+GetSystemMetrics(SM_CYMENU))+GetSystemMetrics(SM_CYCAPTION));
If HaveCaption and (HaveMenu=false) then
tempRegion:= CreateRectRgn(0,0,Form.Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAmE));
If (HaveCaption=false) and (HaveMenu=false) then
tempRegion:= CreateRectRgn(0,0,Form.Width,0);
CombineRgn(frmregion,frmregion,tempregion,rgn_or);
Deleteobject(tempregion);
setwindowrgn(Form.handle,frmregion,true);
end;
کد:procedure TForm1.FormCreate(Sender: TObject);
begin
TranparentForm(Form1, False, True);
end;
فکر کنم منظور شما يه فرم شيشه اي باشه درسته؟؟
اگه منظورت رو درست فهميده باشم!
کد:procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Brush.Style := bsClear;
Form1.BorderStyle := bsNone
end;
البته اگه من منظورت رو درست فهميده باشم اين کدش هست:
مثلا يه ليبل بزار رو فرم و وقتي پروژه رو اجرا کردي ميبيني ليبل نشون داده ميشه اما خود فرم نه!!!
کد:procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Brush.Style := bsClear;
Form1.BorderStyle := bsNone
end;
آخ آخ ببخشيد دوتا شد
با تشکر از همه دوستان
همه راه حل ها جالب بود
اون چیزی که مسلمه اینه که تو برنامه نویسی یک کار رو از چند راه می شه کرد
(شرمنده دیر شد دو هفته بود آن نشدم)