![]() |
|
|
#1
|
|||
|
|||
![]() Доброго времени суток, уважаемые пользователи!
Помогите разработать приложение, рисующее при нажатии левой кнопки мыши на форме красную горизонтальную линию, перемещающуюся при нажатии клавиш y,g,h,j с зажатой клавишей ctrl. Клавиша z — очистка формы. Спасибо за внимание! |
#3
|
|||
|
|||
![]() Нужна помощь в написании программы. Именно помощь.
Если можно - почему бы и нет?! Не думаю, что стоит переносить тему в тот раздел. |
#4
|
||||
|
||||
![]() Цитата:
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Freeman (05.10.2013)
|
#5
|
|||
|
|||
![]() Не получается нарисовать горизонтальную линию.
Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Form1.Canvas.Brush.Style:=bsSolid; Form1.Canvas.Brush.Color:=clBtnFace; Form1.Canvas.FillRect(Rect(0,0,Form1.ClientWidth,Form1.ClientHeight)); Form1.Canvas.Pen.Color:=clRed; Form1.Canvas.Brush.Style:=bsHorizontal; Form1.Canvas.Brush.Color:=clred; Form1.Canvas.LineTo(100,y); Form1.Canvas.MoveTo(500,y); end; При нажатии левой кнопки на мыше линии возникают в произвольном порядке - иногда горизонтально, иногда со сдвигом на диагональ. Как исправить это? |
#6
|
||||
|
||||
![]() LineTo и MoveTo поменяйте местами.
MoveTo перемещает условный "курсор", LineTo чертит линию от "курсора" до переданных координат. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
Delphi_Source (06.10.2013)
|
#7
|
||||
|
||||
![]() Предложен самый простой вариант - лишь нужно бросить на форму компонент Shape лежащий на вкладке Additional, задать ему высоту (или длину) в 1 пиксель, у формы свойство KeyPreview задать как true, скопипастить для формы KeyDown (подправьте коды клавиш, если не так: Y > 89, G > 71, H > 72, J > 74)
З.Ы. Ну или если такой вариант не катит, покажите тогда как вы линию рисуете в полный размер (приведена лишь очистка полотна), попробую под это дело код доработать Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 06.10.2013 в 21:44. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Delphi_Source (06.10.2013)
|
#8
|
|||
|
|||
![]() Бросил на форму компонент Shape. Там появился квадратик. Его уменьшил до размеров 1х1. У KeyPreview поставил true
Цитата:
Что нужно скопипастить? Код? Попробовал его скопипастить. Теперь появились новые ошибки: Цитата:
Последний раз редактировалось Delphi_Source, 06.10.2013 в 22:31. |
#9
|
|||
|
|||
![]() На данный момент у меня имеется рисование линий и очистка формы клавишей Z. Осталось их только заставить перемещать вверх, вниз, влево, вправо указанными клавишами.
Привожу код: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var xg,yg,a,b:integer; {$R *.dfm} procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Form1.Canvas.Brush.Style:=bsSolid; Form1.Canvas.Brush.Color:=clBtnFace; Form1.Canvas.FillRect(Rect(0,0,Form1.ClientWidth,Form1.ClientHeight)); Form1.Canvas.Pen.Color:=clRed; Form1.Canvas.Brush.Style:=bsHorizontal; Form1.Canvas.Brush.Color:=clred; Form1.Canvas.MoveTo(500,y); Form1.Canvas.LineTo(100,y); end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var X, Y: Integer; begin if Key=ord('Z') then begin Form1.Canvas.Pen.Color:=Form1.Color; Form1.Canvas.Brush.Style:=bsSolid; Form1.Canvas.Brush.Color:=Form1.Color; Form1.Canvas.FillRect(Rect(0,0,Form1.Width,Form1.Height)); end; end. |
#10
|
||||
|
||||
![]() Понятно, как обычно. Что должно происходить при нажатии каких клавиш? У меня уже рисуется линия мышкой и двигается вверх-вниз, Z очистка. Другими словами - опишите логику работы полностью, и может всё получится
![]() Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Delphi_Source (06.10.2013)
|
#11
|
|||
|
|||
![]() При нажатии левой кнопки мыши на форме должна рисоваться красная горизонтальная линия, перемещающаяся при нажатии клавиш y (вверх),g(влево) ,h (вниз),j (вправо) с зажатой клавишей ctrl. Клавиша z — очистка формы.
Сбросьте, пожалуйста, код полученного у Вас приложения. Последний раз редактировалось Delphi_Source, 06.10.2013 в 22:44. |
#12
|
||||
|
||||
![]() Получился такой код
Код:
procedure rs(lLeft, lWidth, lTop : integer; ds: boolean); begin Form1.Canvas.Brush.Style:=bsSolid; Form1.Canvas.Brush.Color:=clBtnFace; Form1.Canvas.FillRect(Rect(0,0,Form1.ClientWidth,Form1.ClientHeight)); if ds then begin Form1.Canvas.Pen.Color:= clRed; Form1.Canvas.MoveTo(lWidth, lTop); Form1.Canvas.LineTo(lLeft, lTop); end; end; var lLeft, lWidth, lTop: integer; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin lLeft:= 100; lWidth:= 500; lTop:= Y; rs (lLeft, lWidth, lTop, true); end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var flg: boolean; begin flg:= false; if Shift = [ssCtrl] then case Key of 90: rs (lLeft, lWidth, lTop, false); 71: begin Dec(lLeft); Dec(lWidth); flg:= true; end; 89: begin Dec(lTop); flg:= true; end; 74: begin Inc(lLeft); Inc(lWidth); flg:= true; end; 72: begin Inc(lTop); flg:= true; end; end; if flg then rs (lLeft, lWidth, lTop, true); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Delphi_Source (06.10.2013)
|
#13
|
|||
|
|||
![]() Кроме вставки кода необходимо еще что-нибудь изменять в параметрах?
|