Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

Разложить стиль окна   Найти похожие ветки 

 
сосед   (2007-12-14 16:25) [0]

Нет ли чего нибудь попроще(постандартнее, покрасивше... правильнее) чем вот это:

function GetWindowStyle(const Wnd: HWND; Lst: TStrings): Integer;
begin
 Result := GetWindowLong(Wnd, GWL_STYLE);
 if not Assigned(LSt) or (Result=0) then Exit;
 if Result and WS_OVERLAPPED = WS_OVERLAPPED     then Lst.Add("WS_OVERLAPPED");
 if Result and WS_POPUP = WS_POPUP               then Lst.Add("WS_POPUP");
 if Result and WS_CHILD = WS_CHILD               then Lst.Add("WS_CHILD");
 if Result and WS_MINIMIZE = WS_MINIMIZE         then Lst.Add("WS_MINIMIZE");
 if Result and WS_VISIBLE = WS_VISIBLE           then Lst.Add("WS_VISIBLE");
 if Result and WS_DISABLED = WS_DISABLED         then Lst.Add("WS_DISABLED");
 if Result and WS_CLIPSIBLINGS = WS_CLIPSIBLINGS then Lst.Add("WS_CLIPSIBLINGS");
 if Result and WS_CLIPCHILDREN = WS_CLIPCHILDREN then Lst.Add("WS_CLIPCHILDREN");
 if Result and WS_MAXIMIZE = WS_MAXIMIZE         then Lst.Add("WS_MAXIMIZE");
 if Result and WS_CAPTION = WS_CAPTION           then Lst.Add("WS_CAPTION");
 if Result and WS_BORDER = WS_BORDER             then Lst.Add("WS_BORDER");
 if Result and WS_DLGFRAME = WS_DLGFRAME         then Lst.Add("WS_DLGFRAME");
 if Result and WS_VSCROLL = WS_VSCROLL           then Lst.Add("WS_VSCROLL");
 if Result and WS_HSCROLL = WS_HSCROLL           then Lst.Add("WS_HSCROLL");
 if Result and WS_SYSMENU = WS_SYSMENU           then Lst.Add("WS_SYSMENU");
 if Result and WS_THICKFRAME = WS_THICKFRAME     then Lst.Add("WS_THICKFRAME");
 if Result and WS_GROUP = WS_GROUP               then Lst.Add("WS_GROUP");
 if Result and WS_TABSTOP = WS_TABSTOP           then Lst.Add("WS_TABSTOP");
 Lst.Add("");
 if Result and WS_MINIMIZEBOX = WS_MINIMIZEBOX   then Lst.Add("WS_MINIMIZEBOX");
 if Result and WS_MAXIMIZEBOX = WS_MAXIMIZEBOX   then Lst.Add("WS_MAXIMIZEBOX");
 Lst.Add("");
 if Result and WS_TILED = WS_TILED               then Lst.Add("WS_TILED");
 if Result and WS_ICONIC = WS_ICONIC             then Lst.Add("WS_ICONIC");
 if Result and WS_SIZEBOX = WS_SIZEBOX           then Lst.Add("WS_SIZEBOX");
 Lst.Add("");
 Lst.Add("[Common Window Styles]");
 if Result and WS_OVERLAPPEDWINDOW = WS_OVERLAPPEDWINDOW then Lst.Add("WS_OVERLAPPEDWINDOW");
 if Result and WS_TILEDWINDOW = WS_TILEDWINDOW   then Lst.Add("WS_TILEDWINDOW");
 if Result and WS_POPUPWINDOW = WS_POPUPWINDOW   then Lst.Add("WS_POPUPWINDOW");
 if Result and WS_CHILDWINDOW = WS_CHILDWINDOW   then Lst.Add("WS_CHILDWINDOW");
end;


И еще одна такая же для GWL_EXSTYLE


 
Anatoly Podgoretsky ©   (2007-12-14 16:29) [1]

