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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.02.2006, 19:53
Radagast Radagast вне форума
Прохожий
 
Регистрация: 25.02.2006
Сообщения: 2
Репутация: 10
По умолчанию Помогите плз первокурснику с прогой!

В универе задали наклепать небольшую прогу, которая рисует 2 опред контура напосредственно на форме и считает центр тяжести всех точек контуров и площадь внешнего минус площадь внутреннего (в см^2, т.е. используется масштаб, но это не суть важно). Программу я написал, синтаксических ошибок (Делфи 6) не выводит, рисует нормально,но при нажатии на кнопку посчитать выводит Invalid floating point operation. Причем когда прохожу по Ф8 (пошагово), то почему-то в начале procedure TMainForm.Button2Click рядом с 4мя строчками кода не появляются синие точки и Watcher подтверждает, что эти операции присвоения не выполняются. Скажите плз, в чем может быть причина.
И расскажите еще плз, как сделать обработчик нажатия клавиши на клаве? т.е. Object inspector-mainform-events-onkeydown это понятно, а дальше? где взять таблицу кодов клавиш (в частности, стрелок) и какой оператор этот код возвращает?
Спасибо.
Вложения
Тип файла: zip proga.zip (8.2 Кбайт, 8 просмотров)

Последний раз редактировалось Radagast, 25.02.2006 в 19:55.
Ответить с цитированием
  #2  
Старый 25.02.2006, 20:39
Аватар для Keygenmusic
Keygenmusic Keygenmusic вне форума
Активный
 
Регистрация: 24.10.2005
Адрес: Там
Сообщения: 201
Репутация: 20
По умолчанию

насчёт кодов клавиш глянь в файле windows.pas то, что под строкой { Virtual Keys, Standard Set }
Ответить с цитированием
  #3  
Старый 15.03.2006, 17:17
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Может поможет.


vk_LButton = $01;
vk_RButton = $02;
vk_Cancel = $03;
vk_MButton = $04; { генерятся только системой вместе с L & RBUTTON }
vk_Back = $08;
vk_Tab = $09;
vk_Clear = $0C;
vk_Return = $0D;
vk_Shift = $10;
vk_Control = $11;
vk_Menu = $12;
vk_Pause = $13;
vk_Capital = $14;
vk_Escape = $1B;
vk_Space = $20;
vk_Prior = $21;
vk_Next = $22;


vk_End = $23;
vk_Home = $24;
vk_Left = $25;
vk_Up = $26;
vk_Right = $27;
vk_Down = $28;
vk_Select = $29;
vk_Print = $2A;
vk_Execute = $2B;
vk_SnapShot = $2C;
{ vk_Copy = $2C не используется клавиатурой }

vk_Insert = $2D;
vk_Delete = $2E;
vk_Help = $2F;
{ vk_A - vk_Z такие же, как и их ASCII-эквиваленты: 'A' - 'Z' }
{ vk_0 - vk_9 такие же, как и их ASCII-эквиваленты: '0' - '9' }


vk_NumPad0 = $60;
vk_NumPad1 = $61;
vk_NumPad2 = $62;
vk_NumPad3 = $63;
vk_NumPad4 = $64;
vk_NumPad5 = $65;
vk_NumPad6 = $66;
vk_NumPad7 = $67;
vk_NumPad8 = $68;
vk_NumPad9 = $69;
vk_Multiply = $6A;
vk_Add = $6B;
vk_Separator = $6C;
vk_Subtract = $6D;
vk_Decimal = $6E;
vk_Divide = $6F;
vk_F1 = $70;
vk_F2 = $71;
vk_F3 = $72;
vk_F4 = $73;
vk_F5 = $74;


vk_F6 = $75;
vk_F7 = $76;
vk_F8 = $77;
vk_F9 = $78;
vk_F10 = $79;
vk_F11 = $7A;
vk_F12 = $7B;
vk_F13 = $7C;
vk_F14 = $7D;
vk_F15 = $7E;
vk_F16 = $7F;
vk_F17 = $80;
vk_F18 = $81;
vk_F19 = $82;
vk_F20 = $83;
vk_F21 = $84;
vk_F22 = $85;
vk_F23 = $86;
vk_F24 = $87;
vk_NumLock = $90;
vk_Scroll = $91;


{ Данные коды взяты из файлов помощи Ллойда (Lloyd) }
Ответить с цитированием
  #4  
Старый 16.03.2006, 06:47
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Все правильно
Цитата:
Причем когда прохожу по Ф8 (пошагово), то почему-то в начале procedure TMainForm.Button2Click рядом с 4мя строчками кода не появляются синие точки и Watcher подтверждает, что эти операции присвоения не выполняются
Оптимизатор их просто убрал из исходного кода, так как в начале процедуры у тебя написано:
Код:
cpx:=0;
cpy:=0;
for i:=1 to 7 do
begin
cpx:=cpx+arx[i];
cpy:=cpy+ary[i];
end;
а далее
Код:
cpx:=round(cx/7);
cpy:=round(cy/7);
поэтому первое присвоение и накопление сумыы в цикле роли никакой не играет. И еще, переменные cx, cy у тебя неопределены никак в последнем присвоении тоже непонятно что будет
по поводу вот этого:
Цитата:
,но при нажатии на кнопку посчитать выводит Invalid floating point operation
скажу следующее, в коде:
Код:
cx:=cpx/scale;
cy:=cpy/scale;
если предварительно не отрисовать фигуру (а значение переменной scale присваевается именно там) то падать программа будет одназначно, в противном случае работает без проблем
Ну там еще много багов, но думаю ты найдешь их сам
Учись, студент
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter