Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.10.2013, 00:39
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Устройства ввода

Доброго времени суток, уважаемые пользователи!
Помогите разработать приложение, рисующее при нажатии левой кнопки мыши на форме красную горизонтальную линию, перемещающуюся при нажатии клавиш y,g,h,j с зажатой клавишей ctrl. Клавиша z — очистка формы.
Спасибо за внимание!
Ответить с цитированием
  #2  
Старый 01.10.2013, 01:34
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Ну и уже по традиции:

В чём именно нужна помощь? Помощь ли?
Или необходимо написать программу?
Может быть, тогда стоит написать в раздел работа?
Ответить с цитированием
  #3  
Старый 05.10.2013, 17:07
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Нужна помощь в написании программы. Именно помощь.
Если можно - почему бы и нет?!
Не думаю, что стоит переносить тему в тот раздел.
Ответить с цитированием
  #4  
Старый 05.10.2013, 17:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Нужна помощь в написании программы. Именно помощь.
Хорошо. И в чем же, по Вашему мнению, помощь должна заключаться? Если ответ "Расскажите все от начала до конца" или "напишите программу" - вперед в Работу. Иначе - прикладывайте свои наработки, задавайте конкретные вопросы.
Цитата:
Если можно - почему бы и нет?!
Не думаю, что стоит переносить тему в тот раздел.
Не стоит путать форумы с богадельнями.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Freeman (05.10.2013)
  #5  
Старый 06.10.2013, 13:24
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Не получается нарисовать горизонтальную линию.

Код:
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  
Старый 06.10.2013, 13:25
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

LineTo и MoveTo поменяйте местами.
MoveTo перемещает условный "курсор", LineTo чертит линию от "курсора" до переданных координат.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
Delphi_Source (06.10.2013)
  #7  
Старый 06.10.2013, 21:22
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Предложен самый простой вариант - лишь нужно бросить на форму компонент 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  
Старый 06.10.2013, 21:48
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Бросил на форму компонент Shape. Там появился квадратик. Его уменьшил до размеров 1х1. У KeyPreview поставил true

Цитата:
скопипастить для формы KeyDown

Что нужно скопипастить? Код?


Попробовал его скопипастить. Теперь появились новые ошибки:

Цитата:
[Error]Unit1.pas[54]: Statement expectedbut 'PROCEDURE' found

Последний раз редактировалось Delphi_Source, 06.10.2013 в 22:31.
Ответить с цитированием
  #9  
Старый 06.10.2013, 21:52
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

На данный момент у меня имеется рисование линий и очистка формы клавишей 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  
Старый 06.10.2013, 22:34
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Понятно, как обычно. Что должно происходить при нажатии каких клавиш? У меня уже рисуется линия мышкой и двигается вверх-вниз, Z очистка. Другими словами - опишите логику работы полностью, и может всё получится
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Delphi_Source (06.10.2013)
  #11  
Старый 06.10.2013, 22:42
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

При нажатии левой кнопки мыши на форме должна рисоваться красная горизонтальная линия, перемещающаяся при нажатии клавиш y (вверх),g(влево) ,h (вниз),j (вправо) с зажатой клавишей ctrl. Клавиша z — очистка формы.


Сбросьте, пожалуйста, код полученного у Вас приложения.

Последний раз редактировалось Delphi_Source, 06.10.2013 в 22:44.
Ответить с цитированием
  #12  
Старый 06.10.2013, 23:14
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Получился такой код
Код:
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  
Старый 06.10.2013, 23:32
Delphi_Source Delphi_Source вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Кроме вставки кода необходимо еще что-нибудь изменять в параметрах?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025