Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
1

Прорисовка в памяти

16.11.2012, 21:00. Показов 2504. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как в delphi включить прорисовку в памяти? В pascal abc это можно сделать с помощью функции lockdrawing; а потом redraw; а как это сделать в delphi?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2012, 21:00
Ответы с готовыми решениями:

Прорисовка в Listview
Такой вопрос: как видно на рисунке, текс в каждой строке после отрисованной выделен жирным....

прорисовка кнопок
когда сворачиваю - разворачиваю приложение то кнопки пропадают и лишь проведя по ним мышкой они...

Графическая прорисовка
Для рисования простых геометрических фигур в Delphi существует компонент Shape ( , страница...

Прорисовка Rectangle на Canvas
Перед снятием скрина части экрана делаю выделение следующим образом: на полупрозрачной форме...

23
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
16.11.2012, 22:55 2
TBitmap.Canvas чтоле?

читаю ваши мысли:

Delphi
1
TForm.DoubleBuffered:=true;
оно нет?
0
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
16.11.2012, 23:05  [ТС] 3
Цитата Сообщение от Alex_pac Посмотреть сообщение
оно нет?
Наверно, я вывожу рисунок в paintbox, как мне это написать что бы например линия в пасяти рисовалась а потом выводилась в paintbox?
0
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
16.11.2012, 23:10 4
создавай TBitmap и рисуй а потом через canvas.copyrect уже в готовом виде на paintBox

также еще можно через WinApi BitBlt копировать с канваса на канвас
0
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
16.11.2012, 23:15  [ТС] 5
Цитата Сообщение от Alex_pac Посмотреть сообщение
создавай TBitmap и рисуй а потом через canvas.copyrect уже в готовом виде на paintBox
Я не сильно профи, если можно объясните пожалуста
0
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
16.11.2012, 23:22 6
долго объяснять. Иди лучше в гугл и читай про TBitmap и работу с Canvas
0
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
16.11.2012, 23:28  [ТС] 7
Цитата Сообщение от Alex_pac Посмотреть сообщение
Иди лучше в гугл и читай про TBitmap и работу с Canvas
Дайте ссылку плз
0
angstrom
16.11.2012, 23:29 8
Не так уж и долго.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure PaintBox1Paint(Sender : TObject);
var
  bmp : TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.Width := PaintBox1.Width;
  bmp.Height := PaintBox1.Height;
  try
    bmp.Canvas. // что-то рисуем
    BitBlt(PaintBox1.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bmp.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    Bmp.Free;
  end;
end;
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
16.11.2012, 23:31 9
try
bmp.Canvas. // что-то рисуем
BitBlt(PaintBox1.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bmp.Canvas.Handle, 0, 0, SRCCOPY);
finally
Bmp.Free;
end;
зачем там try и finally ? разве там могут быть исключения?

Bmp.Free;
вовсе обязательно уничтожать буфер, особенно в том случае если надо будет опять в скором времени его использовать. Однако тогда, буфер должен быть объявлен как глобальная или переменная класса, и создаваться при Form.Create
1
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
16.11.2012, 23:32  [ТС] 10
Что обозначает

Цитата Сообщение от angstrom Посмотреть сообщение
try
и

Цитата Сообщение от angstrom Посмотреть сообщение
BitBlt(PaintBox1.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bmp.Canvas.Handle, 0, 0, SRCCOPY);
* finally
0
angstrom
16.11.2012, 23:34 11
Дело не в исключениях, это правило хорошего тона ставить защиту.
Конечно лучше создать битмап глобально в OnCreate формы. Но ведь это только пример.
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
17.11.2012, 00:40 12
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure PaintBox1Paint(Sender : TObject);
var
  bmp : TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.Width := PaintBox1.Width;
  bmp.Height := PaintBox1.Height;
 
 //bmp.Canvas. // что-то рисуем << бла бла
 
  with PaintBox1.Canvas do CopyRect(ClipRect,bmp.Canvas,ClipRect);
 
  Bmp.Free;
end;
хотя в данном случае буфер может и не понадобиться если у формы будет выставлен двойной буфер

Form1.DoubleBuffered:=true;

Delphi
1
2
3
4
5
6
procedure PaintBox1Paint(Sender : TObject);
begin
 
 //PaintBox1.Canvas // что-то рисуем << бла бла
 
end;
Добавлено через 1 час 3 минуты
Дело не в исключениях, это правило хорошего тона ставить защиту
ставить защиту там где она не нужна? усложнять логику кода там где в этом нет необходимости?
1
angstrom
17.11.2012, 01:03 13
Пишите как привыкли, только потом не жалуйтесь, что не сможете найти где и почему происходит утечка памяти.
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
17.11.2012, 01:20 14
Цитата Сообщение от angstrom Посмотреть сообщение
Пишите как привыкли, только потом не жалуйтесь, что не сможете найти где и почему происходит утечка памяти.
откуда ей быть? следуя вашей логике надо везде параноидально после begin сразу писать try, на всякий случай
0
angstrom
17.11.2012, 01:29
  #15

Не по теме:


Не нужно утрировать. Дальнейшее препирательство считаю бессмысленным.

DaMortum
17.11.2012, 14:50
  #16

Не по теме:

Цитата Сообщение от Alex_pac Посмотреть сообщение
откуда ей быть? следуя вашей логике надо везде параноидально после begin сразу писать try, на всякий случай
Учитывая что самого кода рисования нет, там может быть что угодно. Я могу разделить на ноль...случайно. Try стоит не просто после begin, до этого был создан TBitmap, в случае ошибки произойдёт утечка памяти( хотя всем на эти утечки давно плевать).

0
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
17.11.2012, 14:59 17
в случае ошибки произойдёт утечка памяти
для этого надо еще создать условия для этой ошибки.

Например работа с нестабильными компонентами типа Indy которые зависят от запросов сети. или Работа классом TJpeg который может внезапно исключение выдать. Вот в этих случаях try оправдан, в остальных это просто лишние строчки

Вообще само ожидание в блоке try каких либо ошибок говорит о неуверенности в надежности составленного алгоритма. Либо о незнании чего либо.
0
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
17.11.2012, 19:18  [ТС] 18
Когда пишу
Цитата Сообщение от Alex_pac Посмотреть сообщение
Bmp.Free;
Выдаёт такую ошибку
Миниатюры
Прорисовка в памяти  
0
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
17.11.2012, 19:48 19
Цитата Сообщение от 97mik Посмотреть сообщение
Когда пишу

Выдаёт такую ошибку
код в студию
0
12 / 12 / 5
Регистрация: 08.04.2009
Сообщений: 879
17.11.2012, 22:00  [ТС] 20
Цитата Сообщение от Alex_pac Посмотреть сообщение
код в студию
Вот исходник, сделайте пожалуйста что бы не мерцало при каждой прорисовке, и ещё, в Pascal ABC в этой же программе 200 шариков не глючит (оперативка 1гб) а в делфи 30 глючит, может там какие нибудь лишние модули подключены или что то такое, сделайте пожалуйста что бы не глючило!
Вложения
Тип файла: rar Project.rar (10.4 Кб, 5 просмотров)
0
17.11.2012, 22:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2012, 22:00
Помогаю со студенческими работами здесь

ListBox некоректная прорисовка
Всем привет, такая проблема. Крашу элементы ListBox в разные цвета по условиям. Но рисуется...

Плохая прорисовка окна
Люди помогите пожалуйста, проблему с прорисовкой окна (всё белое кроме editов и то, только когда по...

Вычисление и прорисовка звуковой волны
Приветствую. Подскажите, плиз, посредством чего можно определить и прорисовать волну mp3-файла?

Прорисовка вертикальных линий на видимой части графика
Добрый вечер! Имеется некоторая функция, которая минимизируется с помощью алгоритма Фибоначчи....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru