Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.29;
Скачать: CL | DM;

Вниз

Выручите с построением линии.   Найти похожие ветки 

 
Cr@sh ©   (2002-08-19 07:55) [0]

Добрый день, Уважаемые мастера.
Выручите, пожалуйста, напишите примерчик, как сделать следующее:
построить прямую, с помощью мышки, тем же способом что и в Paint`e, т.е. кликнул и потащил, а прямая тянется за мышкой, отпустил - прямая кончилась.
Очень срочно надо.
Заранее спасибо.


 
lenin ©   (2002-08-19 08:35) [1]

Вот один простенький вариант:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
StrPosX, StrPosY: integer;
PosX, PosY: integer;
Down: boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
StrPosX:=X;
StrPosY:=Y;
PosX:=x;
PosY:=y;
Down:=true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Down then
with Canvas do
begin
Canvas.Pen.Mode:=pmNot;
Canvas.MoveTo(StrPosX,StrPosY);
Canvas.LineTo(PosX,PosY);
PosX:=X;
PosY:=Y;
Canvas.MoveTo(StrPosX,StrPosY);
Canvas.LineTo(PosX,PosY);
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Down:=false;
with Canvas do
begin
Pen.Mode:=pmCopy;
Pen.Color:=clBlue;
MoveTo(StrPosX,StrPosY);
LineTo(X,Y);
end;

end;


end.


 
Cr@sh ©   (2002-08-19 08:58) [2]

>lenin
Спасибо ОГРОМНОЕ, хоть кто-то нормально ответил...
И еще раз спасибо.


 
Cr@sh ©   (2002-08-19 09:21) [3]

>lenin
А как сделать, чтобы рисовалась не просто прямая, а допустим пунктирная?
Заранее спасибо.


 
Lord Warlock ©   (2002-08-19 09:29) [4]

допустим на радиокнопки

case Radoigroup1.ItemIndex of
0:Canvas.Pen.Style:=psSolid;
1:Canvas.Pen.Style:=psDash;
end;


Поподробнее можно посмотреть в справке на TPen


 
lenin ©   (2002-08-19 09:34) [5]

А ты поставь вместо Pen.Mode:=pmNot следующее
Pen.Style:=psDot;
Pen.Mode:=pmMergePenNot;
P.S. У меня там небольшая ошибка вместо:
with Canvas do
begin
Canvas.Pen.Mode:=pmNot;
Canvas.MoveTo(StrPosX,StrPosY);
Canvas.LineTo(PosX,PosY);
PosX:=X;
PosY:=Y;
Canvas.MoveTo(StrPosX,StrPosY);
Canvas.LineTo(PosX,PosY);
end;

надо:
with Canvas do
begin
Pen.Mode:=pmNot;
MoveTo(StrPosX,StrPosY);
LineTo(PosX,PosY);
PosX:=X;
PosY:=Y;
MoveTo(StrPosX,StrPosY);
LineTo(PosX,PosY);
end;


 
Cr@sh ©   (2002-08-19 09:38) [6]

Еще раз огромное всем спасибо.


 
Cr@sh ©   (2002-08-19 10:04) [7]

Ув. мастера, извините за назойливость, но, ответьте еще на такой вопрос:
Вобщем если поставить
Pen.Style:=psDot;
Pen.Mode:=pmMergePenNot;

и начать рисовать на пустой канве, то все канает,
а вот если перед этим на канве уже есть построенный график и у имэйджа стоит транспарент тру, то тогда постоянно рисуется простая прямая.


 
lenin ©   (2002-08-19 10:26) [8]

А можно код посмотреть.


 
Cr@sh ©   (2002-08-19 11:19) [9]

12 форм по 5000-6000 строк в 3 из них и все имеют отношение к построению :(
Вобщем это геологическая программа построения разрезов, там вводятся куча отметок, а прога должна все это переварить и построить.
Я там сделал так, что есть 2 имэйджа один под другим верхний транспарент, а нижний с сеткой(сетка не должна выводится на печать).
Когда начинаешь строить линии открывается форма выбора вида линии, а затем уже строишь.
Но проблема в том, что если не вводить в самом начале значения и на строить ничего, то прямые строятся как надо, но при этом имэйдж становится не транспарент. А если все ввести и попытаться строить линии, то они все солид :(. Может попытаться во время построения линий отключать транспарент, а затем снова включать? Так че делать?


 
Lord Warlock ©   (2002-08-20 09:12) [10]


> Cr@sh © (19.08.02 11:19)


А КРЕДО спереть и не мучаться слабо? :)


 
Cr@sh ©   (2002-08-20 11:21) [11]

>Lord Warlock
Кстати на счет КРЕДО, где его надыбать халявный можно?



Страницы: 1 вся ветка

Текущий архив: 2002.08.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
3-95651
SlavaK
2002-08-07 18:11
2002.08.29
Delphi-SQLServer


1-95810
Aszbed
2002-08-20 09:30
2002.08.29
Delohi for lamers :)


3-95690
Chak
2002-08-08 15:50
2002.08.29
Invalid BLOB handle in record buffer.


8-95914
Max79
2002-04-20 21:17
2002.08.29
Как узнать какой цвет графического изображения под мышкой???


1-95735
Kif
2002-08-16 20:09
2002.08.29
Есть вопрос...