Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Стили окна под 2000/xp

Автор: Bokul 6.01.2007 7:29

Цитата

WS_EX_LAYERED
Windows 2000/XP : Creates a layered window. Note that this cannot be used for child windows. Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.

Можно ли в Fpc юзать такие стили? Если да, то как? Ибо так компилятор ругается


{$mode ObjFpc}
{$Apptype gui}
uses windows;
function MyCreateWindow(ClassName:PChar):hWnd;
begin
MyCreateWindow:=CreateWindowEx(Ws_Ex_Topmost or WS_EX_LAYERED,//Identifier not found "WS_EX_LAYERED"
ClassName,'Salut',
Ws_Overlapped or Ws_Visible,
Cw_Usedefault, Cw_Usedefault,
200,300,
0,0,
System.HInstance,
nil)


end;



Автор: volvo 6.01.2007 7:41

Const
WS_EX_LAYERED = $80000;
и используй, где хочешь smile.gif

Автор: Bokul 6.01.2007 7:45

Ухты, работает smile.gif! Спасибо!
Откуда такие данные?

Автор: volvo 6.01.2007 7:46

Исходники FPC + исходники Дельфи + MSDN smile.gif

Автор: Bokul 6.01.2007 7:49

Ого, быстро ты нашел yes2.gif

Она где описана? В модуле windows? Можешь подсказать алгоритм поиска?

Автор: volvo 6.01.2007 7:57

1) убеждаешься что в последней версии файла fpcbuild-2.0.4\fpcbuild_2.0.4_exp\fpcsrc\rtl\win32\wininc\defines.inc этой константы нету (если есть - повезло, просто перекомпилируешь модуль Windows и пользуешься новым smile.gif )

2) открываешь файл Borland\Delphi\Source\Rtl\Win\Windows.pas и ищешь WS_EX_LAYERED... Если есть - хорошо, нету -

3) открываешь MSDN и делаешь то же самое, в примерах под VB обычно есть все константы...
blum.gif

Автор: Bokul 6.01.2007 8:04

Признавайся, откуда исходники Delphi взял! smile.gif

Автор: volvo 6.01.2007 8:11

Ну, мало ли чего кто где берет... У меня Enterprise Edition, так что весь RTL и еще много чего кроме него - с исходниками...

Автор: Bokul 6.01.2007 10:43

Так freеpascal не поддерживает WinApi выше 95?

Автор: volvo 6.01.2007 14:44

Да почему "не поддерживает"? Что, SetLayeredWindowAttributes - это Win95 API? Нет, это появилось только в Windows2000, однако в Windows.pas она прекрасно описана...

Автор: Bokul 6.01.2007 23:37

AnimateWindow?

Цитата

Function Information

Minimum DLL Version user32.dll
Header Declared in Winuser.h, include Windows.h
Import library User32.lib
Minimum operating systems Windows 98 , Windows 2000

Identifier not found "AnimateWindow". sad.gif

Автор: volvo 6.01.2007 23:48

А ты видел, КАК описана AnimateWindow в Windows.pas в Дельфи?

Вот и подключи так же:

function AnimateWindow; external 'user32.dll' name 'AnimateWindow';
Const
AW_HIDE = $10000;
AW_BLEND = $80000;

...
AnimateWindow(Handle, 500, AW_HIDE or AW_BLEND);
...
smile.gif

Автор: Bokul 7.01.2007 0:14

Не получается сделать:


function AnimateWindow:Bool; external 'user32.dll' name 'AnimateWindow';

Const
Aw_Hide=$10000;
Aw_Blend=$80000;
var Wnd:hWnd;
begin
MyRegisterClass(my_class);
Wnd:=MyCreateWindow(my_class);
AnimateWindow(Wтd,500,Aw_Hide or Aw_Blend);//Wrong number of parameters specified
...


Хотя вроде все параметры есть:


BOOL AnimateWindow(

HWND hwnd,
DWORD dwTime,
DWORD dwFlags
);




Цитата
А ты видел, КАК описана AnimateWindow в Windows.pas в Дельфи?

no1.gif Можешь поделится исходником Windows.pas? 10.gif

Автор: volvo 7.01.2007 0:26

Цитата
вроде все параметры есть:
Только компилятор об этом не знает, а связывание с DLL происходит уже при линковке, для компилятора надо описывать полный заголовок, а не только имя + тип результата...
function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL;
external 'user32.dll' name 'AnimateWindow';

Const
Aw_Hide=$10000;
Aw_Blend=$80000;

var
Wnd:hWnd;

begin
MyRegisterClass(my_class);
Wnd:=MyCreateWindow(my_class);
AnimateWindow(Wnd,500,Aw_Hide or Aw_Blend); // <---
...


Автор: Bokul 7.01.2007 1:10

Спасибо good.gif

Вот еще прочитал:

Цитата

Each system-defined message has a unique message identifier and a corresponding symbolic constant (defined in the software development kit (SDK) header files )

Можно спросить что такое SDK и где можно взять эти header files?

Автор: volvo 7.01.2007 1:23

Platform SDK - тут: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm (осторожнее с размером - 266Мб, все-таки)...

Автор: Bokul 7.01.2007 2:13

Скачал, установил, запустил все программы с папки Tools, понял что еще много учить, запустил справку, почитал раздел о WinApi (тоже самое что и вmsdn), но заголовочных файлов так и не нашел? Где искать?

Автор: Bokul 7.01.2007 5:03

Цитата
Только компилятор об этом не знает, а связывание с DLL происходит уже при линковке, для компилятора надо описывать полный заголовок, а не только имя + тип результата...

Т.е. все функции WinApi можна подгрузить с DLL-ок? Что тогда делает модуль windows?

Автор: volvo 7.01.2007 17:20

Цитата
Что тогда делает модуль windows?
Ну, он как раз этим и занимается... smile.gif Большинство функций в windows.pas (точнее - в func.inc) все-же описано... Если тебе нужно что-то, чего там нет - подключай...