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

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

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

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

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

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

Программа "Приветствия", скомпилировал только результат не получился который должен был быть. Подскажите что в коде не так.
Код:
TForm1 *Form1;
Graphics::TBitmap *bgp;
AnsiString sMonth[] = {" ","январь","февраль","март","апрель","май","июнь","июль",
					"август","сентябрь","октябрь","ноябрь","декабрь"};

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	bgp = new Graphics::TBitmap();
	try
	{
		bgp->LoadFromFile("sky.bmp");
	}
	catch (EFOpenError &e)
	{}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint (TObject *Sender)
{
  int h;
  AnsiString mes;
  int wt,ht;
  int x,y;
  h = HourOf(Now ());
  if (h<=4) mes = "Good night";
  else if (h<=12) mes = "Good morning";
  else if (h<=16) mes = "Good day";
  else mes = "Good evning";

	Form1->Font->Name = "Times New Roman";
	Form1->Canvas->Font->Size = 20;
	wt = Canvas->TextWidth(mes);
	ht = Canvas->TextHeight(mes);

	x = (ClientWidth-wt)/2;
	y = ClientHeight/2 - ht;
	Canvas->Draw(0,0,bgp);
	Canvas->Brush->Style = bsClear;
	Canvas->TextOutW(x,y,mes);
	y = y + ht;
	mes = FormatDateTime ("Now d ", Now() );
	mes = mes +   " " +sMonth[MonthOf (Now ())]+ ", "+
		FormatDateTime("dddd", Now ());
	Canvas->Font->Size = 4;
	wt = Canvas->TextWidth(mes);
	ht = Canvas->TextHeight(mes);

	x = (ClientWidth - wt)/2;
	y = y + 6;
	Canvas->TextOutW(x,y,mes);

}
//-------------------------------------------------------------------------

void __fastcall TForm1::FormResize(TObject *Sender)
{
	Form1->Refresh();
}
//--
Dima-91 вне форума Ответить с цитированием
Старый 15.08.2015, 20:11   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Уверен, что функция отрисовки прикреплена к событию onPaint?
Кроме того, если я правильно помню, onPaint вызывается только при необходимости (изменили размер формы, часть формы была помешена как не валидная), поэтому часы будут отставать и/или мерцать/исчезать
вот пример простой анимации из гугла - http://kurspk2009.narod.ru/progr/delphi/animeDelphi.htm
Как вариант: таймер + TImage, куда и выводим текст (на форму саму лучше не выводить т. к. тогда нужно корректно сообщения перехватывать и обрабатывать)
P.s. анимация - это не только изображения, а изменение того же текста
P.P.s. очень надеюсь, что проблема именно с выводом текста, а не ошибка при компиляции -.-

Последний раз редактировалось GreenWizard; 15.08.2015 в 20:15.
GreenWizard вне форума Ответить с цитированием
Старый 16.08.2015, 14:28   #3
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Спасибо все заработало, нужно было не от руки писать событие OnPaint. Только что-то буквы не меняют размера. Но расположены в середине.

Последний раз редактировалось Dima-91; 16.08.2015 в 14:32.
Dima-91 вне форума Ответить с цитированием
Старый 18.08.2015, 10:00   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
Спасибо все заработало, нужно было не от руки писать событие OnPaint. Только что-то буквы не меняют размера. Но расположены в середине.
Код:
	Form1->Font->Name = "Times New Roman"; // <= Canvas->Font! 
	Form1->Canvas->Font->Size = 20;
ты менял шрифт текста самой формы и её компонентов (с ParentFont=true), а не шрифт для вывода текста
и если уже в др. частях пишешь "Canvas->....", то и тут убери "Form1->" ИЛИ добавь его везде, чтоб точно работать с той же канвой
GreenWizard вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Помогите пожайлуста найти, кто человек "вконтакте", зная его "мэйл" Аксюнька1990 Помощь студентам 1 12.06.2009 06:16