![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Цитата:
Воспользовался твоим кодом линии. Еще раз -спасибо! Самостоятельно не могу устранить один недостаток - цвет линии меняется с изменением фона. Помоги задать цвет линии и этот цвет не должен зависеть от фона (рисунка), на котором рисуется линия. Заранее спасибо. |