Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCanvas, динамическое рисование линии 
:(
    Опции темы
Bacardi
  Дата 15.4.2005, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



Господа, мне нужно ввести данные: линию (начальные и конечные координаты) и точки. Координаты точек я записываю в StringGrid, один столбец которого сохраняет координаты Х, другой -- У.
Дело в другом. Моя задумка такая: юзер выбирает в rgInputData: TRadioGroup тип вводимых данных (Item[0]=Линия, Item[1]=Точка). И я хочу, чтобы линия воодилась так: нажал на области - записались координаты линии начальные (xn, yn)... далее ведя по области (Drag), держа мышь нажатой, передвигал и линию, затем когда отпускает левую кн. мыши - записывались xk, yk...
Не выходит закрашивать линию. Посоветуйте плз. smile

Код

procedure TfProcessing.Image1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if rgInputData.ItemIndex=0                {если выбран ввод линии}
  then
    begin
    Image1.Canvas.MoveTo(X,Y);
    xn:=X;
    yn:=Y;
    xm:=X;
    ym:=Y;
    sbStatus.Panels[0].Text:='Совет: поставьте конечную точку линии';
    CanDrag:=True;
    end
  else                                                {если выбран ввод точки}
    begin
    sgT.RowCount:=sgT.RowCount+1;
    sgT.Cells[0,count]:=IntToStr(count);
    Image1.Canvas.Brush.Color:=clBlack;
    Image1.Canvas.MoveTo(X,Y);
    Image1.Canvas.LineTo(X,Y);
    end;
end;

procedure TfProcessing.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
if (rgInputData.ItemIndex=0) and CanDrag          {если выбран ввод линии и мышь была нажата}
  then
    begin
    with Image1.Canvas do
      begin
      Brush.Color:=clWhite;                                   {пытаюсь закрасить старую линию}
      LineTo(xm,ym);
      MoveTo(xn,yn);
      Brush.Color:=clBlack;
      LineTo(X,Y);
      xm:=X;                                                            {сохраняю координаты для закрашивания}
      ym:=Y;
      end;
    end;
end;

procedure TfProcessing.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if rgInputData.ItemIndex=0
  then
    begin
    sbStatus.Panels[0].Text:='Совет: измените тип вводимых данных';    
    Image1.Canvas.LineTo(X,Y);
    xk:=X;                                                                 {конечные координаты линии}
    yk:=Y;
    CanDrag:=False;
    end;
end;


собственно в итоге водя по канвасу несколько раз вокруг - канва закрашивается в черный цвет.

Это сообщение отредактировал(а) Bacardi - 15.4.2005, 22:45
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
fess
Дата 16.4.2005, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 2
Всего: 3



Вот, посмотри пример (кидаешь на форму Timage и TRadioGroup с двуя Items'ами) :

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    RadioGroup1: TRadioGroup;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MDown:boolean;
  XBegin,YBegin, TempX,TempY :integer;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  {Определяем, что мыша нажата и запоминаем начальные координаты}
  MDown:=true;
  XBegin:=X;
  YBegin:=Y;
  TempX:=X;
  TempY:=Y;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MDown:=false;
  Image1.Canvas.Pen.Color:=clBlack;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MDown:=false;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if MDown      // если мыша нажата
  then  begin


    if RadioGroup1.ItemIndex=1 // если выбрано линия из точек,
    then Image1.Canvas.Pen.Style:=psDot
    else  Image1.Canvas.Pen.Style:=psSolid; //    Сплошная линия


    {очистка Image1, в том числе стираются и все страрые линии}
    {тебе их придётся заново рисовать, но это не сложно, т.к. они у  тебя есть в StringGrid'е }
    Image1.Canvas.Rectangle(-1,-1, Image1.Width+1,Image1.Height +1);
    {Рисование линии}
    Image1.Canvas.MoveTo(XBegin,YBegin);
    Image1.Canvas.LineTo(X,Y);
//    Если тебя не устраивает, что стираются предыдущие линии, то
//    закоментирую предыдущие три строки  и расскоментируй всё что ниже
//    Image1.Canvas.Pen.Color:=clWhite;
//    Image1.Canvas.MoveTo(XBegin,YBegin);
//    Image1.Canvas.LineTo(TempX,TempY);
//
//    Image1.Canvas.Pen.Color:=clBlack;
//    Image1.Canvas.MoveTo(XBegin,YBegin);
//    Image1.Canvas.LineTo(X,Y);
//    TempX:=X;
//    TempY:=Y;
  end;

end;

end.

--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Bacardi
Дата 16.4.2005, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



спасибо, фесс
щас опробую!
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Bacardi
Дата 17.4.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



Круто! работает! спасибо smile

smile
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
fess
Дата 17.4.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 2
Всего: 3




Цитата
Круто! работает! спасибо :smile


Я рад, что помогло smile

Это сообщение отредактировал(а) fess - 17.4.2005, 14:37
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.