Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.08.2008, 15:54
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию рисование линии в реальном масштабе времени

При нажатии кноки мышки в точке А на поле рисунка и при ее отпускании в точке В рисуется отрезок прямой. При этом, линия прорисовывается только при отпускании кнопки мышки в точке В. А как организовать, чтобы линия прорисовывалась в реальном масштабе времени в процессе перемещения маркера, как, допустим, работает практически любой инструмент в Фотошопе?
И вопрос более общего характера - как сделать, чтобы текст в эдите отображался на рисунке или в ворде сразу после набора символа в эдите, а не после того, как набран весь текст и нажата кнопки "сохранить"?
Спасибо!

Последний раз редактировалось cadil, 01.08.2008 в 15:57.
Ответить с цитированием
  #2  
Старый 01.08.2008, 17:27
Аватар для Vex_TH
Vex_TH Vex_TH вне форума
Прохожий
 
Регистрация: 31.07.2008
Сообщения: 5
Репутация: 10
По умолчанию

Чтобы рисовать линию в реальном времени при перемещении мышки по форме нужно отрисовку проводить в обработчике события формы OnMouseMove и в качестве координат конечной точки линии использовать координаты курсора, также надо каждый раз очищать форму, иначе нарисованные ранее линии не исчезнут. И ещё - сначало нада рисовать в буфере(на невидимой канве) а патом переносить на саму форму, если этого не сделать то будет сильное мигание изображения.
Чтобы текст наносился на изображение сразу при изменении текста в Edit нужно наносить его на изображение при событии едита ONChange - тут проблемы теже - мигание и обновление изображения(иначе текст будет накладываться на старый).
Ответить с цитированием
  #3  
Старый 04.08.2008, 17:39
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Код:

unit Unit1;

interface

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

type
  TForm1  =  class(TForm)
    Image1: TImage;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, 
      Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X,  Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X,  Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  Origin,  MovePt: TPoint;
  Drawing: boolean;
implementation

{$R  * .dfm}

procedure DrawShape(TopLeft,  BottomRight: TPoint; AMode: TPenMode);
begin
  with Form1.Image1.Canvas do begin
    Pen.Mode  :=  AMode;
    MoveTo(TopLeft.X,  TopLeft.Y);
    LineTo(BottomRight.X,  BottomRight.Y);
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, 
  Y: Integer);
begin
 if Drawing  =  true then begin
  DrawShape(Origin,  MovePt,  pmNotXor);
  MovePt  :=  Point(X,  Y);
  DrawShape(Origin,  MovePt,  pmNotXor);
 end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X,  Y: Integer);
begin
  Image1.Canvas.MoveTo(X,  Y);
  Origin  :=  Point(X,  Y);
  MovePt  :=  Origin;
  Drawing  :=  true;
end;

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

end.

Последний раз редактировалось ART, 04.08.2008 в 17:42.
Ответить с цитированием
  #4  
Старый 06.08.2008, 10:57
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Нет слов, чтобы выразить свою благодарность ART ! Промучился несколько дней, чтобы по советам Vex_TH написать соответствующие инструкции - нужного результата не добился. Зашел на сайт попросить помощи, а тут подарок - исходник программы уже висит!
Действительно - Знать путь и пройти его - не одно и тоже.
ART - еще раз спасибо! Удач!

Последний раз редактировалось cadil, 06.08.2008 в 11:06.
Ответить с цитированием
  #5  
Старый 05.09.2008, 16:01
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от ART
Код:

unit Unit1;

interface

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

type
  TForm1  =  class(TForm)
    Image1: TImage;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, 
      Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X,  Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X,  Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  Origin,  MovePt: TPoint;
  Drawing: boolean;
implementation

{$R  * .dfm}

procedure DrawShape(TopLeft,  BottomRight: TPoint; AMode: TPenMode);
begin
  with Form1.Image1.Canvas do begin
    Pen.Mode  :=  AMode;
    MoveTo(TopLeft.X,  TopLeft.Y);
    LineTo(BottomRight.X,  BottomRight.Y);
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, 
  Y: Integer);
begin
 if Drawing  =  true then begin
  DrawShape(Origin,  MovePt,  pmNotXor);
  MovePt  :=  Point(X,  Y);
  DrawShape(Origin,  MovePt,  pmNotXor);
 end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X,  Y: Integer);
begin
  Image1.Canvas.MoveTo(X,  Y);
  Origin  :=  Point(X,  Y);
  MovePt  :=  Origin;
  Drawing  :=  true;
end;

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

end.

Воспользовался твоим кодом линии. Еще раз -спасибо!
Самостоятельно не могу устранить один недостаток - цвет линии меняется с изменением фона. Помоги задать цвет линии и этот цвет не должен зависеть от фона (рисунка), на котором рисуется линия. Заранее спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter