delphi4arab منتديات دلفي للعرب
[Unit] uWindowStyle - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : مصادر دلفي مفتوحة تعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=14)
+--- الموضوع : [Unit] uWindowStyle (/showthread.php?tid=7419)



[Unit] uWindowStyle - Agmcz - 21-01-2016

السلام عليكم
قمت بكتابة هاتين الدالتين للحاجة
شكرا خاص لأخي SMP3

PHP كود :
{
 
 Coded by Agmcz
  Date
: 21-01-2016
  Thanks to SMP3
  
.......
 
 Added func WS_Ex_Exists (12-03-2016) 
}

unit uWindowStyle;

interface

uses
  Windows
, Classes;

procedure GetWindowStylesList(hWindow: THandle; out StylesList: TStringList);
procedure GetWindowStylesExtendedList(hWindow: THandle; out StylesList: TStringList);
function 
WS_Exists(hWindow: THandle; Style: Integer): Boolean;
function 
WS_EX_Exists(hWindow: THandle; ExStyle: Integer): Boolean;

implementation

procedure GetWindowStylesList
(hWindow: THandle; out StylesList: TStringList);
const
 
 WSStr: array[0..17] of string = (
 
   'WS_OVERLAPPED',
 
   'WS_POPUP',
 
   'WS_CHILD',
 
   'WS_MINIMIZE',
 
   'WS_VISIBLE',
 
   'WS_DISABLED',
 
   'WS_CLIPSIBLINGS',
 
   'WS_CLIPCHILDREN',
 
   'WS_MAXIMIZE',
 
   'WS_CAPTION',
 
   'WS_BORDER',
 
   'WS_DLGFRAME',
 
   'WS_VSCROLL',
 
   'WS_HSCROLL',
 
   'WS_SYSMENU',
 
   'WS_THICKFRAME',
 
   'WS_GROUP',
 
   'WS_TABSTOP');
 
 WSInt: array[0..17] of Integer = (
 
   0,
 
   $80000000,
 
   $40000000,
 
   $20000000,
 
   $10000000,
 
   $8000000,
 
   $4000000,
 
   $2000000,
 
   $1000000,
 
   $C00000,
 
   $800000,
 
   $400000,
 
   $200000,
 
   $100000,
 
   $80000,
 
   $40000,
 
   $20000,
 
   $10000);
var
 
 I, dwOldLong: Integer;
begin
  dwOldLong 
:= GetWindowLong(hWindow, GWL_STYLE);
 
 for I := Low(WSInt) to High(WSInt) do
 
 begin
    if dwOldLong 
or WSInt[I] = dwOldLong then
      StylesList
.Add(WSStr[I]);
 
 end;
end;

procedure GetWindowStylesExtendedList(hWindow: THandle; out StylesList: TStringList);
const
 
 EXWSStr: array[0..23] of string = (
 
   'WS_EX_DLGMODALFRAME',
 
   'WS_EX_NOPARENTNOTIFY',
 
   'WS_EX_TOPMOST',
 
   'WS_EX_ACCEPTFILES',
 
   'WS_EX_TRANSPARENT',
 
   'WS_EX_MDICHILD',
 
   'WS_EX_TOOLWINDOW',
 
   'WS_EX_WINDOWEDGE',
 
   'WS_EX_CLIENTEDGE',
 
   'WS_EX_CONTEXTHELP',
 
   'WS_EX_RIGHT',
 
   'WS_EX_LEFT',
 
   'WS_EX_RTLREADING',
 
   //'WS_EX_LTRREADING',     // = 0;
 
   'WS_EX_LEFTSCROLLBAR',
 
   //'WS_EX_RIGHTSCROLLBAR', // = 0;
 
   'WS_EX_CONTROLPARENT',
 
   'WS_EX_STATICEDGE',
 
   'WS_EX_APPWINDOW',
 
   'WS_EX_OVERLAPPEDWINDOW', // = (WS_EX_WINDOWEDGE or WS_EX_CLIENTEDGE);
 
   'WS_EX_PALETTEWINDOW',    // = (WS_EX_WINDOWEDGE or WS_EX_TOOLWINDOW or WS_EX_TOPMOST);
 
   'WS_EX_LAYERED',
 
   'WS_EX_NOINHERITLAYOUT',
 
   'WS_EX_LAYOUTRTL',
 
   'WS_EX_COMPOSITED',
 
   'WS_EX_NOACTIVATE');
 
 EXWSInt: array[0..23] of Integer = (
 
   1,
 
   4,
 
   8,
 
   $10,
 
   $20,
 
   $40,
 
   $80,
 
   $100,
 
   $200,
 
   $400,
 
   $1000,
 
   0,
 
   $2000,
 
   //0,
 
   $4000,
 
   //0,
 
   $10000,
 
   $20000,
 
   $40000,
 
   WS_EX_OVERLAPPEDWINDOW,
 
   WS_EX_PALETTEWINDOW,
 
   $00080000,
 
   $00100000,
 
   $00400000,
 
   $02000000,
 
   $08000000);
