Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с перетаскиванием TImage, Delphi 
:(
    Опции темы
MyLogin
Дата 11.10.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



В программе при перетаскивании TImage на форме (точнее по панели) на некоторых компах (далеко не самых тормозных) происходят жуткие тормоза. У родителя TImage DoubleBuffered:=True; Проблема в том, что на некоторых слабых машинах всё ок, а на некоторых далеко не слабых - жуткие тормоза. В чём может быть дело?

Спасибо.
PM MAIL   Вверх
Kesh
Дата 11.10.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 1
Всего: 54



Код в студию...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
MyLogin
Дата 11.10.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Только вряд ли без контекста будет понятно.
Попытаюсь пояснить насколько смогу.

При входе в первую процедуру DrawMode = dmNormal, получаем ид объекта, которому принадлежит перемещаемый TImage и делаем DrawMode = dmDrug, далее MouseMove - меняем координаты объекта, масштабируем их относительно канвы
и рисуем (процедура Draw***Object).

Код

procedure TfmMain.ImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if DrawMode = dmBell then
    AddObject(BELL_DEFAULT_NAME,bftBell,True,ObjTag,Point(X,Y));
  if DrawMode = dmBeem then
  begin
    AddObject(BEEM_DEFAULT_NAME,bftBeem,True,0,Point(X,Y));
    DrawMode:=dmBeemPaint;
  end;
  if DrawMode = dmNormal then
  begin
    DrugObjId:=GetObjectByXY(X,Y);
    CId:=DrugObjId;
    AObj:=Objects.Items[CId];
    AObj^.Image.BringToFront;
    DrawMode:=dmDrug;
    DrawUnSelection;
  end;
end;

procedure TfmMain.ImageMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  P: TPoint;
  WallObj, AObjTemp: PBellFryObject;
begin
  if DrawMode = dmDrug then
  begin
     AObj:=Objects.Items[CId];
     if AObj^.ObjType = bftBell then
     begin
        AObj^.BellPosition_V:=Point(X,Y);
        ScaleBellValues(CId,True);
        DrawBellObject(CId);
        WallObj:=Objects.Items[0];
        P:=AObj^.BellPosition_R;
        if P.X > WallObj.WallDiameterOuter_R then P.X:=WallObj.WallDiameterOuter_R;
        if P.Y > WallObj.WallDiameterOuter_R then P.Y:=WallObj.WallDiameterOuter_R;
        edBPositionX.Value:=P.X;
        edBPositionY.Value:=P.Y;
     end;
     if AObj^.ObjType = bftPost then
     begin
        AObj^.PostPosition_V:=Point(X,Y);
        AObj^.PostPosition_R:=CoordsVirtualToReal(AObj^.PostPosition_V);
        ScalePostamentValues;
        DrawPostObject;
        WallObj:=Objects.Items[0];
        P:=AObj^.PostPosition_R;
        if P.X > WallObj.WallDiameterOuter_R then P.X:=WallObj.WallDiameterOuter_R;
        if P.Y > WallObj.WallDiameterOuter_R then P.Y:=WallObj.WallDiameterOuter_R;
        edPostPositionX.Value:=P.X;
        edPostPositionY.Value:=P.Y;
     end;
  end;
  if DrawMode = dmBeemPaint then
  begin
     AObjTemp:=Objects.Items[CId];
     AObjTemp^.BeemEndPoint_V:=Point(X,Y);
     AObjTemp^.BeemEndPoint_R:=CoordsVirtualToReal(AObjTemp^.BeemEndPoint_V);
     DrawBeemObject(CId);
  end;
end;

procedure TfmMain.ImageMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DrawMode:=dmNormal;
  pnlImg.Cursor:=crDefault;
  Images[LAYER_RINGER].BringToFront;
  Images[LAYER_SELECTION].BringToFront;
  SelectObject(CId);
  try
    clbObjects.SetFocus;
  except
  end;
end;

PM MAIL   Вверх
DemoCode
Дата 8.2.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 1
Всего: 41



У меня точно такая же проблема. И тоже на некоторых машинах работает хорошо, а не некоторых, которые даже мощнее - жуткие тормоза.

Скорее всего, тут дело с DoubleBuffered, когда я его убираю, то тормоза прекращаются (ну только мерцания появляются).


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
s-mike
Дата 9.2.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Мощность определяется не только процессором, а еще и видеокартой. Имхо как раз тут в ней дело.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.