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

Как изменять масштаб графика, отрисованного на компоненте Image, с помощью мыши?

26.02.2009, 15:06. Показов 3812. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
скажите пожалуйста как можно изменять масштаб графика находящийся на компоненте image с помощью мыши, нужно срочно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2009, 15:06
Ответы с готовыми решениями:

Построение графика на компоненте Image
Кто сможет мне помочь в вопросе отрисовки канвы по значениям из 2 столбцов на компоненте Image. Еще и масштабирование графика надо сделать ...

Построение графика в компоненте Image
Построение графика в компоненте Image, графиком является парабола построенная по формуле Y=AX^2+BX+C, где A(edit1), B(edit2) и C(edit 3)...

Как в Дельфи с помощью мыши можно перетаскивать Image?
Здравствуйте, у меня такой вопрос : Как в дельфи с помощью мыши можно перетаскивать image.

5
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
26.02.2009, 23:29
Разиля, с помощью мыши сразу не скажу. Может кто-то из формчан скажет как сделать реакция на скроулинг?
А, если просто измение масштаба, то вот
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
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int zoom;
zoom = 3;
StringGrid1->Cells[1][1] = "x";
StringGrid1->Cells[1][2] = "y";
Img->Canvas->Pen->Color = clBlue;
float x,y,xBack,yBack;
xBack = Img->Width;
yBack = Img->Height;
for (x=0; x<=0.8; x=x+0.1)
        {
        y= tanl(x)-(1/3)*tanl(5*x)+(1/5)*tanl(5)-(1/3);
        if (x==0)Img->Canvas->MoveTo((Img->Width)/2+ zoom*50*x,(Img->Height)/2- zoom*50*y);
        Img->Canvas->LineTo(((Img->Width)/2 + zoom*50*x),(Img->Height)/2-zoom*50*y);
        xBack = (Img->Width)/2 + zoom*50*x;
        yBack = (Img->Height)/2 - zoom*50*y;
        RichEdit1->Lines->Add(FloatToStr(x)+" y="+FloatToStr(y));
        }
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float x,y;
x=StrToFloat(LabeledEdit1->Text);
y= tanl(x)-(1/3)*tanl(5*x)+(1/5)*tanl(5)-(1/3);
LabeledEdit2->Text = FloatToStr(y);
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
float a;
a = StrToFloat(Edit1->Text);
if (Edit1->Text != "") Edit2->Text = cos(3.14*a / 180);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &Key)
{
 
float a;
if (StringGrid1->Cells[1][1] != "")
        {
        a= StrToFloat(StringGrid1->Cells[1][1]);
        StringGrid1->Cells[1][2]= cos(3.14*a / 180);
        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
Img->Canvas->Rectangle(0,0,Img->Width,Img->Height);
 
int zoom;
if (CSpinEdit1->Text == "") zoom =0;
else zoom = StrToInt(CSpinEdit1->Text);
 
Img->Canvas->Pen->Color = clBlue;
float x,y,xBack,yBack;
xBack = Img->Width;
yBack = Img->Height;
for (x=0; x<=0.8; x=x+0.1)
        {
        y= tanl(x)-(1/3)*tanl(5*x)+(1/5)*tanl(5)-(1/3);
        if (x==0)Img->Canvas->MoveTo((Img->Width)/2+ zoom*50*x,(Img->Height)/2- zoom*50*y);
        Img->Canvas->LineTo(((Img->Width)/2 + zoom*50*x),(Img->Height)/2-zoom*50*y);
        xBack = (Img->Width)/2 + zoom*50*x;
        yBack = (Img->Height)/2 - zoom*50*y;
        RichEdit1->Lines->Add(FloatToStr(x)+" y="+FloatToStr(y));
        }
}
//---------------------------------------------------------------------------
Переменная zoom отвечает за масштаб. Установите компонент CSpinEdit из Sample
файл unit1.h
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
#include "CSPIN.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TImage *Img;
        TRichEdit *RichEdit1;
        TLabeledEdit *LabeledEdit1;
        TLabeledEdit *LabeledEdit2;
        TButton *Button1;
        TGroupBox *GroupBox1;
        TEdit *Edit1;
        TEdit *Edit2;
        TStringGrid *StringGrid1;
        TCSpinEdit *CSpinEdit1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Edit1Change(TObject *Sender);
        void __fastcall StringGrid1KeyPress(TObject *Sender, char &Key);
        void __fastcall CSpinEdit1Change(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
0
0 / 0 / 0
Регистрация: 17.02.2009
Сообщений: 38
27.02.2009, 19:06  [ТС]
я вожу максимальное и минимальное значения на интервале [0;0.8] в эдитах , шаг заполнения и при нажатиии кнопки в стригриде должна появится последовательность чисел от максимально до минимально значения, а у меня почему то появляется начиная с минимального только первые 4 значения , вот код, скажите в чем ошибка, нужно срочно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i;
float o,minX,maxX;
 
  o=StrToFloat( Edit6->Text); /*шаг заполнения*/
      minX=StrToFloat( Edit1->Text);/*считываем минимальное занчение*/
      maxX=StrToFloat( Edit2->Text);/*максимальное значение*/
   StringGrid1->Cells[1][1]=minX;
     StringGrid1->Cells[1][i]=maxX;
 
     for ( i=2;i<10; i++)
     {  if (minX<=maxX)
          StringGrid1->Cells[i][1]=minX+(i-1)*o;
 
     }
Добавлено через 2 часа 58 минут 39 секунд
неужели мне никто не поможет
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
28.02.2009, 00:49
У Вас выводится только 4 значения т.к свойство StringGrid RowCount = 5. Измените на необходимое значение.
0
0 / 0 / 0
Регистрация: 17.02.2009
Сообщений: 38
28.02.2009, 20:32  [ТС]
я вожу максимальное и минимальное значения на интервале [0;0.8] в эдитах , шаг заполнения и при нажатиии кнопки в стригриде должна появится последовательность чисел от максимально до минимально значения, а у меня почему то выводит значения не совсем верно, например я ввела мин =0, мак=0,5, шаг =0,1 и он у меня выводит 0 0,10000001 0,200000034 и т.д , вот код, скажите в чем ошибка, нужно срочно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  int i;  
     float o,minX,maxX;  
     
     o=StrToFloat( Edit6->Text); /*шаг заполнения*/  
     minX=StrToFloat( Edit1->Text);/*считываем минимальное занчение*/  
     maxX=StrToFloat( Edit2->Text);/*максимальное значение*/  
     StringGrid1->Cells[1][1]=minX;  
     StringGrid1->Cells[1][i]=maxX;  
     
    for ( i=2;i<10; i++)  
    {  if (minX<=maxX)  
    StringGrid1->Cells[i][1]=minX+(i-1)*o;  
    
    }
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
01.03.2009, 20:12
Тут дело в формате вывода данных. В паскале чтобы вести нужное кол-во знаков после запятой пишут :1. А в билдере я не помню как надо писать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2009, 20:12
Помогаю со студенческими работами здесь

Как изменять масштаб картинки
Всем привет. Как изменять масштаб картинки в picturebox?

Как узнать какой масштаб в компоненте вебБраузер
У меня динамически создаетсся несколько вкладок, на которых создается WebBrowser. Я могу установить масштаб любого WebBrowser на любой...

Как увеличить\уменьшить масштаб в компоненте chart
Подскажите, как увеличить\уменьшить масштаб в компоненте chart. Имеется в ввиду, при постройке графика при выделении того или инного...

как заставить CrystalReportViewer экспортировать, печатать, искать и изменять масштаб?
У нас есть страница, на ней размещена панель CrystalReportViewer как заставить эту панель экспортировать,печатать,искать и изменять...

Работа с мышью: С помощью клавиш [+] и [-] изменять область движения "мыши"
Всем привет! С мышью еще не работал. помогите пожалуйста написать программу: С помощью клавиш и изменять область движения...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru