تغيير شكل الساعة
#4
و عليكم السلام
الطريقة جد سهلة و لا تحتاج الى عمالقة Smile
نبدأ :
أولا عليك تصميم كلاس منبثق من TCustomControl
عدل على الستايل من خلال عمل override ل CreateParams و جعل الستايل WS_POPUP (لأن الكونترول ليس جزءا من الفورم يعني لن تحتاج الى خاصية parent لاظهار الكونترول)
ثانيا يجب عليك الحصول على مقبض التاسك بار TaskBar
ثم مقبض الأب(TrayNotifyWnd) لنافذة الوقت
وأخيرا مقبض نافذة الوقت TrayClockWClass
بعدها نحصل على موقعها باستخدام الدالة GetWindowRect
ثم حساب العرض و الطول و اسنادهما للكونترول الخاص بك
ثالثا تقوم بالرسم على الكونترول من خلال paint
هذا كل مافي الأمر

.jpg   clockwindow.jpg (الحجم : 4.93 ك ب / التحميلات : 85)
هذا مثال على السريع Smile
PHP كود :
type TClockWindow =class(TCustomControl)
       
//By SMP3  .
private
 
ClockWinRect :TRect;

protected
 
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
 
procedure CreateParams(var Params: TCreateParams); override;
 
procedure Paint;override;

public
 
procedure ShowClock();
 
procedure HideClock();
 
constructor Create(AOwner: TComponent); override;
 
destructor Destroy; override;

published
 property Color
;
 
property Font;
end;

{ 
TClockWindow }

constructor TClockWindow.Create(AOwner: TComponent);
var 
TrayClockWClassHandle :HWND;
 
begin
  inherited
;
 
Color :=clWhite;
 
TrayClockWClassHandle:=FindWindow('Shell_TrayWnd',0);//TaskBar Handle
 
TrayClockWClassHandle:=FindWindowEx(TrayClockWClassHandle,0,'TrayNotifyWnd',0);//Parent Clock Handle
 
TrayClockWClassHandle:=FindWindowEx(TrayClockWClassHandle,0,'TrayClockWClass',0);// Final Clock Handle

 
GetWindowRect(TrayClockWClassHandle,ClockWinRect );
 
with ClockWinRect do
 
begin
 Width 
:=Right - Left;
 
Height :=Bottom - Top ;
 
end;
 
Left := ClockWinRect.Left;
 
Top:=ClockWinRect.Top;

end;

procedure TClockWindow.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams
(Params);
    
Params.Style:=WS_POPUP;// Since it is not a part of your Form
                           // it does not requires Parent propretie
end;

destructor TClockWindow.Destroy;
begin

  inherited
;
end;

procedure TClockWindow.HideClock;
begin
HandleNeeded
;
SetWindowPos(Handle, HWND_TOPMOST, Left , Top , Width, Height,
             
SWP_HIDEWINDOW or SWP_NOACTIVATE);

end;

procedure TClockWindow.Paint;
var 
R:TRect ;
Text:String;
begin
 
// Get Curent Time
 
Text :=FormatDateTime('hh:mm', Time);

 
Canvas.Brush.Color := Color;
 
Canvas.FillRect(ClientRect);
 
Canvas.Brush.Color :=ClBlack;
 
R:=ClientRect;
 
// Set Canvas background color to Transparent
 
SetBkMode(Canvas.Handle,TransParent);
 
Canvas.Font:=Font;
 
// Draw and Center Text

 
DrawText(Canvas.Handle,{$IFDEF UNICODE}Text {$ELSE} PAnsiChar (Text){$ENDIF},Length(Text),R,   DT_SINGLELINE or DT_VCENTER or DT_CENTER);

end;

procedure TClockWindow.ShowClock;
begin
HandleNeeded 
;
SetWindowPos(Handle, HWND_TOPMOST, Left , Top , Width, Height,
               
SWP_SHOWWINDOW or SWP_NOACTIVATE);

end;

procedure TClockWindow.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
 Message
.Result:=1;
end; 


الملفات المرفقة
.rar   TClockWindow.rar (الحجم : 162.53 ك ب / التحميلات : 75)
الرد


الردود في هذا الموضوع
تغيير شكل الساعة - بواسطة ع بلال - 27-12-2012, 05:25 PM
تغيير شكل الساعة - بواسطة you_per7 - 31-12-2012, 10:28 AM
تغيير شكل الساعة - بواسطة ع بلال - 01-01-2013, 03:21 PM
تغيير شكل الساعة - بواسطة SMP3 - 01-01-2013, 10:38 PM
تغيير شكل الساعة - بواسطة S.FATEH - 02-01-2013, 03:28 PM
تغيير شكل الساعة - بواسطة SMP3 - 02-01-2013, 04:45 PM
تغيير شكل الساعة - بواسطة S.FATEH - 02-01-2013, 05:12 PM
تغيير شكل الساعة - بواسطة SMP3 - 02-01-2013, 05:59 PM
تغيير شكل الساعة - بواسطة ع بلال - 03-01-2013, 09:29 AM
تغيير شكل الساعة - بواسطة SMP3 - 03-01-2013, 11:42 AM
تغيير شكل الساعة - بواسطة ع بلال - 03-01-2013, 04:54 PM
تغيير شكل الساعة - بواسطة SMP3 - 03-01-2013, 05:22 PM
تغيير شكل الساعة - بواسطة S.FATEH - 25-03-2014, 11:02 AM
تغيير شكل الساعة - بواسطة ع بلال - 26-03-2014, 11:17 AM
تغيير شكل الساعة - بواسطة ع بلال - 21-03-2014, 05:54 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم