Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 11:50   #11
Anton5
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
По умолчанию

Спасибо Большое!!!
А как реализовать перемещение шара по командам с клавиатуры в пределах экрана??

Можно еще вопрос не по этой теме!
Вот проверка ввода:
Код:
Procedure TForm1.StringGrid1KeyPress(Sender:TObject; Var Key:Char);
Begin
Case Key of #8, #32, '0'..'9':;
else Key:=chr(0);
End;
End;
Преподаватель задал мне установить длину для чисел(а то можно ввести огромное число, например 8888888888999999999999999...) и чтобы знак -(минус) тоже вводился (для отрицательных чисел)... Кто знает, подскажите как, пожалуйста!

Последний раз редактировалось Stilet; 22.06.2010 в 12:05.
Anton5 вне форума Ответить с цитированием
Старый 22.06.2010, 12:05   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А вот хотя бы здесь начальные знания:http://www.programmersforum.ru/showthread.php?t=1206
Вот еще глянь: http://www.programmersforum.ru/showthread.php?t=90035
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2010, 18:07   #13
Anton5
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
По умолчанию

Вот программа, реализующая перемещение шара с помощью клавиатуры:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 i:=100;
 Canvas.Brush.Style:=bsClear;
 while i>1 do begin
  Canvas.Ellipse(Width div 2-i,Height div 2-100,Width div 2+i,Height div 2+100);
  Canvas.Ellipse(Width div 2-100,Height div 2-i,Width div 2+100,Height div 2+i);
  dec(i,10);
 end;
end;


procedure TForm1.FormKeyPress(Sender: TObject; var Key: Word;
  Shift: TShiftState);

begin
if key=VK_UP then Shape1.Top:=Shape1.Top-2;
if key=VK_LEFT then Shape1.Left:=Shape1.Left-2;
if key=VK_DOWN then Shape1.Top:=Shape1.Top+2;
if key=VK_RIGHT then Shape1.Left:=Shape1.Left+2;
end;

end.
Только шар не перемещается! Помогите найти ошибку!!!!

Последний раз редактировалось Stilet; 24.06.2010 в 11:31.
Anton5 вне форума Ответить с цитированием
Старый 22.06.2010, 19:51   #14
romlo
Пользователь
 
Аватар для romlo
 
Регистрация: 21.06.2010
Сообщений: 49
По умолчанию

Очень просто. Ты пытаешься обратиться к объекту shape. Но у тебя его на форме нет.

Последний раз редактировалось romlo; 22.06.2010 в 19:59.
romlo вне форума Ответить с цитированием
Старый 22.06.2010, 20:36   #15
romlo
Пользователь
 
Аватар для romlo
 
Регистрация: 21.06.2010
Сообщений: 49
По умолчанию

Кинь на форму image со вкладки additional,
растяни на 201х201,
canvas в коде замени на image1.canvas,
width на image1.width,
height на image1.height,
shape1 на image1.
Вот и всё.
romlo вне форума Ответить с цитированием
Старый 22.06.2010, 20:44   #16
Девочка-Скандал
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 42
По умолчанию

Цитата:
Ты пытаешься обратиться к объекту shape. Но у тебя его на форме нет.
а это что
Код:
Shape1: TShape;
Девочка-Скандал вне форума Ответить с цитированием
Старый 22.06.2010, 20:55   #17
romlo
Пользователь
 
Аватар для romlo
 
Регистрация: 21.06.2010
Сообщений: 49
По умолчанию

Короче, вот исходник с комментариями...

Аа, ну да. Но этот компонент совсем не то, что мы рисуем на canvas.
Shape - это отдельный компонент.
Вложения
Тип файла: rar shar.rar (165.8 Кб, 15 просмотров)

Последний раз редактировалось Stilet; 24.06.2010 в 11:32.
romlo вне форума Ответить с цитированием
Старый 23.06.2010, 11:34   #18
Anton5
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
По умолчанию

Объясните, пожалуйста, как именно рисуется шар :
Код:
while i>1 do begin           
  image1.Canvas.Ellipse(image1.Width div 2-i,image1.Height div 2-100,image1.Width div 2+i,image1.Height div 2+100);
  image1.Canvas.Ellipse(image1.Width div 2-100,image1.Height div 2-i,image1.Width div 2+100,image1.Height div 2+i);
  dec(i,10);
 end;
Что это означает (image1.Width div 2-i), а потом image1.Width div 2-100)???

А вот здесь запись clientheight-image1.height что она означает??
If image1.Top >= clientheight-image1.height then
k:=0; //если шарик коснулся нижней границы, то
//скорость вниз = 0.

Заранее спасибо.

Последний раз редактировалось Stilet; 24.06.2010 в 11:32.
Anton5 вне форума Ответить с цитированием
Старый 23.06.2010, 18:20   #19
romlo
Пользователь
 
Аватар для romlo
 
Регистрация: 21.06.2010
Сообщений: 49
По умолчанию

Сначала отвечу на второй вопрос:
image1.top и image1.left - это координаты верхнего левого пикселя шара.
Сравнивая их в нулём (координатами верхней и левой границы) мы ограничиваем шар правильно. Сравнивая же их с правой и нижней границами, мы позволяем почти всему шару исчезнуть за границей(кроме данного пикселя). Поэтому идёт сдвиг в сравнении ровно на размер шара.
Картинки красным объяснят.

Что касается первого вопроса:
div 2 - это нацело поделить на 2. Делается это, чтобы отсчёт шел от середины картины.
Налеюсь, ты заметил, что шар рисуется эллипсами - сплюснутыми кругами.
Так вот, чтобы нарисовать, например, вертикальную сетку, надо сделать кучу эллипсов с равной высотой, но разной шириной. Высота в данном
случае равна 100, а ширина каждый раз уменьшается на i. Тоже и с горизонтальными.
Изображения
Тип файла: jpg шар2.jpg (24.9 Кб, 123 просмотров)
Тип файла: jpg шар1.jpg (26.9 Кб, 120 просмотров)

Последний раз редактировалось Stilet; 24.06.2010 в 11:33.
romlo вне форума Ответить с цитированием
Старый 24.06.2010, 11:14   #20
Anton5
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
По умолчанию

Помогите мне разобраться с задачей!!!
4. Написать рекурсивную программу вычисления суммы N первых членов арифметической прогрессии.

Насколько я знаю, функция выглядит так:
Код:
var a1,d,n:integer;
function S(n:integer):real;
Begin
  if n = 1 then
    S := a1
  else
    S:= S(n-1) +a1+d*(n-1);
End;
А как написать саму программу в Делфи???
Заранее, спасибо.

Последний раз редактировалось Stilet; 24.06.2010 в 11:33.
Anton5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графики Кузя студент Microsoft Office Excel 0 06.06.2010 11:01
Графики Kycaka Общие вопросы C/C++ 14 29.05.2009 19:56
Графики! Медина Помощь студентам 4 28.05.2009 22:58
Графики в БД ~LiS~ БД в Delphi 1 05.06.2008 22:19