Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

KOLPanel жутко тормозит при перетаскивании


Ciber SLasH ©   (2003-11-19 03:12:00) 

Делаю форму без заголовка, вместо него кинул KOLPanel и обрабатываю события от мыши для перетаскивания:

procedure TForm1.Panel1MouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button = mbLeft then  // если кнопка левая...
   begin
     OldLeft := Mouse.X;  // запоминаю позицию крысы
     OldTop := Mouse.Y;
     Dragging := True     // и включаю режим двиганья ;)
   end
end;

procedure TForm1.Panel1MouseMove(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Dragging then  // если режим двиганья включен
   begin
     NewLeft := Mouse.X;  // записываю новые координаты крысы
     NewTop := Mouse.Y;
     Form.Left := Form.Left + NewLeft - OldLeft;  // устанавливаю координаты окна
     Form.Top := Form.Top + NewTop - OldTop
   end
end;

procedure TForm1.Panel1MouseUp(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button = mbLeft then  //Если кнопка левая...
   Dragging := False       //Выключаю режим двиганья
end;

Так вот, если потихоньку (еле-еле) перетаскивать, то нормально, но если начать перетаскивать чуть резче, то начинаются тормоза !

Если не верите, можете проверить, результат вас тоже растроит.


Gandalf   (2003-11-21 11:00:00) [1]

У нас есть все :)
BoundsRect:=YouWantRect;


alex_***   (2003-11-21 09:18:00) [2]

SetBounds'a в KOL нет?


Skopin   (2003-11-21 08:15:00) [3]

Я например использую следующий фрагмент:

procedureTForm1.GradientPanel1MouseDown(Sender: PControl;
  varMouse: TMouseEventData);
begin
        ifMouse.Button = mbLeft then
        begin
          Form.DragStart;
        end;
end;


Ciber SLasH   (2003-11-19 16:22:00) [4]

Сенкс...
Работает на ура !


SPeller   (2003-11-19 08:37:00) [5]

Зачем извращаться??? :)

function TForm1.ImgMainMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
 Result := False;
 case Msg.message of
   WM_LBUTTONDOWN: Form.Perform( WM_NCLBUTTONDOWN, HTCAPTION, Msg.lParam );
   WM_LBUTTONUP: Form.Perform( WM_NCLBUTTONUP, HTCAPTION, Msg.lParam );
 end;
end;


Ciber SLasH   (2003-11-19 05:00:00) [6]

Я тут поэкспериментировал и пришёл к такому выводу: если бросаешь на форму один из компонентов вкачестве будующего заголовка (пробовал на: Panel, PainBox, ImageShow) и назначяешь такие обработчики событий как в мессаге выше для обработки сообщений о перетаскивании, то рультат одинаковый. Во всех случаях, когда перемещаешь форму за созданный таким образом заголовок вверх-вниз, то наблюдаются конкретные тормоза !!!


Наверх

Титульная страница Поиск, карта сайта Написать письмо