> сосед  (14.12.2007 16:25:00)  [0]

В цикле и массив констант?
Но проще нельзя, здесь самое простое, линейное исполнение.


 
clickmaker ©   (2007-12-14 16:34) [2]


> сосед   (14.12.07 16:25)

по-проще - вряд ли, а по красивше
type TStyleNames = record
 Style: Cardinal;
 Name: string;
end;

забить константный массив записей, в цикле проверять текущий стиль and R[i].Style then Lst.Add(R[i].Name)


 
сосед   (2007-12-14 17:38) [3]


> Anatoly Podgoretsky ©   (14.12.07 16:29) [1]


> clickmaker ©   (14.12.07 16:34) [2]


Спасибо.

Получилось вот так:
type
TStyleName = record
 Style: Cardinal;
 Name: String;
end;

const
 STYLE_NAMES: array [0..26] of TStyleName =(
              (Style: WS_OVERLAPPED;       Name: "WS_OVERLAPPED"),
              (Style: WS_POPUP;            Name: "WS_POPUP"),
              (Style: WS_CHILD;            Name: "WS_CHILD"),
              (Style: WS_MINIMIZE;         Name: "WS_MINIMIZE"),
              (Style: WS_VISIBLE;          Name: "WS_VISIBLE"),
              (Style: WS_DISABLED;         Name: "WS_DISABLED"),
              (Style: WS_CLIPSIBLINGS;     Name: "WS_CLIPSIBLINGS"),
              (Style: WS_CLIPCHILDREN;     Name: "WS_CLIPCHILDREN"),
              (Style: WS_MAXIMIZE;         Name: "WS_MAXIMIZE"),
              (Style: WS_CAPTION;          Name: "WS_CAPTION"),
              (Style: WS_BORDER;           Name: "WS_BORDER"),
              (Style: WS_DLGFRAME;         Name: "WS_DLGFRAME"),
              (Style: WS_VSCROLL;          Name: "WS_VSCROLL"),
              (Style: WS_HSCROLL;          Name: "WS_HSCROLL"),
              (Style: WS_SYSMENU;          Name: "WS_SYSMENU"),
              (Style: WS_THICKFRAME;       Name: "WS_THICKFRAME"),
              (Style: WS_GROUP;            Name: "WS_GROUP"),
              (Style: WS_TABSTOP;          Name: "WS_TABSTOP"),
              (Style: WS_MINIMIZEBOX;      Name: "WS_MINIMIZEBOX"),
              (Style: WS_MAXIMIZEBOX;      Name: "WS_MAXIMIZEBOX"),
              (Style: WS_TILED;            Name: "WS_TILED"),
              (Style: WS_ICONIC;           Name: "WS_ICONIC"),
              (Style: WS_SIZEBOX;          Name: "WS_SIZEBOX"),
              (Style: WS_OVERLAPPEDWINDOW; Name: "WS_OVERLAPPEDWINDOW"),
              (Style: WS_TILEDWINDOW;      Name: "WS_TILEDWINDOW"),
              (Style: WS_POPUPWINDOW;      Name: "WS_POPUPWINDOW"),
              (Style: WS_CHILDWINDOW;      Name: "WS_CHILDWINDOW"));
 EXTSTYLE_NAMES: array [0..25] of TStyleName =(
                 (Style: WS_EX_DLGMODALFRAME;    Name: "WS_EX_DLGMODALFRAME"),
                 (Style: WS_EX_NOPARENTNOTIFY;   Name: "WS_EX_NOPARENTNOTIFY"),
                 (Style: WS_EX_TOPMOST;          Name: "WS_EX_TOPMOST"),
                 (Style: WS_EX_ACCEPTFILES;      Name: "WS_EX_ACCEPTFILES"),
                 (Style: WS_EX_TRANSPARENT;      Name: "WS_EX_TRANSPARENT"),
                 (Style: WS_EX_MDICHILD;         Name: "WS_EX_MDICHILD"),
                 (Style: WS_EX_TOOLWINDOW;       Name: "WS_EX_TOOLWINDOW"),
                 (Style: WS_EX_WINDOWEDGE;       Name: "WS_EX_WINDOWEDGE"),
                 (Style: WS_EX_CLIENTEDGE;       Name: "WS_EX_CLIENTEDGE"),
                 (Style: WS_EX_CONTEXTHELP;      Name: "WS_EX_CONTEXTHELP"),
                 (Style: WS_EX_RIGHT;            Name: "WS_EX_RIGHT"),
                 (Style: WS_EX_LEFT;             Name: "WS_EX_LEFT"),
                 (Style: WS_EX_RTLREADING;       Name: "WS_EX_RTLREADING"),
                 (Style: WS_EX_LTRREADING;       Name: "WS_EX_LTRREADING"),
                 (Style: WS_EX_LEFTSCROLLBAR;    Name: "WS_EX_LEFTSCROLLBAR"),
                 (Style: WS_EX_RIGHTSCROLLBAR;   Name: "WS_EX_RIGHTSCROLLBAR"),
                 (Style: WS_EX_CONTROLPARENT;    Name: "WS_EX_CONTROLPARENT"),
                 (Style: WS_EX_STATICEDGE;       Name: "WS_EX_STATICEDGE"),
                 (Style: WS_EX_APPWINDOW;        Name: "WS_EX_APPWINDOW"),
                 (Style: WS_EX_OVERLAPPEDWINDOW; Name: "WS_EX_OVERLAPPEDWINDOW"),
                 (Style: WS_EX_PALETTEWINDOW;    Name: "WS_EX_PALETTEWINDOW"),
                 (Style: WS_EX_LAYERED;          Name: "WS_EX_LAYERED"),
                 (Style: WS_EX_NOINHERITLAYOUT;  Name: "WS_EX_NOINHERITLAYOUT"),
                 (Style: WS_EX_LAYOUTRTL;        Name: "WS_EX_LAYOUTRTL"),
                 (Style: WS_EX_COMPOSITED;       Name: "WS_EX_COMPOSITED"),
                 (Style: WS_EX_NOACTIVATE;       Name: "WS_EX_NOACTIVATE"));

