Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 13

Канва. Графика

22.03.2011, 18:47. Показов 2070. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! У меня такая вот проблемка вышла.... Надо написать граф. редактор со слоями. Нужно писать в Дельфе, но на Graphics32. Пока решил сделать просто редактор на канве. Подскажите пожалуйста, как для вычисления координат и размеров фигуры использовать курсор мыши?? Как сделать выделение области для последующей работы с ней?(Всё типа того же Paint'a). Пожалуйста, если можно в любых примерах или кусках кода.

П.С. И ещё: кто-то когда-нибудь работал с G32 ??! Если да, можете посоветовать, как с ним разобраться поскорее? А то там хелпы путанные... И если что можно ли будет потом обратится за подсказкой?!

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2011, 18:47
Ответы с готовыми решениями:

Канва компонента и канва только в памяти, есть ли разница?
При попытке рисовать часть экрана на канву компонента все происходит нормально пока программа не свернута var Arena:TPaintBox; ...

канва
Мужики Нужно с верхнего, нижнего, правого и левого края нарисовать примерно 50-100 линий с плавно переходящим цветом из голубого в белый,...

Канва самоочищается при сворачивании-разворачивании
На канве Form1.Canvas нарисовано какое то кол-во shape и линий, если свернуть развернуть окно приложения - то все линии исчезают, shape...

10
 Аватар для Zaxelf
85 / 85 / 59
Регистрация: 14.05.2010
Сообщений: 223
04.04.2011, 05:01
вот касаемо прямоугольника
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  mx,my:integer;
  p:boolean=false;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
 if p then Canvas.Rectangle(mx,my,x,y);
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mx:=x;
my:=y;
p:=true;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
p:=false;
end;
1
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 13
04.04.2011, 08:56  [ТС]
Спасибо большое! А относительно всего остального писать как с екземпла, да?
0
 Аватар для Zaxelf
85 / 85 / 59
Регистрация: 14.05.2010
Сообщений: 223
04.04.2011, 15:33
Ну так paint, на самом деле, не такая уж и маленькая программа, чтобы в одном посте между прочим изложить. Средствами Дельфи я могу написать paint, а вот с Graphics32, к сожалению, не знаком. Вот пиши какие функции и процедуры для этой цели сейчас интересуют, я думаю, что смогу помочь. Только не всё сразу.
1
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 13
04.04.2011, 18:37  [ТС]
Ну коль так, то может подскажете, можно ли с помощью простой канвы сделать те же слои?
0
 Аватар для Zaxelf
85 / 85 / 59
Регистрация: 14.05.2010
Сообщений: 223
05.04.2011, 02:33
Я просто уверен, что можно, только потребуются дополнительные поверхности. Готовый рисунок в любом случае одним слоем. В paint, на сколько я помню, нет никаких слоёв. Если нужен пример по слоям это я, конечно, напишу. За эталон брать paint.NET?
И вот ещё, меня заинтересовала эта самая Graphics32. Прочитал о ней множество отзывов. Но вот у меня как-то её не нашлось (XP SP3), она так и называется Graphics32.dll или иначе. Я примеры какие-то нашёл по ней, но сильно не вникал.
1
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 13
05.04.2011, 03:04  [ТС]
Да эт просто подключаемая библиотека. Всё вроде просто и по полочкам, но хелпы - звините но идиотские!

А насчёт слоёв - да, что-то вроде того...
0
 Аватар для Zaxelf
85 / 85 / 59
Регистрация: 14.05.2010
Сообщений: 223
05.04.2011, 03:23
Я в течении дня установлю NET framework, посмотрю внимательно детали работы со слоями. Если это не повлечёт нарушение какого-либо закона о каких-то там правах, закинь , пожалуйста,эту библиотеку.
1
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 13
05.04.2011, 17:04  [ТС]
Вот и библиотеки. Ещё раз спасибо большое за помощь!
Вложения
Тип файла: zip graphics32-1-9-0-r1336.zip (2.20 Мб, 26 просмотров)
0
 Аватар для Zaxelf
85 / 85 / 59
Регистрация: 14.05.2010
Сообщений: 223
06.04.2011, 03:10
С библиотекой я, пожалуй, на выходных займусь, время будет.
Вот смотри код работы со слоями:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  public
    procedure makelayer;
    procedure drawon(sender: Tobject);
  end;
var
  Form1: TForm1;
  implementation
 
{$R *.dfm}
 
var layer, layer1: Tform;
img,img1: Timage;
bmp,bmp1: Tbitmap;
pencolor,pencolor1: Tcolor;
btn,btn1: Tbutton;
Transpcolor: Tcolor=4; //цвет, который мы видеть не будем
procedure makebmp(bmp:Tbitmap); // заполняем вспомогательный битмэп цветом, которого мы видеть не будем
var x,y: integer;
begin
for y:=1 to bmp.Height do begin
x:=1;
repeat
bmp.Canvas.Pixels[x,y]:=Transpcolor;
inc(x);
until x=bmp.Width;
end;
end;
 
procedure Tform1.makelayer;
 
begin
layer:=TForm.Create(nil);
layer.Parent:=nil;
layer.Show;
 
layer1:=TForm.Create(nil);
layer1.Parent:=nil;
layer1.Show;
 
bmp:=Tbitmap.Create;
img:=Timage.Create(layer);
img.Align:=alclient;
 
bmp1:=Tbitmap.Create;
img1:=Timage.Create(layer1);
img1.Align:=alclient;
 
bmp.Width:=img.Width;
bmp.Height:=img.Height;
 
bmp1.Width:=img1.Width;
bmp1.Height:=img1.Height;
 
makebmp(bmp1);
makebmp(bmp);
 
btn:=Tbutton.Create(nil);
btn.Parent:=layer;
btn.OnClick:=drawon;
 
btn1:=Tbutton.Create(nil);
btn1.Parent:=layer1;
btn1.OnClick:=drawon;
 
end;
 
procedure inflict(image: Timage; bmp: Tbitmap);
var img: Timage;
x,y:integer;
begin
img:=Timage.Create(nil);
img.Parent:=nil;
img.Height:=image.Height;
img.Width:=image.Width;
img.Canvas.StretchDraw(rect(0,0,img.Width,img.Height),bmp);
for y:=1 to img.Height do begin
x:=1;
repeat
if img.Canvas.Pixels[x,y]<>Transpcolor then image.Canvas.Pixels[x,y]:=img.Canvas.Pixels[x,y]; // наносим только цвет, который не считается прозрачным
inc(x);
until x=img.Width;
end;
end;
procedure Tform1.drawOn(sender: Tobject);
begin
 // В этой процедуре отпределяется какой слой будет нанесён сначала, а какой после
if sender= btn1 then begin
image1.Canvas.StretchDraw(rect(0,0,image1.Width,image1.Height),bmp1);
inflict(image1,bmp);
end;
if sender= btn then begin
image1.Canvas.StretchDraw(rect(0,0,image1.Width,image1.Height),bmp);
inflict(image1,bmp1);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  makelayer;
end;
Это конечно не совсем то, что должно будет получиться в конце работы, там потребуется не две переменных layer, а массив из таких переменных. Но в основном, думаю, поймешь. Только с прозрачностью слоёв пока не знаю чем помочь, но я над этим поработаю.
1
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 13
06.04.2011, 21:17  [ТС]
Спасибо, правда спасибо! Не знаю что б я без вас делал!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2011, 21:17
Помогаю со студенческими работами здесь

Канва. Кисть
Здравствуйте! Как настроить кисть таким образом, чтобы получалась не идеальная прямая при использовании метода drawLine, а что-то похожее...

Канва, множество точек
Помогите, пожалуйста с задачкой : Необходимо построить множество точек, удовлетворяющих неравенству abs(y)+2*abs(x)&lt;=sqrt(x)+1.

Канва, разделённая на области
доброго дня граждане программисты,ситуация в двух словах такая: Канва разделена на области координаты которых записаны в двумерный...

Не отображается канва на компоненте StringGrid
Пробовал по разному Form1.StringGrid1.Canvas.Pen.Color:=clRed; Form1.StringGrid1.Canvas.Pen.Width:=4; ...

Одна и та-же канва на разных имейджах
Собственно должны получится три графика построенных разными способами на разных имейджах да бы не копипастить разметку (Оси Ох,Оу) хочу...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru