چرا وقتي ت صفحه اول اين تاپيك رو هر كدوم از لينك ها كليك مي كنم همشون يه صفحه رو باز مي كنن؟
چرا وقتي ت صفحه اول اين تاپيك رو هر كدوم از لينك ها كليك مي كنم همشون يه صفحه رو باز مي كنن؟
ظاهرا مشکلی در نرم افزار سایت هست. البته مشکل جدیدی نیست، مدتهاست که این مشکل وجود داره.چرا وقتي ت صفحه اول اين تاپيك رو هر كدوم از لينك ها كليك مي كنم همشون يه صفحه رو باز مي كنن؟
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
سلام
چطور می تونم از مسیر دایرکتوری که هستم یک level بالاتر رو ببینم
تبدیل RGB به CMYK
اين كه يه مطلب ديگه رو باز ميكنه :(
سلام
حتماً اتفاق افتاده كه موقع طراحي و استفاده از كد رنگها مجبور شدين كد دسيمال رنگهاي RGB رو به هگز يا برعكسش (از هگز به دسيمال) تبديل كنيد.
اين برنامه اين كار رو براي شما ساده كرده:
اين هم لينك برنامه: http://www.box.net/shared/8khbb35sht
اين هم لينك سورسش: http://www.box.net/shared/do719djogl
.
سلام دوستان
من فرمول محاسبه ی نرخ یک برنامه رو در سایت دیدم و برای کاربرد راحتتر برای خودم برنامهی محایبه کننده ی اون را ساختم حالا اگه کسی نیاز داره این کارشو راحت می کنه.
با تشکر فراوان
لینکهای آخر فهرست ، اشتباها همه به تغییر ولیوم اشاره میکند
مشکل از نرم افزار سایت هست.لینکهای آخر فهرست ، اشتباها همه به تغییر ولیوم اشاره میکند
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
کد بستن Alt + F4 :
if (key =VK_F4 ) And ( ssAlt in shift ) then Key:=0
کد On Top کردن فرم :
procedure TForm1.FormShow(Sender: TObject);beginSetWindowPos(Form1.Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);end;
جناب آقای babak_delphi دست شما درد نکند تست زدم درست کار می کند
حال آیا می توان با استفاده از کلیک های Up , Down و با توجه به Taborder های تعریف شده
حرکت کرد (راهی شبیه به راه عنوان شده)
با تشکر
آخرین ویرایش به وسیله Mah6447 : چهارشنبه 01 آبان 1387 در 20:03 عصر
Uses ..., axctrls;
procedure TForm1.Open1Click(Sender: TObject);
var
f : TFileStream;
graphic : TOleGraphic;
begin
if OpenDialog1.Execute then
begin
graphic := TOleGraphic.Create;
f := TFileStream.Create (OpenDialog1.FileName,
fmOpenRead or fmShareDenyNone);
try
graphic.LoadFromStream(f);
Image1.Picture.Assign(graphic);
finally
f.Free
end
end
end;
تبدیل اشیاء موجود در فرم به تصویر
توضیح با یک مثال:
یک استرینق گراید در فرم داریم می خواهیم تصویری از محتویاتش در فرم داشته باشیم:
uses clipbrd;
procedure TForm1.Button1Click(Sender: TObject);
var
CopiaGRID : TBitmap;
begin
CopiaGRID := TBitmap.Create;
CopiaGRID.Width := StringGrid1.Width;
CopiaGRID.Height := StringGrid1.Height ;
StringGrid1.PaintTo (CopiaGRID.Canvas.Handle, 0, 0);
clipboard.assign(CopiaGRID);
CopiaGRID.Destroy;
end;
حالا تصویر استرینق گراید ما در کلیپ برد موجود است و با دستور زیر در یک Timag لود می کنیم:
procedure TForm1.Button2Click(Sender: TObject);
var
bmp: TBitmap;
begin
if Clipboard.HasFormat(CF_PICTURE) then
begin
bmp := TBitmap.Create;
try
bmp.Assign(Clipboard);
Image1.Picture.Bitmap.Assign(bmp);
except
// Can't convert
end;
bmp.Free;
end else
begin
ShowMessage('تصويري در حافظه مو جود نيست');
end;
end;
توضیح با مثال:
یک استرینق گراید در فرم داریم می خواهیم تصویری از محتویاتش در یک TImage داشته باشیم:
با فرمان زیر تصویر استرینق گراید را به حافظه کلیپ برد منتقل می کنیم:
uses clipbrd;
procedure TForm1.Button1Click(Sender: TObject);
var
CopiaGRID : TBitmap;
begin
CopiaGRID := TBitmap.Create;
CopiaGRID.Width := StringGrid1.Width;
CopiaGRID.Height := StringGrid1.Height ;
StringGrid1.PaintTo (CopiaGRID.Canvas.Handle, 0, 0);
clipboard.assign(CopiaGRID);
CopiaGRID.Destroy;
end;
حالا به دستور زیر تصویر را در یک TImage فرا خوانی می کنیم:
procedure TForm1.Button2Click(Sender: TObject);
var
bmp: TBitmap;
begin
if Clipboard.HasFormat(CF_PICTURE) then
begin
bmp := TBitmap.Create;
try
bmp.Assign(Clipboard);
Image1.Picture.Bitmap.Assign(bmp);
except
// Can't convert
end;
bmp.Free;
end else
begin
ShowMessage('تصويري در حافظه مو جود نيست');
end;
end;
در پست شماره 252 یک بار توضیح دادم.ما هر قسمتی را روش کلیک می کنیم فقط بخش تغییر vllow سیستم را می آره
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
کسانی که از بانک اطلاعاطی پارادوکس استفاده ميکنن برای جلوگيری از تخريب فايل و حذف فيزيکی رکوردها از جداول اطلاعاتی هرچند وقت يکبار اقدامبه فشرده کردن جدول کنند تابع زير که به paradoxpack موسوم است جهت فشرده كردن جداول پارادوكس ارائه ميشود
يونيتDBIPROCS را به قسمت uses اضافه کنید
procedure TForm1.ParadoxPack(Tabela: TTable);
var TBDesc: CRTblDesc;
hDb: hDbiDb;
CaminhoTabela: array[0..dbiMaxPathLen] of char;
begin
If not Tabela.Active then
Tabela.Open;
FillChar(TBDesc,Sizeof(TBDesc),0);
With TBDesc do begin
StrPCopy(szTblName,Tabela.TableName);
StrPCopy(szTblType,szParadox);
bPack:=True;
end;
hDb:=nil;
Check(DbiGetDirectory(Tabela.DBHandle,True,Caminho Tabela));
Tabela.Close;
Check(DbiOpenDatabase(nil,'STANDARD',dbiReadWrite, dbiOpenExcl,nil,0,nil,nil,hDb) );
Check(DbiSetDirectory(hDb,CaminhoTabela));
Check(DBIDoRestructure(hDb,1,@TBDesc,nil,nil,nil,F alse));
Tabela.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ParadoxPack(Table1);
end;
خیلی ها از بانک اطلاعاتی اکسس تو برنامه هاشون استفاده میکنن
این کد برای فشرده سازی و تعمیر بانک های اکسس
uses
ComObj;
function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var
v: OLEvariant;
begin
Result := True;
try
v := CreateOLEObject('JRO.JetEngine');
try
V.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4. 0;Data Source='+DB,
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+'x;Jet OLEDB:Engine Type=5');
DeleteFile(DB);
RenameFile(DB+'x',DB);
finally
V := Unassigned;
end;
except
Result := False;
end;
end;
کدی برای تست روشن بودن چراغ های سه گانه
public
procedure CheckCapslock;
procedure CheckNumlock;
procedure CheckInslock;
procedure CheckScrlock;
{ public declarations }
end;
procedure TForm1.CheckCapslock;
begin
if Odd (GetKeyState (VK_CAPITAL)) then
StatusBar1.Panels[1].Text := 'Caps'
else
StatusBar1.Panels[1].Text := '';
end;
procedure TForm1.CheckNumlock;
begin
if Odd (GetKeyState (VK_NUMLOCK)) then
StatusBar1.Panels[2].Text := 'Num'
else
StatusBar1.Panels[2].Text := '';
end;
procedure TForm1.CheckInslock;
begin
if Odd (GetKeyState (VK_INSERT)) then
StatusBar1.Panels[3].Text := 'Ins'
else
StatusBar1.Panels[3].Text := '';
end;
procedure TForm1.CheckScrlock;
begin
if Odd (GetKeyState (VK_SCROLL)) then
StatusBar1.Panels[4].Text := 'Scr'
else
StatusBar1.Panels[4].Text := '';
end;
procedure TForm1. Timer1Timer(Sender: TObject);
begin
CheckCapslock;
end;
procedure TForm1. Timer2Timer(Sender: TObject);
begin
CheckNumlock;
end;
procedure TForm1. Timer3Timer(Sender: TObject);
begin
CheckInslock;
end;
procedure TForm1. Timer4Timer(Sender: TObject);
begin
CheckScrlock;
end;
کدی برای بزرگ کردن حرف اول در ادیت باکس ها
[CODE]CODE]
procedure TForm1.DBEdit1Change(Sender: TObject);
var
Cursor : Integer;
begin
if DBEdit1.Text <> '' then
begin
Cursor:=DBEdit1.SelStart;
DBEdit1.Text := UpperCase(Copy(DBEdit1.Text,1,1)) +
LowerCase(Copy(DBEdit1.Text,2,Length(DBEdit1.Text) ));
DBEdit1.SelStart := Cursor;
end;
end;
[/
سلام
ببخشيد ميخواستم بدونم چه طوري ميشه فونت را به فايل اجرايي(exe) در دلفي اضافه كنيم.
email:alireza2756@gmail.com
سلام
من یه مشکل بزرگ دارم اگه بهم کمک کنید ممنون میشم مشکل من اینه که :
بعد از این که اطلاعاتم رو ذخیره می کنم با بستن برنامه و ویا خاموش کردن کامپیوتر اطلاعات ذخیره شده حذف می شود تو رو خدا کمکم کنید . راه حل رو بهم بگید
سلام مجدد
برنامه من برای یه شرکته که تمام حساب های دفتری اونها رو می خوام به برنامه تبدیل کنم این برنامه کارهای زیر رو اجام میده :
1- ثبت کردن اطلاعات
2 - ویرایش اطلاعات
3- حذف اطلاعات
و جستجو که این برنامه چون برای یه مرکز ISP است بطور مثال با وارد کردن شماره تلفن اطلاعات خواسته شده رو نمایش دهد
مشکل من حالا اینه اون اطلاعات مربوط به یک نفر رو که ذخیره می کنم باید باشه که بتونم کارهای دیگگگه رو انجام بدم نه اینکه هر روز صبح کاربر اطلاعات رو دوباره ذخیره کنه چون می خواهیم با این برنامه حساب های دفتری رو ببندیم تو رو خدا کمکم کنید
مشکل شما اون پایگاه داده ای هست که استفاده می کنید.
من معمولا از اکسس استفاده می کنم و با دستور post که بعد از هر بار وارد کردن اطلاعاتم انجام میشه ، اطلاعاتم از بین نمی ره ، حتی اگه وسط کار برق قطع بشه.
سلام
من با access کار کردم ولی نمی دونم چه طوری اونو با دلفی ارتباط بدم اگه میشه منو راهنمایی کنید کتاب هم خوندم ولی چیزی داخلش نبوده
یه سوالبطور مثال در پارادوکس نام فیلدها رو می نویسیم
در accessهم بهمون طریقی که جدولها رو ایجاد می کردیم ابتدا database بعد ساختن جدول و در کل ذخیره کردن اون بعد که اونو ذخیره کردم چه طوری به دلفی معرفی کنم که دلفی بتونه اونو بشناسه تو رو خدا کمکم کنید
عناصر:
1) ADOTable1 از صفحه ADO
2)DBGrid1
3) DataSource1
خاصیت dataset عنصر DataSource1 را ADOTable1 انتخاب کنید
خاصیت DataSource عنصر DBGrid1 را DataSource1 انتخاب کنید
خاصیت ConnectionString عنصر ADOTable1 را کلیک کرده گزینه Use ConnectionString را انتخاب و دکمه build را کلیک کنید در صفحه بعد گزینه Microsoft.Jet.OLEDB.4.0 را انتخاب و دکمه next را کلیک کنید در صفحه Connection مسیر فایل اکسس ذخیره شده را انتخاب و دکمه ok را کلیک کنید.
حال خاصیت Tablename عنصر ADOTable1 را جدول مورد نظر ساخته شده در فایل اکسس انتخاب کنید و در آخر خاصیت active عنصر ADOTable1 را true کنید
بیشتر دستوراتی که باید با عنصر ADOTable استفاده کنید همانند عنصر Table هست.
موفق باشید.
عناصر:
1) ADOTable1 از صفحه ADO
2)DBGrid1
3) DataSource1
خاصیت dataset عنصر DataSource1 را ADOTable1 انتخاب کنید
خاصیت DataSource عنصر DBGrid1 را DataSource1 انتخاب کنید
خاصیت ConnectionString عنصر ADOTable1 را کلیک کرده گزینه Use ConnectionString را انتخاب و دکمه build را کلیک کنید در صفحه بعد گزینه Microsoft.Jet.OLEDB.4.0 را انتخاب و دکمه next را کلیک کنید در صفحه Connection مسیر فایل اکسس ذخیره شده را انتخاب و دکمه ok را کلیک کنید.
حال خاصیت Tablename عنصر ADOTable1 را جدول مورد نظر ساخته شده در فایل اکسس انتخاب کنید و در آخر خاصیت active عنصر ADOTable1 را true کنید
بیشتر دستوراتی که باید با عنصرADOTable استفاده کنید همانند عنصرTable هست.
موفق باشید.
یه برنامه شبیه Magnifier ویندوز
باسلام وتشکّر:
من روی هر لینکی که کلیک می کنم اون لینک باز نمی شه؟
با سلام
اكثر لينكهاي فوق اشتباها به "تغییر Volume ویندوز" منتهي ميشوند
من با لينك "غير فعال كردن دگمه Close در فرم" كار داشتم ولي كليك روي آن صفحه "تغییر Volume ویندوز" را باز ميكند
در صورت امكان اصلاح نماييد
با تشكر
هاشمي
hashemi-te@esfahansteel.com
StatusBar می باشد. انجام این کار بسیار ساده است. برای این کار کافی است بر روی فرم خود یک StatusBar اضافه نمایید حالا در قسمت تعاریف متغیر های عمومی کد زیر را بنویسید:StatusBarروی ProgressBar نصب
ProgressBar1: TprogressBar;
در ادامه دستورات زیر را در خاصیت OnCreate فرم خود بنویسید:var
ProgressBarStyle: LongInt;
begin
{create a run progress bar in the status bar}
ProgressBar1 := TProgressBar.Create(StatusBar1);
ProgressBar1.Parent := StatusBar1;
{remove progress bar border}
ProgressBarStyle := GetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE);
ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE;
SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle);
{set progress bar position and size - put in Panel[2]}
ProgressBar1.Left := StatusBar1.Panels.Items[0].Width +
StatusBar1.Panels.Items[1].Width + 4;
ProgressBar1.Top := 4;
ProgressBar1.Height := StatusBar1.Height - 6;
ProgressBar1.Width := StatusBar1.Panels.Items[2].Width - 6;
{set range and initial state}
ProgressBar1.Min := 0;
ProgressBar1.Max := 100;
ProgressBar1.Step := 1;
ProgressBar1.Position := 0;
end;
حالا برای آنکه پس از خارج شدن از فرم حافظه اشغال شده آزاد گردد، در قسمتOnDestroy در Event فرمتان دستور زیر را اضافه نمایید:
ProgressBar1.free;
تغییر Hint برای هر ستون از DBGrid در دلفیابتدا باید یک عنصر جدید مبتنی بر TDBGrid ایجاد کنید و رویداد OnMouseMove را فراخوانی کنید:type
TMyDBGrid = class(TDBGrid)
published
property OnMouseMove;
end;
اگرچه شما در رویدادOnMouseMove مختصات X و Y را بدست خواهید آورد، اما شما باید ستون مورد نظر را پیدا کنید. برای ادامه کار لازم است که سطر زیر را در قسمت protected قرار دهید:procedure WMMouseMove(var Message : TWMMouse); message WM_MOUSEMOVE;
همچنین متغیر های زیر را در قسمت public اضافه نمایید:
MouseRow : integer;
MouseCol : integer;
بنابراین متد WMMouseMove بصورت ریر خواهد بود:
procedure TMyDBGrid.WMMouseMove(var Message : TWMMouse);
var
t : TGridCoord;
begin
t := MouseCoord(Message.XPos, Message.YPos);
MouseCol := t.x;
MouseRow := t.y;
inherited;
end;
ما ابتدا فیلدهایXPost و YPos را از ساختار WMMouseMove تنظیم میکنیم:procedure TForm2.MyDBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
Integer);
begin
if (((dgIndicator in MyDBGrid1.Options) and (MyDBGrid1.MouseCol > 0)) or
((not (dgIndicator in MyDBGrid1.Options)) and (MyDBGrid1.MouseCol <> -1)))
and (MyDBGrid1.MouseCol <> OldMouseCol) then begin
OldMouseCol := MyDBGrid1.MouseCol;
if dgIndicator in MyDBGrid1.Options then
MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol - 1].FieldName
else
MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol].FieldName;
end;
end;
حالا مجددا" تعریف زیر را در قسمتpublic قرار دهید:
HintMouseMessage(Control : TControl; var Message : TMessage)
در قسمت OnMouseMove از TDBGrid نیز فرامین زیر را اضافه نمایید:var
r : TMessage;
begin
Application.HintMouseMessage(self, r);
TWMMouse(r).XPos := X;
TWMMouse(r).YPos := Y;
Application.HintMouseMessage(MyDBGrid1, r);
end;
نمایش میزان كپی شدن فایل با ProgressBar در دلفیچطور میتوان زمان کپی شدن فایل را با استفاده از ProgressBar نمایش داد؟
برای انجام این کار ابتدا بر روی یک فرم یک ProgressBar اضافه کنید سپس تابع زیر را تایپ کنید:procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var
FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
begin
AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
with Progressbar1 do
begin
Min := 0;
Max := FileLength;
while FileLength > 0 do
begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
Position := Position + NumRead;
end;
CloseFile(FromF);
CloseFile(ToF);
end;
end;
در این تابع شما در واقع فایل مبدا را خوانده و در مقصد مینویسید. حالا یک دکمه اضافه کرده کد زیر رو اضافه نمایید:procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFileWithProgressBar1('c:\Welcome.exe', 'c:\temp\Welcome.exe');
end;
چطور می توان زمان کپی شدن فایل را محاسبه و نمایش داد؟
برای این کار نیز میتوانید از تابع زیر استفاده کنید:procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var
FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
t1, t2: DWORD;
maxi: integer;
begin
AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
with Progressbar1 do
begin
Min := 0;
Max := FileLength;
t1 := TimeGetTime;
maxi := Max div 4096;
while FileLength > 0 do
begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
t2 := TimeGetTime;
Min := Min + 1;
// Show the time in Label1
label1.Caption := FormatFloat('0.00', ((t2 - t1) / min * maxi - t2 + t1) / 100);
Application.ProcessMessages;
Position := Position + NumRead;
end;
CloseFile(FromF);
CloseFile(ToF);
end;
end;
در این تابغ ابتدا زمان اولیه در متغیرt1 ذخیره شده و سپس پس از کپی شدن هر قسمت از فایل، زمان در متغیر t2 ذخیره میشود و توسط فرمول زیر مقدار زمان باقی مانده تا کپی کامل فایل بدست می آید.((t2 - t1) / min * maxi - t2 + t1) / 100
بازی حدس زدن عدد.مثبت یعنی عدد و مکانش درسته،منفی یعنی فقط عدد درسته و جاش غلطه!
سلام.من با لينك "غير فعال كردن دگمه Close در فرم" كار داشتم ولي كليك روي آن صفحه "تغییر Volume ویندوز" را باز ميكند
غیرفعال کردن دکمه Close در SystemMenu :
Var
hMenuHandle: Integer;
Begin
hMenuHandle := GetSystemMenu(Handle, False);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
End;
فعال کردن دکمه Close در SystemMenu :
Var
hMenuHandle:Integer;
Begin
hMenuHandle := GetSystemMenu(Handle, True);
if (hMenuHandle <> 0) then
EnableMenuItem(hMenuHandle,SC_CLOSE,MF_BYCOMMAND OR MF_ENABLED);
End;
یه برنامه برای محاسبه هزینه تلفن و اینترنت یه چیزی شبیه DialSpy البته در اندازه های کوچیکتر
ممنون میشم اگه نظر بدین واشکالاتم رو بگید.
البته بیشترش حاصل کد ها و راه نمایی های خودتونه!
یک قسمت دیگه به برنا مه اضافه کردم که به صورت خودکار پروسه های مورد نظر رو اجرا یا متوقف کنه.
من خودم عادت دارم وقتی به اینترنت وصل میشم آنتی ویروس رو راه اندازی میکنم و پس از قطع ارتباط میبندمش قسمت اظافه شده این کار رو انجام میده.(آخر تن پروری!)
و برخی برنامه ها هم در هنگام اتصال باید بسته باشن تا تقلبی بودن شون توسط سرور معلوم نشه و از کار نیفتن مثل مجموعه CS4.
(سه فایل زیپ 1و2و3 را داخل یک پوشه خالی کنید)
آخرین ویرایش به وسیله hadiaj168 : دوشنبه 14 اردیبهشت 1388 در 23:05 عصر
در رويداد FormCreate ابتدا يك متغير تعريف مي كنيم :
سپس با استفاده از كد زير ابتدا يك بيضي ساخته و سپس فرم را به شكل اين بيضي در مي آوريم:
var h: THandle;
h := CreateEllipticRgn(40,40,300,200);
SetWindowRgn(form1.Handle,h,TRUE);