أرشيف

Archive for 31 ديسمبر, 2012

Get/Set WindowIcon

ديسمبر 31, 2012 أضف تعليق

السلام عليكم و رحمة الله و بركاته
هذه دالة بسيطة تقوم بجلب مقبض 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;
التصنيفات :Win API

دعم ال VCL Style في SynEdit

ديسمبر 29, 2012 أضف تعليق

هذه محاولة مني لدعم ال VCL Style في مكون SynEdit 

عند تطبيق ال VCL Style فان مكون SynEdit لا يتم دعمه وهذا يعطي انطباعا سيئا في واجهة المستخدم .

بدون تعديل (بدون دعم ل VCL Style )

SynEdit

لدعم ال 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.

النتيجة :

VCLStyleSynEdit

VCLStyleSynEdit2

Download VCL Style SynEdit Source

 

التصنيفات :Components, Delphi, Delphi XE2, VCl Style الوسوم:

SMP Hint Components

ديسمبر 28, 2012 2تعليقان

السلام عليكم و رحمة الله وبركاته

لقد تغيبت كثيرا عن التدوين لفترة .. بسبب ظروف الحياة , أعتذر عن التقصير ..

لقد قررت منذ بضعة أيام تصميم مجموعة من المكونات المجانية و المفتوحة المصدر تحمل اسم SMPCOMPONENTS

لذلك بدأت بهذه المجموعة الصغيرة SMP HINT 

SMP Hint : مجموعة من مكونات Hint تحتوي على خصائص عديدة و متوافقة مع أغلب اصدارات دلفي , كما أنها متوافقة مع ال VCL Style 

تحتوي المجموعة على أربع مكونات 

TAppHintPP

TControlHintPP

TBalloonHintPP (خاص بالاصدارات الحديثة فقط  – دلفي 2009 فما فوق -)

TSMPBalloonHint

SMPBalloonHint

تم اختبار هذه المكونات على نسخ دلفي التالية : دلفي 7 , دلفي 2007 , دلفي XE3

المكونات تعمل بشكل رائع .. ماعدا المكون TSMPBalloonHint فهو غير متوافق 100 % مع دلفي 7 بسبب مشاكل Multi Thread .. لكن مع هذا فيمكن استخدامه

عند تعاملك مع المكون TSMPBalloonHint حاول أن تقوم باسناد جميع الخصائص في وقت التشغيل at run time .. لأني قمت بالتطوير بدون تنصيب المكون و قد اكتفيت بالطرق التقليدية لاختبار المكون .. وهذا سبب جعلني أغفل عن كتابة الشروط الخاصة ب وقت التصميم .

Download SMP Hint Components + Source

التصنيفات :Components, Delphi, Delphi XE2, My Projects الوسوم:,