![]() |
|
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток, уважаемые пользователи!
Помогите разработать приложение, рисующее при нажатии левой кнопки мыши на форме красную горизонтальную линию, перемещающуюся при нажатии клавиш y,g,h,j с зажатой клавишей ctrl. Клавиша z — очистка формы. Спасибо за внимание! |
|
#3
|
|||
|
|||
|
Нужна помощь в написании программы. Именно помощь.
Если можно - почему бы и нет?! Не думаю, что стоит переносить тему в тот раздел. |
|
#4
|
||||
|
||||
|
Цитата:
Цитата:
|
| Этот пользователь сказал Спасибо 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 чертит линию от "курсора" до переданных координат. |
| Этот пользователь сказал Спасибо 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
|
|||
|
|||
|
Кроме вставки кода необходимо еще что-нибудь изменять в параметрах?
|