Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2009, 15:04   #1
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию перерисовка канвы

замахнулся (а вернее МЕНЯ замахнули) я на написание миниГИСа

возникла проблема:
на событие
procedure TMF.MainMapMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);

я беру координаты в пикселях и преобразую их в координаты, чтобы постоянно отображать координаты курсора.
однако в этот момент канва тухнет и ее надо перерисовывать каждый раз (после каждого перемещания!)
т.к. объектов на карте может быть досточно много, это вызовет неплохую нагрузку на ресурсы компьютера.

не подскажете, как можно обойти постоянную перерисовку канвы?

----
да, и еще один вопрос:
я не разобрался с форматированием FloatToStr.
как мне можно ограничить длину числа, скажем, 10 цифрами, а целую ее часть, скажем, 7?
Bayazet вне форума Ответить с цитированием
Старый 27.01.2009, 15:10   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

А можно кусок кода ?
Или пример в архиве ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 27.01.2009, 15:12   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Раз объектов много, то GDI тут не поможет. Надо использовать DirectX или OpenGL. Но если уж очень хочется GDI то залог успеха этого дела, заключается в отрисовки всех частей, и потом при перерисовки не прорисовывать заново, то что уже было прорисовано и хранится в памяти, просто вызвать BitBlt ( или в таком духе, что надо ). Т.е. можете даже просто хранить в TBitmap, и рисовать так же в TBitmap а потом просто перекрывать образцом из памяти вашу канву. Это даст скорость прорисовки, качество но заберет больше ОЗУ.

p.s. видимо читать и думать люди не хотят (пост №4).

Последний раз редактировалось BOBAH13; 27.01.2009 в 15:21.
BOBAH13 вне форума Ответить с цитированием
Старый 27.01.2009, 15:18   #4
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

кусок кода? ну пожалуйста:

Код:
Type
  TMF = class(TForm)
.......
    CursorCoordX: TLabel;
    CursorCoordDelimiter: TLabel;
    CursorCoordY: TLabel;

procedure TMF.MainMapMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Pix.X := X;
  Pix.Y := Y;
  PixToCoord(Pix, Dot);
  MF.CursorCoordX.Caption := FloatToStr(Dot.X);
  MF.CursorCoordY.Caption := FloatToStr(Dot.Y);
  DrawMap;
end;
Dot - рекорд из двух даблов; Pix - тоже самое, но интежеры.
DrawMap - рисование карты (с предшествующей перегонкой координат в пиксели)

Последний раз редактировалось Bayazet; 27.01.2009 в 15:19. Причина: орфография хромает
Bayazet вне форума Ответить с цитированием
Старый 27.01.2009, 15:23   #5
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

используя битмап у мен возникали проблемы с простейшим

Canvas.Draw(0,0, bmpMap)

компилятор говорил, что в ждал TGraphic, а нашел TBitMap

может я неправильно создаю битмапу?

Код:
  bmpMap.Create;
  bmpMap.Width := MF.MainMap.Width;
  bmpMap.Height := MF.MainMap.Height;
далее рутинная работа по заполнению канвы битмапа, а после все тот же Draw, который стопит все.
Bayazet вне форума Ответить с цитированием
Старый 27.01.2009, 15:28   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
bmpMap.Create;
- ну тут слов нет я вообще удивляюсь как после этой строчки у вас программа не вылетает с Accession valation Надо бы про ООП object pascal вам почитать. Верно должно быть так:
Код:
bmpMap := TBitmap.Create;
BOBAH13 вне форума Ответить с цитированием
Старый 27.01.2009, 15:33   #7
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

все равно пишет несоответствие типов TGraphic и TBitMap в Canvas.Draw(0,0,bmpMap);

может я недостаточно информации указываю при создании?

Последний раз редактировалось Bayazet; 27.01.2009 в 15:35.
Bayazet вне форума Ответить с цитированием
Старый 27.01.2009, 15:37   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Bayazet Посмотреть сообщение
все равно пишет несоответствие типов TGraphic и TBitMap в Canvas.Draw(0,0,bmpMap);

может я недостаточно информации указываю при создании?
код приведите, как у вас объявлена переменная bmpMap ? у нее класс TBitmap? Если да, то какой версией дельфи вы пользуитесь ?
BOBAH13 вне форума Ответить с цитированием
Старый 27.01.2009, 15:40   #9
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

Код:
var
  bmpMap : TBitMap;
........
Код:
  bmpMap := TBitMap.Create;
  bmpMap.Width := MF.MainMap.Width;
  bmpMap.Height := MF.MainMap.Height;
........
Код:
  Foi i := 0 to shps_count-1 do
    Case shapes[i].ShpID of
      PLineID : bmpMap.Canvas.Polyline(Points);
      PolyID : bmpMap.Canvas.Polygon(Points);
      RectID : bmpMap.Canvas.Rectangle(Points[0].X, Points[0].Y, Points[1].X, Points[1].Y);
      EllipseID : bmpMap.Canvas.Ellipse(Points[0].X, Points[0].Y, Points[1].X, Points[1].Y);
      LineID : bmpMap.Canvas.Polyline(Points);
    end;
.........
Код:
  MF.MainMap.Canvas.Draw(0,0, bmpMap);
MainMap типа TPaintBox
Delphi 7
Bayazet вне форума Ответить с цитированием
Старый 27.01.2009, 15:43   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ошибки нет. То что вам пишет.. приведите именно в той форме в которой вы ее видите. Без перевода и т.п.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу стереть линию с канвы.КАК? harmager Общие вопросы Delphi 1 24.11.2008 10:28
Перерисовка на Image SERG1980 Мультимедиа в Delphi 9 09.04.2008 10:24
Перерисовка формы satana Общие вопросы Delphi 4 18.09.2007 19:42
Как распечатать содержимое канвы Image? ffo Помощь студентам 1 15.03.2007 20:07