Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рисование кривой.. кривая линия, как в паинте... 
:(
    Опции темы
Vladimir111
  Дата 26.11.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2007

Репутация: нет
Всего: нет



Доброго времени суток...

у меня озникала проблемка, может кому то она покажеться простой, но я новичок, и пока что не очень хорошо разбираюсь  Делфи...

так вот, сам вопрос, как можно нарисовать кривую линию, не Безье а именно как в паинте, когда рисуешь карандашом???

кто знает как это сделать и может подсказать, помогите пожалуйста....
PM MAIL   Вверх
Alexeis
Дата 26.11.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(Vladimir111 @  26.11.2007,  08:52 Найти цитируемый пост)
так вот, сам вопрос, как можно нарисовать кривую линию, не Безье а именно как в паинте, когда рисуешь карандашом???

  Когда в первый раз кликают нужно вызывать MoveTo в эту точку, а затем, пока не отпустят левую кнопку мыши делать LineTo к каждой новой точке. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vladimir111
Дата 26.11.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2007

Репутация: нет
Всего: нет



Алекс, большое тебе спасибо, но у меня неп олучаеться эту линию теперь остановить\, тоесть она следует за курсором, а надо чтобы при нажатие она рисовалась, а после отпускания мыши прекращала рисоваться...

вот как надо...

а вот как у меня получается...(((

конечно скажете что я безрукий и т.д... но что то непойму что писать на отпускание мыши..((( smile 
PM MAIL   Вверх
Alexeis
Дата 26.11.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Обработчик OnMouseUp


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vladimir111
  Дата 26.11.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2007

Репутация: нет
Всего: нет



Цитата

unit paint2_1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, Menus, StdCtrls, Spin;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Exit1: TMenuItem;
    Mode1: TMenuItem;
    ShowDragging1: TMenuItem;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Image1: TImage;
    RadioGroup1: TRadioGroup;
    GroupBox1: TGroupBox;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    ComboBox1: TComboBox;
    Label2: TLabel;
    Button1: TButton;
    ColorDialog1: TColorDialog;
    GroupBox2: TGroupBox;
    ComboBox2: TComboBox;
    Label3: TLabel;
    Button2: TButton;
    ColorDialog2: TColorDialog;
    Button3: TButton;
    procedure Exit1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button2Click(Sender: TObject);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  x0,y0:integer;
  x1,y1:integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Canvas.pen.style:= psClear;
image1.Canvas.brush.style:= bsSolid;
image1.Canvas.Brush.Color:= clWhite;
image1.Canvas.Rectangle(0,0,image1.width,image1.height);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
image1.Canvas.pen.style:= psClear;
image1.Canvas.brush.style:= bsSolid;
image1.Canvas.Brush.Color:= clWhite;
image1.Canvas.Rectangle(0,0,image1.width,image1.height);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
statusbar1.SimpleText:='x='+(IntToStr(x)+'y='+IntToStr(y));

   if RadioGroup1.ItemIndex = 3 then begin
      image1.Canvas.LineTo(x,y);
   end;


      if RadioGroup1.ItemIndex = 3 then begin
       Showdragging1.Checked:=false;
      end;

  if Showdragging1.Checked = true then begin


    if ssLeft in Shift then begin

      if x1<>1000000 then begin
        image1.Canvas.Pen.Mode:=pmxor;
        image1.Canvas.Pen.Style:=psDot;
        image1.Canvas.Pen.Width:=1;
        image1.Canvas.Pen.color:=clWhite;
        image1.Canvas.Brush.Style:=bsClear;

        if RadioGroup1.ItemIndex = 0 then begin
          image1.Canvas.MoveTo(x0,y0);
          Image1.Canvas.LineTo(x1,y1);
        end;
        if RadioGroup1.ItemIndex = 1 then begin
          image1.Canvas.ellipse(x1,y1,x0,y0);
        end;
        if RadioGroup1.ItemIndex = 2 then begin
          image1.Canvas.rectangle(x1,y1,x0,y0);
        end;

      end;

        image1.Canvas.Pen.Mode:=pmxor;
      image1.Canvas.Pen.Style:=psDot;
      image1.Canvas.Pen.Width:=1;
      image1.Canvas.Pen.color:=clWhite;
      image1.Canvas.Brush.Style:=bsClear;

      if RadioGroup1.ItemIndex = 0 then begin
        image1.Canvas.MoveTo(x0,y0);
        Image1.Canvas.LineTo(x,y);
      end;
      if RadioGroup1.ItemIndex = 1 then begin
        image1.Canvas.ellipse(x,y,x0,y0);
      end;
      if RadioGroup1.ItemIndex = 2 then begin
        image1.Canvas.rectangle(x,y,x0,y0);
      end;


      x1:=x;
      y1:=y;
    end;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ColorDialog1.Execute;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  x0:=x;
  y0:=y;
  x1:=1000000;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ColorDialog2.Execute;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if ComboBox1.ItemIndex = 0 then image1.canvas.Pen.Style:=psSolid;
 if ComboBox1.ItemIndex = 1 then image1.canvas.Pen.Style:=psDash;
 if ComboBox1.ItemIndex = 2 then image1.canvas.Pen.Style:=psDot;
 if ComboBox1.ItemIndex = 3 then image1.canvas.Pen.Style:=psDashDot;
 if ComboBox1.ItemIndex = 4 then image1.canvas.Pen.Style:=psDashDotDot;
 if ComboBox1.ItemIndex = 5 then image1.canvas.Pen.Style:=psClear;

  image1.Canvas.pen.Color:=ColorDialog1.Color;
  image1.Canvas.pen.width:=SpinEdit1.value;
  image1.canvas.pen.mode:=pmCopy;

  if ComboBox2.ItemIndex = 0 then image1.Canvas.Brush.Style:=bsSolid;
  if ComboBox2.ItemIndex = 1 then image1.Canvas.Brush.Style:=bsHorizontal;
  if ComboBox2.ItemIndex = 2 then image1.Canvas.Brush.Style:=bsVertical;
  if ComboBox2.ItemIndex = 3 then image1.Canvas.Brush.Style:=bsCross;
  if ComboBox2.ItemIndex = 4 then image1.Canvas.Brush.Style:=bsDiagCross;
  if ComboBox2.ItemIndex = 5 then image1.Canvas.Brush.Style:=bsBDiagonal;
  if ComboBox2.ItemIndex = 6 then image1.Canvas.Brush.Style:=bsFDiagonal;
  if ComboBox2.ItemIndex = 7 then image1.Canvas.Brush.Style:=bsClear;

     image1.Canvas.Brush.Color:=ColorDialog2.Color;

  if RadioGroup1.ItemIndex = 0 then begin
     image1.Canvas.MoveTo(x0,y0);
     Image1.Canvas.LineTo(x,y);
  end;
  if RadioGroup1.ItemIndex = 1 then begin
     image1.Canvas.ellipse(x,y,x0,y0);
  end;
  if RadioGroup1.ItemIndex = 2 then begin
     image1.Canvas.rectangle(x,y,x0,y0);
  end;
  if RadioGroup1.ItemIndex = 3 then begin
     image1.Canvas.MoveTo(x,y);
  end;


end;

end.


мля, я наверно непрограммер, но что то не понятно, куда что писать....
жирным выделенно то что отвечает за нарисовку кривой линии....
PM MAIL   Вверх
zhefran
Дата 24.3.2008, 19:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

Репутация: нет
Всего: нет



Цитата(Vladimir111 @  26.11.2007,  08:52 Найти цитируемый пост)
так вот, сам вопрос, как можно нарисовать кривую линию, не Безье а именно как в паинте, когда рисуешь карандашом???


Код


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
    drag:boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
//if  then
//canvas.MoveTo(10,10);


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
drag:=false;
Form1.AlphaBlend:=true;
//Form1.AlphaBlendValue:=100;
// Form1.AlphaBlendValue:=255;
//paintbox1.Color:=clwhite;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
drag:=false;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
drag:=true;
canvas.MoveTo(x,y);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if drag=true then
   canvas.LineTo(x,y);
end;

end.



Прорисовка в окне формы!

--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.