PDA

View Full Version : کمک در مورد یک ساعت عقربه ای



مائده 100
چهارشنبه 06 آذر 1387, 08:54 صبح
با سلام
من هر چی در سایت گشتم برنامه ای در مورد ساعت عقربه ای پیدا نکردم
لطفا اگه کسی برنامه ای در این مورد داره لطفا برام بذاره

merced
چهارشنبه 06 آذر 1387, 09:43 صبح
کامپوننت SRclock

mossaferin
چهارشنبه 06 آذر 1387, 11:34 صبح
سلام
این هم یه برنامه ساده برای ساعت

مائده 100
شنبه 09 آذر 1387, 09:46 صبح
سلام
این هم یه برنامه ساده برای ساعت
اول سلام و دوم تشکر و سوم اگه می شه فرم این ساعت را هم در اختیار من قرار دهید

mossaferin
شنبه 09 آذر 1387, 10:21 صبح
اول سلام و دوم تشکر و سوم اگه می شه فرم این ساعت را هم در اختیار من قرار دهید

سلام
این برنامه کامل می باشد ،منظور شما از "فرم" چیه؟

yalameh
شنبه 09 آذر 1387, 11:29 صبح
چطوری میشه به جای lineto از یک تصویر عقربه ( مثلا فایل PNG , jpg ) استفاده نمود .

مائده 100
یک شنبه 10 آذر 1387, 08:01 صبح
سلام
این برنامه کامل می باشد ،منظور شما از "فرم" چیه؟
خوب موقع اجرا به فرم ایراد می گیره

مائده 100
یک شنبه 10 آذر 1387, 08:08 صبح
خوب موقع اجرا به فرم ایراد می گیره
مرسی مشکلم حل شد
واقعا ساعت زیبایی است

mossaferin
یک شنبه 10 آذر 1387, 10:10 صبح
چطوری میشه به جای lineto از یک تصویر عقربه ( مثلا فایل PNG , jpg ) استفاده نمود .

سلام
ساده ترین حالت اینکه که عقربه مورد نظر رو توسط کد زیر بچرخونی و بصورت ترانسپرنت روی فرم نمایش بدی






Const PixelMax = 32768;
Type
pPixelArray = ^TPixelArray;
TPixelArray = Array[0..PixelMax-1] Of TRGBTriple;

Procedure RotateBitmap_ads(
SourceBitmap : TBitmap;
out DestBitmap : TBitmap;
Center : TPoint;
Angle : Double) ;
Var
cosRadians : Double;
inX : Integer;
inXOriginal : Integer;
inXPrime : Integer;
inXPrimeRotated : Integer;
inY : Integer;
inYOriginal : Integer;
inYPrime : Integer;
inYPrimeRotated : Integer;
OriginalRow : pPixelArray;
Radians : Double;
RotatedRow : pPixelArray;
sinRadians : Double;
begin
DestBitmap.Width := SourceBitmap.Width;
DestBitmap.Height := SourceBitmap.Height;
DestBitmap.PixelFormat := pf24bit;
Radians := -(Angle) * PI / 180;
sinRadians := Sin(Radians) ;
cosRadians := Cos(Radians) ;
For inX := DestBitmap.Height-1 Downto 0 Do
Begin
RotatedRow := DestBitmap.Scanline[inX];
inXPrime := 2*(inX - Center.y) + 1;
For inY := DestBitmap.Width-1 Downto 0 Do
Begin
inYPrime := 2*(inY - Center.x) + 1;
inYPrimeRotated := Round(inYPrime * CosRadians - inXPrime * sinRadians) ;
inXPrimeRotated := Round(inYPrime * sinRadians + inXPrime * cosRadians) ;
inYOriginal := (inYPrimeRotated - 1) Div 2 + Center.x;
inXOriginal := (inXPrimeRotated - 1) Div 2 + Center.y;
If
(inYOriginal >= 0) And
(inYOriginal <= SourceBitmap.Width-1) And
(inXOriginal >= 0) And
(inXOriginal <= SourceBitmap.Height-1)
Then
Begin
OriginalRow := SourceBitmap.Scanline[inXOriginal];
RotatedRow[inY] := OriginalRow[inYOriginal]
End
Else
Begin
RotatedRow[inY].rgbtBlue := 255;
RotatedRow[inY].rgbtGreen := 0;
RotatedRow[inY].rgbtRed := 0
End;
End;
End;
End;



