Главная страница
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.018 c
1-43594
LaidBack
2004-02-27 11:20
2004.03.14
Как вызвать нажатие кнопки Minimize у формы?


3-43255
31512
2004-02-11 14:40
2004.03.14
Lookup или не lookup - вот в чём вопрос (программирующий Гамлет)


1-43506
td
2004-02-28 11:42
2004.03.14
Excel Application


14-43787
Undert
2004-02-18 17:15
2004.03.14
Подскажите пожалуйста


3-43343
MicroWorld
2004-02-16 22:37
2004.03.14
опять запрос на 4