23-10-2012, 08:30 PM
مقدمة :احتجت قديما عندما انتهيت من برمجة Window Spy الى دالة تقوم بالحصول على ال Class Styles , لكن لضيق الوقت لم أتمكن من كتابة الدالة و خصوصا أن الاصدار مر عليه عامين و لا يزال Beta .لذلك اكتفيت بعرض القيمة التي تعيدها الدالة GetClassLong
المهم اليوم لقيت بعض الوقت و تفكرت الموضوع .. لكن للأسف فقد أضعت السورس كود ..
على كل حال لقد قمت بكتابة الدالة أملا أن أقوم بتطوير اصدار جديد من Window Spy
عليك أن تعرف عزيزي القارئ أن اسناد أكثر من ستايل للكلاس يتم عن طريق استخدام تعليمة الجمع المنطقي OR
[/COLOR]
تعليمة OR هي تعليمة جمع منطقية , من خصائصها :
باستغلالها قمت بكتابة هذه الدالة البسيطة لعمل Enum ل Window Class Styles
استعمال الاجراء :
PHP كود :
ClassStyle:=GetClassLong(WinHandle,GCL_STYLE );
على كل حال لقد قمت بكتابة الدالة أملا أن أقوم بتطوير اصدار جديد من Window Spy
عليك أن تعرف عزيزي القارئ أن اسناد أكثر من ستايل للكلاس يتم عن طريق استخدام تعليمة الجمع المنطقي OR
إقتباس ::From MSDN[COLOR="Red"]مثال :
Class Styles
The class styles define additional elements of the window class. Two or more styles can be combined by using the bitwise OR (|) operator. To assign a style to a window class, assign the style to the style member of the WNDCLASSEX structure. For a list of class styles, see Window Class Styles.
[/COLOR]
PHP كود :
var wc: TWndClass;
begin
wc.Style:= CS_VREDRAW or CS_HREDRAW;
end;
PHP كود :
a or a = a // 8 or 8=8
//***********************
b = a or c or d
x = b or c // => x = b
(*
ex :
b = 8 or 6 or 2 // => b= 14
x = b or 6 // x=b=14
*)
//*********************
PHP كود :
procedure EnumClassStyles(ClassStyle :integer; out sClass_Styles_List : TStringList);
// By SMP3
const VClassStyles:array [0..11]of integer =(CS_BYTEALIGNCLIENT,CS_BYTEALIGNWINDOW
,CS_CLASSDC,CS_DBLCLKS,
CS_DROPSHADOW,CS_GLOBALCLASS
,CS_HREDRAW,CS_NOCLOSE,CS_OWNDC
,CS_PARENTDC,CS_SAVEBITS,
CS_VREDRAW);
SClassStyles:array [0..11]of string =('CS_BYTEALIGNCLIENT','CS_BYTEALIGNWINDOW',
'CS_CLASSDC','CS_DBLCLKS',
'CS_DROPSHADOW','CS_GLOBALCLASS',
'CS_HREDRAW','CS_NOCLOSE','CS_OWNDC',
'CS_PARENTDC','CS_SAVEBITS',
'CS_VREDRAW');
var
TempClassStyles:integer;
i:integer;
begin
if not assigned(sClass_Styles_List) then
sClass_Styles_List:=TStringList.Create;
TempClassStyles:=ClassStyle;
for i := 0 to 11 do begin
if(ClassStyle or VClassStyles[i])=TempClassStyles then
sClass_Styles_List.Add(SClassStyles[i])
end;
استعمال الاجراء :
PHP كود :
var
ClassStyle:integer;
sList:TStringList;
WinHandle:HWND;
begin
sList:=nil;
sList:=TStringList.Create;
WinHandle:=Handle; // $00050B7A ;
self.WinHandleEdit.Text :=IntToHex(WinHandle,8);
ClassStyle:=GetClassLong(WinHandle,GCL_STYLE );
self.ClassStyleEdit.Text :=IntToHex(ClassStyle,8);
EnumClassStyles(ClassStyle,sList);
self.ClassStylesListBox.Items:=sList ;
sList.Free ;
end;
كود :
http://delphinews.files.wordpress.com/2012/10/enum-window-class-styles.png