Вниз
Скачать: CL | DM;

"приклеивание" окна к краям экрана   Найти похожие ветки 

 
Aotd ©   (2003-10-05 18:59) [0]

Для "приклеивания" окна к краям экрана использую процедуру:
procedure WMExitSizeMove(var Msg:TMessage);message WM_ExitSizeMove;
...
procedure TForm1.WMExitSizeMove;
const a=20;
var WorkArea:TRect;
begin
   inherited;
   SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);
   if left<=a then left:=0;
   if top<=a then top:=0;
   if left>=screen.width-width-a then left:=screen.width-width;
   if top>=screen.height-height-a then top:=screen.height-height;
   if Abs(Left-WorkArea.Left)<=a then Left:=WorkArea.Left;
   if Abs(Top-WorkArea.Top)<=a then Top:=WorkArea.Top;
   if Abs(Left+Width-WorkArea.Right)<=a then Left:=WorkArea.Right-Width;
   if Abs(Top+Height-WorkArea.Bottom)<=a then Top:=WorkArea.Bottom-Height;
   Invalidate;
end;
При адаптации под KOL она приобрела следующий вид:
procedure WMExitSizeMove(var Msg:TMessage);message WM_ExitSizeMove end;
...
Procedure TFMain.WMExitSizeMove;
const a=20;
var WorkArea:TRect;
begin
   inherited;
   SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);
   if FMain.Form.left<=a then FMain.Form.left:=0;
   if FMain.Form.top<=a then FMain.Form.top:=0;
   if FMain.Form.left>=KOL.ScreenWidth-FMain.Form.width-a then FMain.Form.left:=KOL.ScreenWidth-FMain.Form.width;
   if FMain.Form.top>=KOL.ScreenHeight-FMain.Form.height-a then FMain.Form.top:=KOL.ScreenHeight-FMain.Form.height;
   if Abs(FMain.Form.Left-WorkArea.Left)<=a then FMain.Form.Left:=WorkArea.Left;
   if Abs(FMain.Form.Top-WorkArea.Top)<=a then FMain.Form.Top:=WorkArea.Top;
   if Abs(FMain.Form.Left+FMain.Form.Width-WorkArea.Right)<=a then FMain.Form.Left:=WorkArea.Right-FMain.Form.Width;
   if Abs(FMain.Form.Top+FMain.Form.Height-WorkArea.Bottom)<=a then FMain.Form.Top:=WorkArea.Bottom-FMain.Form.Height;
   FMain.Form.Invalidate;
end;
Но отказывается выполнять свое предназначение... Не подскажете в чем дело? С KOL я знаком 3-й день, посему прошу не судить меня слишком стро


 
Gandalf ©   (2003-10-05 21:05) [1]


> procedure WMExitSizeMove(var Msg:TMessage);message WM_ExitSizeMove
> end;
> ...
> Procedure TFMain.WMExitSizeMove;
> const a=20;
> var WorkArea:TRect;


Что то мне это не нравится, в KOL обработка событий идет через OnMessage...

http://kol.mastak.ru/FAQ.htm#1


 
Boguslaw   (2003-10-06 20:23) [2]

Try this:

function TForm1.KOLFormMessage(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
const a=20;
var WorkArea:TRect;
begin
Result := false;
if Msg.message = WM_EXITSIZEMOVE then begin
  SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);
  with Form^ do begin
  if left<=a then left:=0;
  if top<=a then top:=0;
  if left>= KOL.ScreenWidth-width-a then left:=KOL.ScreenWidth-width;
  if top>= KOL.ScreenHeight -height-a then top:= KOL.ScreenHeight-height;
  if Abs(Left-WorkArea.Left)<=a then Left:=WorkArea.Left;
  if Abs(Top-WorkArea.Top)<=a then Top:=WorkArea.Top;
  if Abs(Left+Form.Width-WorkArea.Right)<=a then Left:=WorkArea.Right-Width;
  if Abs(Top+Height-WorkArea.Bottom)<=a then Top:=WorkArea.Bottom-Height;
  Invalidate;
  Result := true;
  end;
end;

Just a 5 minute solution , but it works for me ;-)
You should fix one problem here (if You want) - it ignores desktop toolbar.


 
Aotd ©   (2003-10-08 11:34) [3]

Всем спасибо, разобрался ;)


 
SerB   (2003-10-09 05:33) [4]

Вроде все нормально с кодом но (D7, KOL_MCK) не хочет работать


 
SerB   (2003-10-09 05:43) [5]

Опять поспешил, все работает нормально, забыл "подключить" функцию к свойству KOLForm OnMessage в инспекторе объектов :(



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

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.97 c
9-1068640276
mar
2003-11-12 15:31
2004.05.02
Загрузить jpg в DXDIB


7-1078996095
MIDPAD
2004-03-11 12:08
2004.05.02
сканер штрихкода


4-1078844305
Ландграф Павел
2004-03-09 17:58
2004.05.02
Нажатие кнопки на чужом окне


3-1080981442
Алексей
2004-04-03 12:37
2004.05.02
Кодирование БД


4-1078218124
Gia Gvatua
2004-03-02 12:02
2004.05.02
Повторный запуск




   Наверх