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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2008, 18:37   #1
heavenly
 
Регистрация: 16.12.2007
Сообщений: 5
Печаль Фигура не поворачивает на клавишах!


Здравствуйте! Я построил трехугольную пирамиду - она у меня поворачивается вокруг только на кнопку, по которой Я тыкаю мышкой! а мне препод сказал сделать на кнопки лево-право-верх-низ! Я все написал правильно - работает без ошибок - но не поворачивается((( на левую кнопку поставил "Закрыть окно" - дак и то не закрывается! почему кнопки не определяются- что не так ????

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  T3DPoint = record
    x, y, z: Extended;
  end;
  TForm1 = class(TForm)
    Puramud: TButton;

   // Кнопки !!!
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);

    procedure PuramudClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;
  teta, phi: real;
  dx, dy:real;
  w: array [1..8] of T3DPoint;	//мировые (world) координаты вершин
  v: array [1..8] of TPoint;	//видовые (view) координаты вершин
implementation
{$R *.dfm}
  procedure Line(a: TPoint; b: TPoint);
  begin
  with form1.Canvas do
    begin
      moveto(a.X,a.Y);
      lineto(b.X,b.Y);
    end;
  end;

  procedure PuramudA(col:TColor);
  begin
  Form1.Canvas.Pen.Color:=col;
  Form1.Canvas.pen.Width:=3;
  Line(v[2],v[7]);
  Line(v[2],v[8]);
  Line(v[6],v[8]);
  Line(v[6],v[7]);
  Line(v[7],v[8]);
  Line(v[2],v[6]);
  end;

 // Кнопки !!!
 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
  case Key of
   vk_Left: Form1.Close();            //teta := teta - 0.05;
    vk_Up: phi := phi - 0.05;
    vk_Right: teta := teta + 0.05;
    vk_Down: phi := phi + 0.05;
    end;
  end;

procedure TForm1.PuramudClick(Sender: TObject);
begin
PuramudA(Form1.Color);
  w[6].x :=  100;
  w[6].y := -100;
  w[6].z :=  100;
  w[7].x :=  100;
  w[7].y :=  100;
  w[7].z :=  100;
  w[8].x := -100;
  w[8].y :=  100;
  w[8].z :=  100;
  for i := 1 to 8  Do
  begin
    v[i].x := Round(
              w[i].x*(-sin(teta)) +
              w [i].y*( cos(teta))) + Form1.Width div 2;
    v[i].y := Round(
              w[i].x*(-cos(phi) * cos(teta)) -
              w[i].y*( cos(phi) * sin(teta)) +
              w[i].z*( sin(phi))) + Form1.Height div 3;
  end;
  PuramudA(clBlack);
  teta:=teta+0.2;
  phi:=phi+0.2;
end;
end.
heavenly вне форума Ответить с цитированием
Старый 05.11.2008, 19:25   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Или уберите с формы кнопку Puramud
Или сделайте From1.KeyPreview := true и обработчик FormKeyUp вместо KeyDown.
alexBlack вне форума Ответить с цитированием
Старый 05.11.2008, 19:31   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, дык, немудрено... Где в FormKeyDown вызов процедуры поворота?
Хотя бы в таком виде:
PuramudClick(Self);
И самое главное - в свойствах формы кто будет устанавливать KeyPreview=True?

Цитата:
уберите с формы кнопку Puramud
???
Цитата:
FormKeyUp вместо KeyDown
??? Какая разница-то?
mihali4 вне форума Ответить с цитированием
Старый 05.11.2008, 21:35   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
??? Какая разница-то?
А разница есть. Не понял из кода VCL почему (да особо и не копался), но если вот этот код

Код:
   case Key of
    vk_Left: Close();
    vk_Up: label1.Caption := 'up';
    vk_Right: label1.Caption := 'right';
    vk_Down : label1.Caption := 'down';
   end;
поместить в FormKeyUp, то в label1 будет меняться текст. Если обработчик повесить на FormKeyDown и на форме есть TButton, вызовов не будет. (KeyPreView=true в обеих случаях) При отсутствии TButton оба метода вызываются. Может это особенность VCL Turbo Delphi ?.

А если на форме нет компонентов, то и KeyPreView не нужно делать true - вызовы KeyDown и так будут. Поэтому я и посоветовал убрать TButton с формы.
alexBlack вне форума Ответить с цитированием
Старый 05.11.2008, 21:40   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А-а-а... Пардон. Тогда вам виднее, конечно. У меня 7-ка.
Хотя мне кажется, что это просто глюкавая установка.
Во всяком случае, когда я испытывал Turbo Delphi в течение недели, никаких "чудес" по сравнению с 7-ой не приметил.
mihali4 вне форума Ответить с цитированием
Старый 10.11.2008, 19:33   #6
heavenly
 
Регистрация: 16.12.2007
Сообщений: 5
По умолчанию дык не получается ... (((

изменил FormKeyDown на FormKeyUp, убрал кнопку Button с формы, куда именно писать в коде
Код:
KeyPreview: =True;
- Я не знаю !!! и надо ли писать PuramudClick(Self); и если да - то куда тоже ?? У меня ничего не получается- не знаю что делать ((
heavenly вне форума Ответить с цитированием
Старый 10.11.2008, 20:19   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
куда именно писать в коде
Код:

KeyPreview: =True;

- Я не знаю !!! и надо ли писать PuramudClick(Self); и если да - то куда тоже ?? У меня ничего не получается
Самый правильный выход - обратиться к тому, кто писал эту программу. Только не надо
Цитата:
Я построил трехугольную пирамиду - она у меня поворачивается
это явно не вы писали, иначе бы такое не спрашивали...
mihali4 вне форума Ответить с цитированием
Старый 10.11.2008, 20:32   #8
heavenly
 
Регистрация: 16.12.2007
Сообщений: 5
По умолчанию мде...

но ведь не трудно наверное помочь мне и разобраться !!! (((
heavenly вне форума Ответить с цитированием
Старый 10.11.2008, 21:01   #9
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

heavenly

Если Вы используете Delphi 2007 и технологию Copy & Pust (точнее сказать просто создали одну кнопку, написали для неё код, а потом скопировали, и сделали ещё несколько экземпляров), то в этой среде есть такой глюк, что кнопки перестают реагировать на обработчики событий. В таком случае надо будет начинать новый проект с ноля.
JamS007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смерть Windows Vista в 2 клавишах Карась Свободное общение 30 13.04.2008 15:45