Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 27

BUILDER 2010\ создание граф. редактора

16.04.2010, 09:53. Показов 3090. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
В ходе разработки возникли вопросы как с помощью TBITMAP сделать рисование карандашом?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.04.2010, 09:53
Ответы с готовыми решениями:

Программное создание mdb в Builder 2010 с ADO
Информации в нете хоть и много, но она раздроблена. как в 2010 Билдере создать программно базу данных Акцесс, и в ней создать таблицу?...

Что то вроде граф. редактора
Вобщем, нужно написать программу с использованием массивов. условие: посередине экрана должна появиться точка, при перемещении которой...

Блок-схемы для граф-редактора
Добрый день, помогите пожалуйста создать блок-схемы по граф.редактору, скоро сдавать курсовой, хотя бы пару тройку)Заранее большое спасибо ...

11
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
16.04.2010, 14:50
Пример реализации карандаша. При быстрых движениях мыши линия разрываться не будет.

C++
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit19.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm19 *Form19;
//описываю bitmap
Graphics::TBitmap *bitmap = new Graphics::TBitmap;
//флаг
bool f = false;
//координаты начала линии
int x,y;
//---------------------------------------------------------------------------
__fastcall TForm19::TForm19(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm19::FormCreate(TObject *Sender)
{
    bitmap->Width = Form19->Width;
    bitmap->Height = Form19->Height;
    bitmap->PixelFormat = pf32bit;
}
//---------------------------------------------------------------------------
void __fastcall TForm19::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
        //при нажатии (MouseDown) флаг принимает положительное значение и задаются начальные координаты линии
    f = true;
    x = X;
    y = Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm19::FormMouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
    if(f)
    {
                //прорисовывается линия от начальных координат до координат X, Y
        bitmap->Canvas->MoveTo(x,y);
        bitmap->Canvas->LineTo(X,Y);
                //задаём новые начальные координаты 
        x = X;
        y = Y;
        Form19->Canvas->Draw(0,0,bitmap);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm19::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
        //при отпускании кнопки мыши (MouseUp) флаг принимает отрицательное значение
    f = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm19::FormPaint(TObject *Sender)
{
    Form19->Canvas->Draw(0,0,bitmap);
}
//---------------------------------------------------------------------------
1
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 27
18.04.2010, 09:58  [ТС]
это понял спасибо!
Вот еще хочу увеличить размеры ластика и карандаша. С помощью TEdit.
C++
1
2
3
4
5
6
7
else if (SBErase->Down)
  {
int b=6;
    R = Rect(X-b,Y-b,X+b,Y+b);
    Image3->Canvas->DrawFocusRect(R);
   Image3->Canvas->FillRect(Rect(X-b,Y-b,X+b,Y+b));
   }
Что написать в обработчике событий TEdit чтобы значения получаемые им поступали на b. И Как возможно увеличить карандаш?
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
18.04.2010, 10:43
Размер карандаша можно так:
C++
1
bitmap->Canvas->Pen->Width = 10;
Как я понял за размер ластика отвечает переменная b в твоём коде.
Попробуй сделать так:
C++
1
b = ceil(StrToFloat(Edit1->Text) / 2);
1
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 27
19.04.2010, 12:53  [ТС]
Цитата Сообщение от VtaMC Посмотреть сообщение
C++
1
b = ceil(StrToFloat(Edit1->Text) / 2);
Как понял в обработчике объекта OnEnter?

Добавлено через 13 минут
разобрался)) спасибо большое)))) помогли очень

Добавлено через 18 часов 30 минут
Фух много дней работы я закончил. Вот смотрю на него хотелось бы еще функций. Как вот например вставить текст?) не скажите очень было бы хорошо...
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
19.04.2010, 13:38
Ипользуй функцию TextOutA:
C++
1
bitmap->Canvas->TextOutA(x,y,text);
x, y - координаты расположения текста
text - сама строка.

размер текста регулируется так:

C++
1
bitmap->Canvas->Font->Size = 10;
Цвет текста:

C++
1
bitmap->Canvas->Font->Color = clRed;
1
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 27
20.04.2010, 12:41  [ТС]
все работает как часы =) Вот только текст вставляется и фон белый у него. Вот это белый фон очень мешает. Закрашивает картинку... Скоро сдаю уже проект. Извините нету ли случайно доходчивого примера документации?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
20.04.2010, 13:03
Можно сделать с использованием TBitmap:
C++
1
2
3
4
5
6
7
Graphics::TBitmap *text=new Graphics::TBitmap;
text->Width=150;
text->Height=20;
text->Transparent=true;
text->Canvas->TextOutA(0,0,"JPE");
Image1->Canvas->Draw(0,0,text);
delete text;
Но вариант не самый лучший...
1
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
20.04.2010, 13:11
Цитата Сообщение от BigBrain Посмотреть сообщение
Вот только текст вставляется и фон белый у него
Canvas->Brush->Style = bsClear;
2
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
20.04.2010, 13:13
Забыл.
0
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 27
20.04.2010, 13:31  [ТС]
Все сделал ) заработало)) спасибо большое!!!
0
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 27
22.04.2010, 15:38  [ТС]
Рисование эллипса

void __fastcall TForm1::Image3MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
C++
1
2
3
4
5
6
7
8
9
 else if (SBElip->Down) {
 Image3->Canvas->DrawFocusRect(R);
    Image3->Canvas->Ellipse(X,Y,X,Y);
 if (X0 < X) {R.Left = X0; R.Right = X;}
    else {R.Left = X; R.Right = X0;}
    if (Y0 < Y) {R.Top = Y0; R.Bottom = Y;}
    else {R.Top = Y; R.Bottom = Y0;}
    Image3->Canvas->DrawFocusRect(R);
      }
void __fastcall TForm1::Image3MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
C++
1
2
3
4
5
6
7
else if (SBElip->Down)
 {
  Image3->Canvas->Brush->Color = Image2->Canvas->Brush->Color;
  Image3->Canvas->Pen->Color = Image1->Canvas->Brush->Color;
  Image3->Canvas->Ellipse(R.Left,R.Top,R.Right,R.Bottom);
  Image3->Canvas ->Pen->Width = b;
 }
Вот мои наработки...
Какой тут должен быть MouseDown? Я хочу чтобы можно было нарисовать свой прямоугольник и внутри него рисуется эллипс. После отпускания мыши прямоугольник исчезал. Мои результаты: рисует но после отпускания обрисовывает пунктирной рамкой, или рисует без рамки(появляется эллипс после отпускания) и ниже какие-то точки появляются маленькие...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.04.2010, 15:38
Помогаю со студенческими работами здесь

Как использовать компоненты скомпилированные для C++ Builder 2007 в C++ Builder 2010?
Народ! Такая проблема... Есть набор компонентов т.н. Dicom VCL. Сайт производителя - http://www.medicalconnections.co.uk/. У них на...

Работа с объектами в C++ Builder 2010 (RAD 2010)
Плавно перехожу на программирование в Builder, появляется очень много вопросов по работе со стандартными встроенными объектами (формами). ...

Перевод проекта с Builder 2010 на Builder 10 Seattle
Добрый день. Перевожу проект написанный на С++ с Builder 2010 на Builder 10 Seattle. В проекте для работы с базой данных...

Ошибка E2316 (переход с Builder 6, на Builder 2010)
В общем проект создавался на Builder 6, теперь я его пытаюсь скомпилировать на Builder 2010. Выдает ошибку: Помогите пожалуйста!

Настройка редактора кода в VS 2010
Такая проблема: Когда нажму на Enter, то курсор перенесется на другую строку. Как исправить?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru