Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-95744
Гас
2002-08-16 14:34
2002.08.29
получить доступ к свойствам чужого приложения, например Title


1-95854
Keymaster
2002-08-18 01:36
2002.08.29
Два нехитрых вопроса


3-95680
Aleksandr
2002-08-08 14:26
2002.08.29
При добавке индекса к таблице ругается...


1-95812
lipskiy
2002-08-15 01:46
2002.08.29
Можно ли получить имя процедуры/функции в строковую переменную?


1-95878
skyslider
2002-08-18 04:11
2002.08.29
Как узнать какая строка выделена в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский