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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2009, 22:12   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию StatusBar

прокомментируйте, пожалуйста, код
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int pw,rem,TR,p;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{    //загадать число

Randomize();//зачем эта функция нужна? она ведь не производит ничего,
// только написанная ниже функция работает
pw=RandomRange(100,999)//"секретное число"  - ОШИБКА!!!
//отобразить информацию на панели состояния
StatusBar1->Panels->Items[0]->Text="Попыток:0";
StatusBar1->Panels->Items[1]->Text="Осталось:"+IntToStr(rem)+"сек";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Edit1->Text.Length()<3)&&((Key>='0')&&(Key<='9')))
return;
if ((Key==VK_RETURN)&&(Edit1->Text.Length()==3))
{
//проверить, правильное ли число ввёл пользователь
        if (StrToInt(Edit1->Text)==pw)
        {
        Timer1->Enabled=false;
        Edit1->Enabled=false;
        ShowMessage("Поздравляю! Вы угадали число за"+
        IntToStr(TR-rem)+"сек");//TR- что это такое???
        }
        else
        {
        //увеличить число попыток
        p++;
        StatusBar1->Panels->Items[0]->Text="Попыток:"+IntToStr(p);
        }
        return;
}
if (Key==VK_BACK)  return;
// остальные символы запрещены
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
rem--;//что такое rem и как часто работает декрименнт
//и как часто он работает? каждую секунду? где тогда прописан цикл?
//в классе Timer? как его можно посмотреть?
StatusBar1->Panels->Items[1]->Text="Осталось:"+IntToStr(rem)+"сек";
        if (rem==0)
        {
        //время, отведённое на решение задачи, истекло
        Timer1->Enabled=false;
        Edit1->Enabled=false;
        ShowMessage(" К сожалению, Вы не справились с поставленной задачей\n"
        "\"Секретное\" число"+IntToStr(pw));
        }

}
//---------------------------------------------------------------------------
и почему-то в компоненте StatusBar1->Items[1] отображаются отрицательные числа (вместо положительных)
Dimarik вне форума Ответить с цитированием
Старый 10.07.2009, 23:53   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.hpp> // Для RandomRange
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int pw,rem,TR,p;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{    //загадать число
rem = 5; // 5 сек.
Randomize();// Эта функция инициализирует Random иначе все значения будут одинаковы
pw=RandomRange(100,999); 
//отобразить информацию на панели состояния
StatusBar1->Panels->Items[0]->Text="Попыток:0";
StatusBar1->Panels->Items[1]->Text="Осталось:"+IntToStr(rem)+"сек";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Edit1->Text.Length()<3)&&((Key>='0')&&(Key<='9')))
return;
if ((Key==VK_RETURN)&&(Edit1->Text.Length()==3))
{
//проверить, правильное ли число ввёл пользователь
        if (StrToInt(Edit1->Text)==pw)
        {
        Timer1->Enabled=false;
        Edit1->Enabled=false;
        ShowMessage("Поздравляю! Вы угадали число за"+
        IntToStr(TR-rem)+"сек");//TR- что это такое??? 
		// TR - переменная см. 11 строку (int pw,rem,TR,p;). Зачем она понятия не имею, больше нигде не используется
        }
        else
        {
        //увеличить число попыток
        p++;
        StatusBar1->Panels->Items[0]->Text="Попыток:"+IntToStr(p);
        }
        return;
}
if (Key==VK_BACK)  return;
// остальные символы запрещены
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
rem--;// Дикремент происходит каждую секунду. ф-я Timer1Timer вызывается каждую секунду.
// А rem время отведенное для попыток
StatusBar1->Panels->Items[1]->Text="Осталось:"+IntToStr(rem)+"сек";
        if (rem==0)
        {
        //время, отведённое на решение задачи, истекло
        Timer1->Enabled=false;
        Edit1->Enabled=false;
        ShowMessage(" К сожалению, Вы не справились с поставленной задачей\n"
        "\"Секретное\" число"+IntToStr(pw));
        }

}
#include <math.hpp> // Для RandomRange
Randomize();// Эта функция инициализирует Random иначе все значения будут одинаковы

