IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Рисование в Delphi, С помощью мыши
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Надо нарисовать элипс. Самое простое что пришло в голову это поместить на форму PaintBox и написать:

Код

var
  Form1: TForm1;
  MouseButtonDown: Boolean= false;
  StartX, StartY: Integer;

implementation


procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
MouseButtonDown:=true;
StartX:=X;
StartY:=Y;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Form1.Caption:=Format ('Координаты: x=%d, y=%d ' , [X, Y]); // Координаты в заголовке.

if  MouseButtonDown=true then
PaintBox1.Canvas.Ellipse(StartX, Starty, X, Y);

end;

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



Но от элипса остается след, если нажатую мышку двигать назад. Как избавиться от этого следа?

Сообщение отредактировано: Shmaniche -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Ладно, с перерисовкой как-нибудь потом разберусь. Сейчас меня волнует другой, я хочу сделать возможность изменять цвет границы будущей фигуры, но что-то не получается.
На форму бросил компонент TMainMenu и создал пункт “PenColor”, также на форму бросил компонент “ColorDialog”. Пишу:

Код

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Canvas.Pen.Mode:=pmNot; // Установить такой вид пера, чтобы избежать следа.
Canvas.Pen.Style:=psSolid; // Сплошная линия.
Canvas.Pen.Width:=2; // Толщина кисти
Canvas.Brush.Style:=bsClear;

if (MouseButtonDown) then…

End;

procedure TForm1.PenColorClick(Sender: TObject);
begin
if ColorDialog1.Execute then
Canvas.Pen.Color:=ColorDialog1.Color;
end;


Нажимаю на пункт меню, выбираю цвет, но границы фигуры все равно остается черными. sad.gif

Далее, обнаружил, что если убрать строку "Canvas.Pen.Mode:=pmNot;", то перекрашивание границ фигуры происходит успешно, но опять возникает след sad.gif. Прочитал, что перерисовку можно делать с помощью “Repaint”:
Код

    begin
     Canvas.Ellipse(StartX, StartY, EndX, EndY);
     Repaint; // Перерисовываем фигуру, чтобы избавиться от следа, когда ее уменьшаем.
     EndX:=X; EndY:=Y;
     Canvas.Ellipse(StartX, StartY, EndX, EndY);
    end;


Но когда рядом рисуешь второй эллипс, первый исчезает sad.gif.

Сообщение отредактировано: Shmaniche -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Shmaniche   Рисование в Delphi   9.12.2012 21:44
TarasBer   Стирать след, оставленный на предыдущем кадре.   10.12.2012 0:34
Shmaniche   Стирать след, оставленный на предыдущем кадре. …   10.12.2012 9:36
Shmaniche   Дорабоотал прежний код, чтобы можно было рисовать …   10.12.2012 12:22
TarasBer   > if (MouseButtonDown=true) and (Rectangle=true…   10.12.2012 13:26
Shmaniche   TarasBer Не согласен, что условия выписаны напра…   10.12.2012 14:34
TarasBer   ответ неверный рисовать надо только тогда, когда к…   10.12.2012 14:52
Shmaniche   TaraBer Так, похоже разрулил :) : if (MouseB…   10.12.2012 15:03
TarasBer   > Так, похоже разрулил Теперь верно. > В…   10.12.2012 15:18
Shmaniche   Лови событие OnPaint у формы и в нём рисуй фигуру…   10.12.2012 17:10
TarasBer   А, тебе не нравится, что остаётся только последняя…   10.12.2012 17:22
Shmaniche   Ладно, с перерисовкой как-нибудь потом разберусь. …   10.12.2012 17:38
Shmaniche   Ха-ха! Методом тыка нашел режим карандаша, кот…   10.12.2012 20:44
Shmaniche   Задумал добавить возможность рисовать мышкой прост…   10.12.2012 22:51
TarasBer   Да так же - брать и явно стирать.   11.12.2012 13:37
Shmaniche   TaraBer Можешь продемонстрировать? :)   11.12.2012 13:52
TarasBer   Да так же, как ты эллипсы явно стирал. Что такое x…   11.12.2012 14:26
Shmaniche   Да так же, как ты эллипсы явно стирал. Элипсы я…   11.12.2012 16:03
TarasBer   Эллипс ты стираешь не выбором режима, а именно тем…   11.12.2012 16:04
Shmaniche   Эллипс ты стираешь не выбором режима, а именно те…   11.12.2012 16:16
TarasBer   Похоже понял! :) Всё наоборот. Ты повторно р…   11.12.2012 18:05
Shmaniche   Поразмыслив придумал как из эллипса сделать окружн…   21.12.2012 19:56
nishaknapp   Why not settling on games that is fun and at the s…   16.01.2023 7:31


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.05.2024 9:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name