Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 02.09.2015, 19:44   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию Помощь в коде С++, часы

Программа скомпилировалась, проблема в отсутствии стрелок (часовой, минутной, секундной). Подскажите, кто заметит чего не хватает. Код взят из книги.
Код:
#include <math.h>
#define R 75
TForm1 *Form1;
int x0,y0;
int ahr,amin,asec;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	TDateTime t;

	ClientHeight = (R + 30)*2;
	ClientWidth = (R + 30)*2;
	x0 = R + 30;
	y0 = R + 30;

	t = Now();
	ahr = 90 - HourOf(t)*30 - (MinuteOf(Today() )/12)*6;
	amin = 90 - MinuteOf(t)*6;
	asec = 90 - SecondOf(Today() )*6;
	Timer1->Interval = 1000;
	Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Vector(int x0, int y0, int a, int l)
{
#define TORAD 0.0174532
	int x,y;
	Canvas->MoveTo(x0,y0);
	x = x0 + 1*cos(a*TORAD);
	y = y0 - 1*sin(a*TORAD);
	Canvas->LineTo(x,y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
	int x,y;
	int a;
	int h;
TBrushStyle bs;
TColor pc;
  int pw;
	bs = Canvas->Brush->Style;
	pc = Canvas->Pen->Color;
	pw = Canvas->Pen->Width;
	Canvas->Brush->Style = bsClear;
	Canvas->Pen->Width = 1;
	Canvas->Pen->Color = clBlack;
	a = 0;
	h = 3;
	while (a < 360)
	{
		x = x0 + R * cos(a*TORAD);
		y = x0 - R * sin(a*TORAD);
		Form1->Canvas->MoveTo(x,y);
		if ((a % 30) == 0)
		{
			Canvas->Ellipse(x-2,y-2,x+3,y+3);
			x = x0 + (R + 15) * cos(a*TORAD);
			y = x0 - (R + 15) * sin(a*TORAD);
			Canvas->TextOutW(x-5,y-7,IntToStr(h));
			h--;
			if (h == 0)  h = 12;
		}
		else
		Canvas->Ellipse(x-1,y-1,x+1,y+1);
		a = a + 6;
	}
	Canvas->Brush->Style = bs;
	Canvas->Pen->Width = pw;
	Canvas->Pen->Color = pc;

	DrawClock();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
	DrawClock();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawClock(void)
{
	TDateTime t;
	Canvas->Pen->Color = clBtnFace;
	Canvas->Pen->Width = 3;
	Vector(x0,y0,ahr, R-20);
	Vector(x0,y0,amin, R-15);
	Vector(x0,y0,asec, R-7);

	t = Now();

	ahr = 90 - HourOf(t)*30 - (MinuteOf(t)%12)*6;
	amin = 90 - MinuteOf(t)*6;
	asec = 90 - SecondOf(t)*6;
	Canvas->Pen->Width = 3;
	Canvas->Pen->Color = clBlack;
	Vector (x0,y0, ahr, R-20);
	Canvas->Pen->Width = 2;
	Canvas->Pen->Color = clBlack;
	Vector (x0,y0,amin, R-15);
	Canvas->Pen->Width = 1;
	Canvas->Pen->Color = clBlack;
	Vector (x0,y0,asec, R-7);
}
//---------------------------------------------------------------------------
Dima-91 вне форума Ответить с цитированием
Старый 02.09.2015, 19:58   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

что за книжка такая упоротая-то? define внутри функции и др. бред
вообще, всегда проверяй вызывается ли вообще код..... ставь бряк внутри drawClock, запускай и прога должна остановиться внутри! если этого нет, то ты не привязал код к event-ам
(бряк - breakpoint.... обычно в меню Run, на F5-F10 где-то, смотря какая среда разработки)
Группа ВК - https://vk.com/gw_inc
Почта - forwork.anton@gmail.com
GreenWizard вне форума Ответить с цитированием
Старый 03.09.2015, 19:58   #3
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Использовал брейк-поинт внутри функции DrawClock, вызов остановился на той строчке где поставил. Подскажите как отладчиком пользоваться может он чем поможет.

Спасибо все, нашел ошибку.
Код:
#define TORAD 0.0174532
	int x,y;
	Canvas->MoveTo(x0,y0);
	x = x0 + l*cos(a*TORAD);
	y = y0 - l*sin(a*TORAD);
	Canvas->LineTo(x,y);

Последний раз редактировалось Stilet; 03.09.2015 в 21:05.
Dima-91 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь в коде ассемблера+pascal X-Vlad Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.12.2014 23:36
проблема в коде .bat нужна помощь студенту abramovev Помощь студентам 0 28.01.2014 15:37
Часы Axrik Общие вопросы C/C++ 5 10.11.2012 18:25
Часы в С++ voffka_C++ Помощь студентам 1 14.11.2010 22:29
Часы Bingam Vici Свободное общение 5 18.05.2009 14:50