var
 
 I, dwOldLong: Integer;
begin
  dwOldLong 
:= GetWindowLong(hWindow, GWL_EXSTYLE);
 
 for I := Low(EXWSInt) to High(EXWSInt) do
 
 begin
    if dwOldLong 
or EXWSInt[I] = dwOldLong then
      StylesList
.Add(EXWSStr[I]);
 
 end;
end;

function 
WS_Exists(hWindow: THandle; Style: Integer): Boolean;
var
 
 dwOldLong: Integer;
begin
  dwOldLong 
:= GetWindowLong(hWindow, GWL_STYLE);
 
 Result := dwOldLong or Style = dwOldLong;
end;

function 
WS_Ex_Exists(hWindow: THandle; ExStyle: Integer): Boolean;
var
 
 dwOldLong: Integer;
begin
  dwOldLong 
:= GetWindowLong(hWindow, GWL_EXSTYLE);
 
 Result := dwOldLong or ExStyle = dwOldLong;
end;

{
Usage:
//GetWindowStylesList
var
 
 SL: TStringList;
begin
  SL 
:= TStringList.Create;
 
 try
    GetWindowStylesList
(Handle, SL);
 
   //SL
 
 finally
    SL
.Free;
 
 end;
end;

//GetWindowStylesExtendedList
var
 
 SL: TStringList;
begin
  SL 
:= TStringList.Create;
 
 try
    GetWindowStylesExtendedList
(Handle, SL);
 
   //SL
 
 finally
    SL
.Free;
 
 end;
end;

//WS_Exists
begin
  if WS_Exists
(Handle, WS_VISIBLE) then
    
//Exists
end;

//WS_Ex_Exists
begin
  if WS_Ex_Exists
(Handle, WS_EX_LAYERED) then
    
//Exists
end;
}

end. 



RE: GetWindowStylesList, WS_Exists - Bachirsoft - 11-03-2016

السلام عليكم
مشكور اخي على الموضوع ولاكن هاتين الدالتين فيما تستخدم من فضلك، اريد بعض الشرح


RE: GetWindowStylesList, WS_Exists - Agmcz - 12-03-2016

(11-03-2016, 03:08 PM)Bachirsoft كتب : هاتين الدالتين فيما تستخدم من فضلك، اريد بعض الشرح

ثلاث دوال

procedure GetWindowStylesList(hWindow: THandle; out StylesList: TStringList);
procedure GetWindowStylesExtendedList(hWindow: THandle; out StylesList: TStringList);
function WS_Exists(hWindow: THandle; Style: Integer): Boolean;

لو شرحت حالات الاستخدام سأشرح ما قبلها وهذا لن يكفيه بعض الكلمات
لكل Window أنماط
مهما كان (Button, Edit, Listview, Treeview...)
لو كنا نيرمج دون الإستعانه بـ VCL ستكون الأمور واضحة أكثر
عندما نضع مكون Edit في الفورم عند تنفيذ الكود المسؤول في الحقيقة عن إنشاء Edit سيكون شبيه بهذا
PHP كود :
var
 
 hEdit: THandle;
begin
  hEdit 
:= CreateWindowEx(
 
   WS_EX_CLIENTEDGE,
 
   'EDIT',
 
   nil,
 
   ES_LEFT or
 
   ES_NOHIDESEL or
 
   ES_AUTOHSCROLL or
 
   WS_OVERLAPPED or
 
   WS_CHILD or
 
   WS_VISIBLE,
 
   32, 8, 337, 21, Handle, 0, HInstance, nil);
end; 
الدالة CreateWindowEx تقوم بإنشاء Control على حسب المعطيات التي نعطيها لها
أول برامتر للدالة هو (WS_EX_CLIENTEDGE)  
{ Extended Window Styles } إبحث في الوحدة Windows.pas عن هذه الجملة
في هذه الحالة نستخدم الدالة GetWindowStylesExtendedList سترجع لنا ماهو مستخدم
البرامتر الرابع
ES_LEFT or
   ES_NOHIDESEL or
   ES_AUTOHSCROLL or
   WS_OVERLAPPED or
   WS_CHILD or
   WS_VISIBLE,
{ Window Styles } إبحث في الوحدة Windows.pas عن هذه الجملة
وهي مسؤولة عن شكل المكون (إبن أب ظاهر غير ظاهر .....)
في هذه الحالة نستخدم الدالة GetWindowStyles سترجع لنا ماهو مستخدم
أرجوا أن قد وفقت ولو بتلميح بسيط والأمر يتطلب أكثر من هذه الكلمات بالتوفيق


RE: [Unit] uWindowStyle - MarmaR - 18-03-2016

شكرا علي الشرح الجميل