Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.14;
Скачать: CL | DM;

Вниз

Прилипание формы   Найти похожие ветки 

 
DenisWW ©   (2004-01-08 16:37) [0]

Вопрос в процедуре EnumWindowsProc

private
procedure WMWINDOWPOSCHANGING(var Msg: TWMWINDOWPOSCHANGING);message WM_WINDOWPOSCHANGING;
procedure WMWINDOWSIZING(var Msg: TMessage);message WM_SIZING ;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Const
StickAt:Word=10;

function EnumWindowsProc(hwnd:HWND;lParam:LPARAM):bool; stdcall;

implementation
uses Types, Unit2;
{$R *.dfm}

Var
WorkArea:array of TRect;
SizingForm:Boolean;

function EnumWindowsProc(hwnd:HWND;lParam:LPARAM):bool; stdcall;
begin
if IsWindowVisible(hwnd)and(hwnd<>Form1.Handle) then begin
SetLength(WorkArea,Length(WorkArea)+1);
GetWindowRect(hwnd,WorkArea[Length(WorkArea)-1]);

//вот здесь я получаю список всех окон на экране(их координаты)
//присутсвует всегда координаты центра экрана
//какой handle этого обьекта????????????????????????
end;
Result:=True;
end;

procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
Var I:Integer;
begin
SetLength(WorkArea,0);EnumWindows(@EnumWindowsProc,LPARAM(Nil));
For I:=0 To Pred(Length(WorkArea)) Do with WorkArea[I],Msg.WindowPos^ do Begin
if abs(Left-x)<=StickAt then Begin
If SizingForm Then cx:=x+cx-Left;x:=Left End;
if abs(Right-x)<=StickAt then Begin
If SizingForm Then cx:=x+cx-Right;x:=Right End;
if abs(Top-y)<=StickAt then Begin
If SizingForm Then cy:=y+cy-Top;y:=Top End;
if abs(Bottom-y)<=StickAt then Begin
If SizingForm Then cy:=y+cy-Bottom;y:=Bottom End;
if abs(Right-cx-x)<=StickAt then Begin
If SizingForm Then cx:=Right-x;x:=Right-cx End;
if abs(Left-cx-x)<=StickAt then Begin
If SizingForm Then cx:=Left-x;x:=Left-cx End;
if abs(Bottom-cy-y)<=StickAt then Begin
If SizingForm Then cy:=Bottom-y;y:=Bottom-cy End;
if abs(Top-cy-y)<=StickAt then Begin
If SizingForm Then cy:=Top-y;y:=Top-cy End
End;
If Msg.WindowPos^.Flags=0 Then SizingForm:=False;
inherited;
end;

procedure TForm1.WMWINDOWSIZING(var Msg: TMessage);
begin
SizingForm:=True;
inherited;
end;


 
DenisWW ©   (2004-01-08 16:46) [1]

Что за обьект то ?


 
Игорь Шевченко ©   (2004-01-08 16:47) [2]


> function EnumWindowsProc(hwnd:HWND;lParam:LPARAM):bool;
> stdcall;
> begin
> if IsWindowVisible(hwnd)and(hwnd<>Form1.Handle) then begin
> SetLength(WorkArea,Length(WorkArea)+1);
> GetWindowRect(hwnd,WorkArea[Length(WorkArea)-1]);
>


> //вот здесь я получаю список всех окон на экране(их координаты)
> //присутсвует всегда координаты центра экрана
> //какой handle этого обьекта????????????????????????

hwnd :)


 
DenisWW ©   (2004-01-08 17:29) [3]

непонял
EnumWindowsProc добавляет говорит что
присутствуют два Handle
с координатами left 512 top 384 right 512 buttom 384
при разрешении экрана 1024\768
тоесть 2а центра экрана
таких окон на экране нет
что это за обьекты и как получить их Handle?



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

Текущий архив: 2004.03.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
1-43514
satron
2004-02-28 20:56
2004.03.14
Как


8-43695
Sceleton
2003-11-10 08:07
2004.03.14
Как дать имя хранителю экрана.


3-43309
Hermes
2004-02-11 18:37
2004.03.14
Нужно добавить параметр в режиме выполнения программы!


4-43943
prabbit
2004-01-07 20:17
2004.03.14
Как найти физический путь к файлу


3-43369
griban
2004-02-15 15:56
2004.03.14
V C++builder bil QuickReport estj li ego nalog v B Delphi 7