Get/Set WindowIcon
السلام عليكم و رحمة الله و بركاته
هذه دالة بسيطة تقوم بجلب مقبض Icon لأي نافذة عن طريق المقبض
/// <summary> Retrieve the Icon from window handle </summary> function GetWindowIcon(hWin:HWND):HICON; begin Result:=0; if hWin=INVALID_HANDLE_VALUE then Exit; Result :=SendMessage(hWin,WM_GETICON,ICON_SMALL,0); if Result<>0 then Exit; Result :=SendMessage(hWin,WM_GETICON,ICON_BIG,0); if Result<>0 then Exit; Result :=SendMessage(hWin,WM_GETICON,ICON_SMALL2,0); if Result<>0 then Exit; Result :=GetClassLongPtr(hWin, GCL_HICON);; if Result<>0 then Exit; Result :=GetClassLongPtr(hWin, GCL_HICONSM); Result:=0; end;
و هذه دالة تقوم بتغيير ال Icon
/// <summary> Change window icon from <c>Handle</c> </summary> ///<param name="hWin"> Window Handle /// </param> ///<param name="Icon"> the new icon /// </param> ///<param name="IconType"><c> you can use one of this :</c> ///<para>ICON_SMALL = change the window caption icon </para> ///<para>ICON_BIG = change the window TaskBar icon </para> ///<para>ICON_SMALL2 = change the window caption and TaskBar icon </para> /// </param> function SetWindowIcon(hWin:HWND;Icon:HICON; const IconType:integer =ICON_SMALL2 ):Boolean; begin Result:=False; if hWin<>INVALID_HANDLE_VALUE then Result:=(SendMessage(hWin,WM_SETICON,IconType,LPARAM(Icon))>0); end;
مثال للاستعمال :
var NotePadHandle :HWND; NotePadIcon :HICON; NotePadNewIcon:HICON; begin // Get NotePad Handle NotePadHandle:=FindWindow('Notepad',0); // Get NotePad Icon from Handle NotePadIcon:=GetWindowIcon(NotePadHandle); // Draw Current NotePad Icon DrawIcon(Canvas.Handle,0,0,NotePadIcon); NotePadNewIcon:=Application.Icon.Handle; // Change NotePad Icon SetWindowIcon(NotePadHandle,NotePadNewIcon,ICON_SMALL2); end;
دعم ال VCL Style في SynEdit
هذه محاولة مني لدعم ال VCL Style في مكون SynEdit
عند تطبيق ال VCL Style فان مكون SynEdit لا يتم دعمه وهذا يعطي انطباعا سيئا في واجهة المستخدم .
بدون تعديل (بدون دعم ل VCL Style )
لدعم ال VCL Style كل ما أنت بحاجة لفعله هو ارفاق الوحدة VCLStyleSynEdit
(* VCLStyleSynEdit By SMP3 . My Blog : DelphiNews.WordPress.Com . ----------------------------------------------------------- This small unit add the capability to SynEdit to support VCL Style ! ----------------------------------------------------------- *) unit VCLStyleSynEdit; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, SynEdit,SynEditMiscClasses,Vcl.Themes,Vcl.Styles; type TSynEdit = Class(SynEdit.TSynEdit ) private LStyle:TCustomStyleServices; protected procedure CMSTYLECHANGED(var Message:TMessage);message CM_STYLECHANGED; procedure Loaded; override; public procedure UpdateStyle; Constructor Create(AOwner: TComponent); override; End; implementation { TSynEdit } procedure TSynEdit.CMSTYLECHANGED(var Message: TMessage); begin UpdateStyle; Invalidate; end; constructor TSynEdit.Create(AOwner: TComponent); begin inherited; Gutter.Gradient:=True; Gutter.BorderStyle :=gbsRight; UpdateStyle; end; procedure TSynEdit.Loaded; begin inherited; UpdateStyle; end; procedure TSynEdit.UpdateStyle; begin LStyle := TStyleManager.ActiveStyle; if not LStyle.IsSystemStyle then begin Color := LStyle.GetStyleColor(scEdit); with Gutter do begin GradientEndColor :=LStyle.GetSystemColor(clBtnFace); GradientStartColor :=LStyle.GetSystemColor(clWindow); Font.Color :=LStyle.GetSystemColor(clWindowText ); BorderColor :=LStyle.GetStyleColor(scSplitter); end; ActiveLineColor :=LStyle.GetSystemColor(clHighlight); end; end; initialization TStyleManager.Engine.RegisterStyleHook(TSynEdit,TScrollBoxStyleHook); finalization TStyleManager.Engine.UnRegisterStyleHook(TSynEdit,TScrollBoxStyleHook); end.
النتيجة :
Download VCL Style SynEdit Source
SMP Hint Components
السلام عليكم و رحمة الله وبركاته
لقد تغيبت كثيرا عن التدوين لفترة .. بسبب ظروف الحياة , أعتذر عن التقصير ..
لقد قررت منذ بضعة أيام تصميم مجموعة من المكونات المجانية و المفتوحة المصدر تحمل اسم SMPCOMPONENTS
لذلك بدأت بهذه المجموعة الصغيرة SMP HINT
SMP Hint : مجموعة من مكونات Hint تحتوي على خصائص عديدة و متوافقة مع أغلب اصدارات دلفي , كما أنها متوافقة مع ال VCL Style
تحتوي المجموعة على أربع مكونات
TAppHintPP
TControlHintPP
TBalloonHintPP (خاص بالاصدارات الحديثة فقط – دلفي 2009 فما فوق -)
TSMPBalloonHint
تم اختبار هذه المكونات على نسخ دلفي التالية : دلفي 7 , دلفي 2007 , دلفي XE3
المكونات تعمل بشكل رائع .. ماعدا المكون TSMPBalloonHint فهو غير متوافق 100 % مع دلفي 7 بسبب مشاكل Multi Thread .. لكن مع هذا فيمكن استخدامه
عند تعاملك مع المكون TSMPBalloonHint حاول أن تقوم باسناد جميع الخصائص في وقت التشغيل at run time .. لأني قمت بالتطوير بدون تنصيب المكون و قد اكتفيت بالطرق التقليدية لاختبار المكون .. وهذا سبب جعلني أغفل عن كتابة الشروط الخاصة ب وقت التصميم .
Download SMP Hint Components + Source