Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2007, 11:24   #1
grey
Пользователь Подтвердите свой е-майл
 
Регистрация: 24.10.2007
Сообщений: 36
По умолчанию Два вопроса новичка по графике.

1.Если рисовать прямо на форме, то после перекрытия окна программы другим окном, нарисованное пропадает, это происходит из-за обновления окна.
Как раз этим свойством я и хочу воспользоваться.(Хочу реализовать прохождение пунктирной линии поверх изображения Image).
Можно ли нажатием кнопки вызвать обновление окна?

2. (Не знаю, реально ли это) Возможно, ли зная координаты Y, узнать координаты X уже нарисованной на Image линии?
grey вне форума Ответить с цитированием
Старый 04.11.2007, 11:39   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
Сообщение

1. http://programmersforum.ru/showthrea...%E8%E5+OnPaint смотри пост №4

2. Может и возможно, я об этом ничего не знаю. Но скорее всего нет.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 04.11.2007, 12:09   #3
grey
Пользователь Подтвердите свой е-майл
 
Регистрация: 24.10.2007
Сообщений: 36
По умолчанию

Спасибо.
Цитата:
2. Может и возможно, я об этом ничего не знаю. Но скорее всего нет.
Но без этого я в принципе обойдусь, сделаю чтение из переменной при построении изображения.
grey вне форума Ответить с цитированием
Старый 04.11.2007, 14:37   #4
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Цитата:
Сообщение от grey Посмотреть сообщение
2. (Не знаю, реально ли это) Возможно, ли зная координаты Y, узнать координаты X уже нарисованной на Image линии?
Думаю можно. Надо будет тока попиксельно все смотреть. Цвета пикселей там сравнивать.
bill вне форума Ответить с цитированием
Старый 04.11.2007, 15:13   #5
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию -=1=-

Случайно не этот принцип нужен?
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    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 }
    procedure XORLine;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  X,Y,x0,y0,lx,ly:integer;

implementation

{$R *.dfm}

procedure TForm1.XORLine;
begin
  Form1.Canvas.MoveTo(x0,y0);
  Form1.Canvas.LineTo(lx,ly);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Color:=clWhite;
  Form1.Canvas.Pen.Color:=clRed;
  Form1.Canvas.Pen.Width:=3;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1.Tag:=1;
  x0:=X;
  y0:=Y;
  lx:=X;
  ly:=Y;
    //Form1.Canvas.Pen.Color:=clRed;
    Randomize;
    Form1.Canvas.Pen.Color:=RGB(Random(256),Random(256),Random(256));
  Form1.Canvas.Pen.Mode:=pmNotXor;
  XORLine;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then begin
    XORLine;
    lx:=X;
    ly:=Y;

    XORLine;
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1.Canvas.Pen.Mode:=pmCopy;
  Form1.Canvas.MoveTo(x0,y0);
  Form1.Canvas.LineTo(X,Y);
end;

end.
Alex21 вне форума Ответить с цитированием
Старый 04.11.2007, 16:29   #6
grey
Пользователь Подтвердите свой е-майл
 
Регистрация: 24.10.2007
Сообщений: 36
По умолчанию

Цитата:
Случайно не этот принцип нужен?
Спасибо, я уже "выкрутился", дело в том, что график рисую я сам, просто теперь заношу необходимые данные в переменные во время построения.
Думаю, что не стоит усложнять там, где и так не очень разбираюсь.

Но вот по первому вопросу я так и не догнал. По ссылке от AlDelta проходил:
Цитата:
1. http://programmersforum.ru/showthrea...EE%E1%FB%F2%E8 %E5+OnPaint смотри пост №4
Тут почти слово в слово написано, что и вот здесь:
GDI: графика в Delphi - Часть I.
Но как это на практике сделать?, опыта нехватает.
Как при нажатии на кнопку вызвать обновление окна?
grey вне форума Ответить с цитированием
Старый 04.11.2007, 16:48   #7
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
Восклицание Если я правильно тебя понял.

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Canvas.Brush.Color:=clYellow;
Form1.Canvas.Rectangle(10,10,200,200);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Refresh;
end;
При нажатии на первую кнопку нарисуется желтый квадрат.
При нажатии на вторую форма обновится и квадрата не будет.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 04.11.2007, 17:48   #8
grey
Пользователь Подтвердите свой е-майл
 
Регистрация: 24.10.2007
Сообщений: 36
По умолчанию

Цитата:
Если я правильно тебя понял ...
oK.
Просто два дня бьюсь: необходимо вывести движущуюся по нажатию кнопки пунктирную линию поверх Image1. Чего только на чего не накладывал. Стираю линию - стирается или перекрашивается график и на Image.

Подошло. Спасибо :)
grey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помощь в графике KingArthur Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 19.04.2008 23:58
Два вопроса Никки Общие вопросы Delphi 2 19.01.2008 21:39
Задачки по графике LaDy MaRMeLaD Паскаль, Turbo Pascal, PascalABC.NET 4 12.01.2008 16:14
Координаты на графике Dimon88 Помощь студентам 2 15.11.2007 17:34
Два вопроса новичка по синтаксису: grey Помощь студентам 6 09.11.2007 22:49