IntToStr(TR-rem)+"сек");// TR - переменная см. 11 строку (int pw,rem,TR,p. Зачем она понятия не имею, больше нигде не используется

rem--;// Дикремент происходит каждую секунду. ф-я Timer1Timer вызывается каждую секунду.
// А rem время отведенное для попыток
Цитата:
и почему-то в компоненте StatusBar1->Items[1] отображаются отрицательные числа (вместо положительных)
Потому что rem не инициализируется
psycho-coder вне форума Ответить с цитированием
Старый 11.07.2009, 09:11   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Спасибо, ток 1 вещь непонятной осталась.
Когда я писал Timer и время задавалось в секундах и минутах, в секунды зыписывалась переменная s а в минуты m. а теперь куда-то, как я понял, в секунды, записывается rem. по идее все эти переменны должны быть прописаны в классе Time. как мне посмотреть этот класс?
Dimarik вне форума Ответить с цитированием
Старый 11.07.2009, 09:56   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

вот заголовочный файл.
Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TStatusBar *StatusBar1;
        TLabel *Label1;
        TEdit *Edit1;
        TTimer *Timer1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
        void __fastcall Timer1Timer(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
и нигде здесь не написано, как работает Time. непонятно, почему именно s чситает секунды, а m - минуты, а не наоборот,
почему именно rem читает секунды (когда всё временное представление в секундах)
Dimarik вне форума Ответить с цитированием
Старый 11.07.2009, 11:51   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
и нигде здесь не написано, как работает Time.
Не пойму, зачем Вам это надо?

При написании таймера разработчик сам объявляет переменные s и m, т.к. в классе таймера они не объявлены и сам заставляет их работать так как надо.
Класс таймера просматривать Вам не надо (скорей всего все равно ничего не поймете).
У тйамера есть интервал в миллисекундах 1 сек = 1000 млсек.
Следовательно, что бы отобразить время в минутах нужно самому делать расчет. Т.е. в компонент ,например Label1 вывод секунд, а в Label2 вывод минут. Тогда код будет примерно таким. Не самый лучший вариант.
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int s, m;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Timer1->Enabled = true;
  s = 120000; // две мин в миллсек
  m = 60000; // одна минуты в миллсек
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  s -= 1000;
  if (s == 0)
  {
    Timer1->Enabled = false;
    return;
  }
  Label1->Caption = IntToStr(s/1000); // кол-во всех секунд
  Label2->Caption = IntToStr(s/m); // кол-во всех минут
}
//---------------------------------------------------------------------------
Цитата:
почему именно rem читает секунды (когда всё временное представление в секундах)
Потому что, он декрементируется в обработчике таймера. И по идее должен инициализироваться в FormCreate количеством секунд
psycho-coder вне форума Ответить с цитированием
Старый 11.07.2009, 17:51   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Никита Культин, автор книги по Билдеру, пишет что TrayIcon - компонент, который позволяет значку программы отображаться на панель задач, находится во вкладке additional, но его там нет((
некоторые компоненты расположены не в тех местах, как в книге. искал по всем компонентам - не нашёл такого. может в 6ом билдере он иначе называется?? подскажите где он плиз
Dimarik вне форума Ответить с цитированием
Старый 12.07.2009, 00:12   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

http://programmersforum.ru/showthrea...t=56755&page=3
psycho-coder вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Statusbar и текст blackstersl Общие вопросы Delphi 2 11.03.2009 17:10
statusbar blackstersl Общие вопросы Delphi 1 22.09.2008 21:42
WebBrowser и StatusBar tebeen Работа с сетью в Delphi 1 20.09.2007 22:02
Отображение StatusBar mutabor Компоненты Delphi 6 17.07.2007 18:06
StatusBar Nasya Microsoft Office Excel 3 16.07.2007 10:26