این هم لینک این کد در سایت زیر
http://delphi.about.com/cs/adptips2001/a/bltip1201_4.htm

موفق باشی

yalameh
دوشنبه 11 آذر 1387, 13:01 عصر
سلام
ساده ترین حالت اینکه که عقربه مورد نظر رو توسط کد زیر بچرخونی و بصورت ترانسپرنت روی فرم نمایش بدی






Const PixelMax = 32768;
Type
pPixelArray = ^TPixelArray;
TPixelArray = Array[0..PixelMax-1] Of TRGBTriple;

Procedure RotateBitmap_ads(
SourceBitmap : TBitmap;
out DestBitmap : TBitmap;
Center : TPoint;
Angle : Double) ;
Var
cosRadians : Double;
inX : Integer;
inXOriginal : Integer;
inXPrime : Integer;
inXPrimeRotated : Integer;
inY : Integer;
inYOriginal : Integer;
inYPrime : Integer;
inYPrimeRotated : Integer;
OriginalRow : pPixelArray;
Radians : Double;
RotatedRow : pPixelArray;
sinRadians : Double;
begin
DestBitmap.Width := SourceBitmap.Width;
DestBitmap.Height := SourceBitmap.Height;
DestBitmap.PixelFormat := pf24bit;
Radians := -(Angle) * PI / 180;
sinRadians := Sin(Radians) ;
cosRadians := Cos(Radians) ;
For inX := DestBitmap.Height-1 Downto 0 Do
Begin
RotatedRow := DestBitmap.Scanline[inX];
inXPrime := 2*(inX - Center.y) + 1;
For inY := DestBitmap.Width-1 Downto 0 Do
Begin
inYPrime := 2*(inY - Center.x) + 1;
inYPrimeRotated := Round(inYPrime * CosRadians - inXPrime * sinRadians) ;
inXPrimeRotated := Round(inYPrime * sinRadians + inXPrime * cosRadians) ;
inYOriginal := (inYPrimeRotated - 1) Div 2 + Center.x;
inXOriginal := (inXPrimeRotated - 1) Div 2 + Center.y;
If
(inYOriginal >= 0) And
(inYOriginal <= SourceBitmap.Width-1) And
(inXOriginal >= 0) And
(inXOriginal <= SourceBitmap.Height-1)
Then
Begin
OriginalRow := SourceBitmap.Scanline[inXOriginal];
RotatedRow[inY] := OriginalRow[inYOriginal]
End
Else
Begin
RotatedRow[inY].rgbtBlue := 255;
RotatedRow[inY].rgbtGreen := 0;
RotatedRow[inY].rgbtRed := 0
End;
End;
End;
End;



این هم لینک این کد در سایت زیر
http://delphi.about.com/cs/adptips2001/a/bltip1201_4.htm

موفق باشی

ممنون از جوابتون . ولی نتونستم از برنامه جواب بگیرم . Angle را ایراد می گیره . لطفا یک نمونه پروژه بسازید و بعد اتچ کنید . ممنون

mossaferin
دوشنبه 11 آذر 1387, 17:05 عصر
ممنون از جوابتون . ولی نتونستم از برنامه جواب بگیرم . Angle را ایراد می گیره . لطفا یک نمونه پروژه بسازید و بعد اتچ کنید . ممنون

سلام
من تست کردم مشکلی نداره ، چه ایرادی میگیره؟
کمی بیشتر سعی کنید ، اگه وقت کنم ! چشم