Рисование в Delphi, С помощью мыши |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Рисование в Delphi, С помощью мыши |
Shmaniche |
9.12.2012 17:44
Сообщение
#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 - 9.12.2012 17:46 |
Shmaniche |
10.12.2012 13:38
Сообщение
#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; Нажимаю на пункт меню, выбираю цвет, но границы фигуры все равно остается черными. Далее, обнаружил, что если убрать строку "Canvas.Pen.Mode:=pmNot;", то перекрашивание границ фигуры происходит успешно, но опять возникает след . Прочитал, что перерисовку можно делать с помощью “Repaint”: Код begin Canvas.Ellipse(StartX, StartY, EndX, EndY); Repaint; // Перерисовываем фигуру, чтобы избавиться от следа, когда ее уменьшаем. EndX:=X; EndY:=Y; Canvas.Ellipse(StartX, StartY, EndX, EndY); end; Но когда рядом рисуешь второй эллипс, первый исчезает . Сообщение отредактировано: Shmaniche - 10.12.2012 14:27 |
Текстовая версия | 24.05.2024 20:02 |