.................
function GetWindowStyle(const Wnd: HWND; Lst: TStrings; ExtStl: Boolean=False): Integer;
const Style: array [Boolean] of Integer = (GWL_STYLE, GWL_EXSTYLE);
var N: Integer;
begin
 Result:=GetWindowLong(Wnd, Style[ExtStl]);
 if not Assigned(LSt) or (Result=0) then Exit;
 if ExtStl then begin
  Lst.Add("(ExtStyle for "+IntToStr(Wnd)+")");
  for N:=Low(EXTSTYLE_NAMES) to High(EXTSTYLE_NAMES) do
   if Result and EXTSTYLE_NAMES[N].Style = EXTSTYLE_NAMES[N].Style then Lst.Add(EXTSTYLE_NAMES[N].Name);
 end else begin
  Lst.Add("(Style for "+IntToStr(Wnd)+")");
  for N:=Low(STYLE_NAMES) to High(STYLE_NAMES) do
   if Result and STYLE_NAMES[N].Style = STYLE_NAMES[N].Style then Lst.Add(STYLE_NAMES[N].Name);
 end;
end;


Может кому пригодится, просто "нудно" эти константы "наполнять" :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
15-1196892989
Petr V. Abramov
2007-12-06 01:16
2008.01.13
глюк (?) форума


15-1196839941
data
2007-12-05 10:32
2008.01.13
зона покрытия сотовых


2-1197370362
San1
2007-12-11 13:52
2008.01.13
вывод текста на Canvas


6-1177322028
Ypbi4
2007-04-23 13:53
2008.01.13
ClientSocket -- получение ответа на запрос


9-1165444400
EkZot
2006-12-07 01:33
2008.01.13
Вращения гланого героя вокруг своей оси.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский