![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выручите с построением линии.
Cr@sh © (2002-08-19 07:55:00)Добрый день, Уважаемые мастера.
Выручите, пожалуйста, напишите примерчик, как сделать следующее:
построить прямую, с помощью мышки, тем же способом что и в Paint`e, т.е. кликнул и потащил, а прямая тянется за мышкой, отпустил - прямая кончилась.
Очень срочно надо.
Заранее спасибо.
Cr@sh (2002-08-20 11:21:00) [1]>Lord Warlock
Кстати на счет КРЕДО, где его надыбать халявный можно?
Lord Warlock (2002-08-20 09:12:00) [2]
> Cr@sh © (19.08.02 11:19)
А КРЕДО спереть и не мучаться слабо? :)
Cr@sh (2002-08-19 11:19:00) [3]12 форм по 5000-6000 строк в 3 из них и все имеют отношение к построению :(
Вобщем это геологическая программа построения разрезов, там вводятся куча отметок, а прога должна все это переварить и построить.
Я там сделал так, что есть 2 имэйджа один под другим верхний транспарент, а нижний с сеткой(сетка не должна выводится на печать).
Когда начинаешь строить линии открывается форма выбора вида линии, а затем уже строишь.
Но проблема в том, что если не вводить в самом начале значения и на строить ничего, то прямые строятся как надо, но при этом имэйдж становится не транспарент. А если все ввести и попытаться строить линии, то они все солид :(. Может попытаться во время построения линий отключать транспарент, а затем снова включать? Так че делать?
lenin (2002-08-19 10:26:00) [4]А можно код посмотреть.
Cr@sh (2002-08-19 10:04:00) [5]Ув. мастера, извините за назойливость, но, ответьте еще на такой вопрос:
Вобщем если поставить
Pen.Style:=psDot;
Pen.Mode:=pmMergePenNot;
и начать рисовать на пустой канве, то все канает,
а вот если перед этим на канве уже есть построенный график и у имэйджа стоит транспарент тру, то тогда постоянно рисуется простая прямая.
Cr@sh (2002-08-19 09:38:00) [6]Еще раз огромное всем спасибо.
lenin (2002-08-19 09:34:00) [7]А ты поставь вместо 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;
Lord Warlock (2002-08-19 09:29:00) [8]допустим на радиокнопки
case Radoigroup1.ItemIndex of
0:Canvas.Pen.Style:=psSolid;
1:Canvas.Pen.Style:=psDash;
end;
Поподробнее можно посмотреть в справке на TPen
Cr@sh (2002-08-19 09:21:00) [9]>lenin
А как сделать, чтобы рисовалась не просто прямая, а допустим пунктирная?
Заранее спасибо.
Cr@sh (2002-08-19 08:58:00) [10]>lenin
Спасибо ОГРОМНОЕ, хоть кто-то нормально ответил...
И еще раз спасибо.
lenin (2002-08-19 08:35:00) [11]Вот один простенький вариант:
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.