|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
рисование линии в реальном масштабе времени
При нажатии кноки мышки в точке А на поле рисунка и при ее отпускании в точке В рисуется отрезок прямой. При этом, линия прорисовывается только при отпускании кнопки мышки в точке В. А как организовать, чтобы линия прорисовывалась в реальном масштабе времени в процессе перемещения маркера, как, допустим, работает практически любой инструмент в Фотошопе?
И вопрос более общего характера - как сделать, чтобы текст в эдите отображался на рисунке или в ворде сразу после набора символа в эдите, а не после того, как набран весь текст и нажата кнопки "сохранить"? Спасибо! Последний раз редактировалось cadil, 01.08.2008 в 15:57. |
#2
|
||||
|
||||
Чтобы рисовать линию в реальном времени при перемещении мышки по форме нужно отрисовку проводить в обработчике события формы OnMouseMove и в качестве координат конечной точки линии использовать координаты курсора, также надо каждый раз очищать форму, иначе нарисованные ранее линии не исчезнут. И ещё - сначало нада рисовать в буфере(на невидимой канве) а патом переносить на саму форму, если этого не сделать то будет сильное мигание изображения.
Чтобы текст наносился на изображение сразу при изменении текста в Edit нужно наносить его на изображение при событии едита ONChange - тут проблемы теже - мигание и обновление изображения(иначе текст будет накладываться на старый). |
#3
|
|||
|
|||
Код:
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
|
|||
|
|||
Нет слов, чтобы выразить свою благодарность ART ! Промучился несколько дней, чтобы по советам Vex_TH написать соответствующие инструкции - нужного результата не добился. Зашел на сайт попросить помощи, а тут подарок - исходник программы уже висит!
Действительно - Знать путь и пройти его - не одно и тоже. ART - еще раз спасибо! Удач! Последний раз редактировалось cadil, 06.08.2008 в 11:06. |
#5
|
|||
|
|||
Цитата:
Воспользовался твоим кодом линии. Еще раз -спасибо! Самостоятельно не могу устранить один недостаток - цвет линии меняется с изменением фона. Помоги задать цвет линии и этот цвет не должен зависеть от фона (рисунка), на котором рисуется линия. Заранее спасибо. |