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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2015, 19:00   #1
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
По умолчанию Canvas. График. Zoom

В общем, вопрос такой. Есть график. Как организовать зум с помощью canvas? Без использования tchart
NEymexa:c вне форума Ответить с цитированием
Старый 06.06.2015, 15:39   #2
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Стрелка

Можно воспользоваться этой функцией
Но проще рисовать на Image.Canvas
Код:
procedure TForm1.FormActivate(Sender: TObject);
var
  xc, yc, x1, y1, y2, m, xd, yd: integer;
  x, y, c, MyStep: Extended;
  ARect: TRect;
  MyColor: TColor;
begin
  ARect := Image1.Canvas.ClipRect;
  Image1.Canvas.Brush.Color := clWhite;
  Image1.Canvas.FillRect(ARect);

  Image1.Canvas.Pen.Color := 11829830;
  MyColor := clGreen;

  xc := ARect.Right div 2;
  yc := Arect.Bottom div 2;
  Image1.Canvas.MoveTo(0,yc); Image1.Canvas.LineTo(ARect.Right, yc); Image1.Canvas.LineTo(ARect.Right-8, yc-4);
  Image1.Canvas.MoveTo(ARect.Right,yc);  Image1.Canvas.LineTo(ARect.Right-8, yc+4);
  Image1.Canvas.MoveTo(xc,ARect.Bottom); Image1.Canvas.LineTo(xc,Arect.Top); Image1.Canvas.LineTo(xc-4,ARect.Top+8);
  Image1.Canvas.MoveTo(xc,ARect.Top); Image1.Canvas.LineTo(xc+4,ARect.Top+8);

  c := 1; m := 100;
  x := -c * sqrt(2);
  MyStep := 0.0009; // ×åì ìåíüøå ýòî ÷èñëî, òåì ëó÷øå êà÷åñòâî
  xd := 0; yd := 0; // Ñìåùåíèå öåíòðà ó ãðàôèêà. Ìîæíî ïîìåíÿòü äëÿ íàãëÿäíîñòè xd := 15; yd := -20;
  while x <= c*sqrt(2) do
  begin
    if sqrt(c*c*c*c+4*x*x*c*c)-x*x-c*c > MyStep then
    begin
      y := sqrt(sqrt(c*c*c*c+4*x*x*c*c)-x*x-c*c);
      x1:= xc + round(x*m);
      y1:= yc - round(y*m);
      y2:= yc + round(y*m);
      Image1.Canvas.Pixels[x1+xd,y1+yd] := MyColor;
      Image1.Canvas.Pixels[x1+xd,y2+yd] := MyColor;
    end;
    x := x + MyStep;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  p: integer;
  k: Extended;
begin
  p := 110;
  k := (200-p)/100;

  Image1.Picture.Bitmap.Width := Round(Image1.Width/k);
  Image1.Width := Image1.Picture.Bitmap.Width;
  Image1.Picture.Bitmap.Height := Round(Image1.Height/k);
  Image1.Height := Image1.Picture.Bitmap.Height;

  Image1.Canvas.CopyRect(Rect(0,0, Image1.Width, Image1.Height), Image1.Canvas, Rect(0,0, Round(k*Image1.Width), Round(k*Image1.Height)));
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  p: integer;
  k: Extended;
begin
  p := 90;
  k := (200-p)/100;

  Image1.Width := Round(Image1.Width/k);
  Image1.Height := Round(Image1.Height/k);

  Image1.Canvas.CopyRect(Rect(0,0, Image1.Width, Image1.Height), Image1.Canvas, Rect(0,0, Round(k*Image1.Width), Round(k*Image1.Height)));
end;
Изображения
Тип файла: jpg q.jpg (13.7 Кб, 144 просмотров)

Последний раз редактировалось Stilet; 06.06.2015 в 16:00.
SQLPowerUser вне форума Ответить с цитированием
Старый 07.06.2015, 12:48   #3
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
По умолчанию

Спасибо. Получилось
NEymexa:c вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Canvas. График не получается Erlotaza Помощь студентам 3 13.06.2013 01:22
компонент Canvas, график функции Dimabara Компоненты Delphi 0 05.02.2013 21:13
Как центрировать график построеный Canvas'ом в Image? CallMeJammer Общие вопросы Delphi 3 25.03.2012 02:11
Canvas + Zoom - не работает. Alex Cones Общие вопросы Delphi 7 22.07.2010 12:53
График в Canvas (с масштабированием) из StringGrid. PereCCC Помощь студентам 1 11.05.2008 10:45