Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TTimer

290
09 сентября 2008 года
Patr1ot
458 / / 09.02.2008
Всем привет! У меня небольшая проблемка с обработчиком события onTimer.
Ниже приведен код в котором соит переменная t которая равна рандомному числу из 5.

У меня вопрос в следующем, чем можно заменить рандом, чтобы все эти условия выполнялись по порядку, а не рандомно. Пробовал через

int a[5] = {1,2,3,4,5} и дальше эти же условия, неработает.В чем проблема:confused:.

 
Код:
randomize();
int t = random(5);
if (t==0) l->Font->Color=clBlack;
if (t==1) l->Font->Color=clMaroon;
if (t==2) l->Font->Color=clNavy;
if (t==3) l->Font->Color=clGreen;
if (t==4) l->Font->Color=clGray;
if (t==5) l->Font->Color=clRed;
490
09 сентября 2008 года
frid-karatel
357 / / 15.09.2007
Код:
randomize();
int t = random(5);
switch (t)
{
  case 0: l->Font->Color=clBlack;
  case 1: l->Font->Color=clMaroon;
  case 2: l->Font->Color=clNavy;
  case 3: l->Font->Color=clGreen;
  case 4: l->Font->Color=clGray;
  case 5: l->Font->Color=clRed;
}


PS: А причем тут таймер??? :confused: Где в твоем коде проблемы с таймером?
PSS: Как название темы, так и описание проблемы высказаны "кривовато"...
535
09 сентября 2008 года
Нездешний
537 / / 17.01.2008
Так зачем тебе rand, если хочешь по порядку?

 
Код:
...OnTimer()
{
       static int t = 0;

       if (t == 0) ...
       ....
       if (t == 4) ...
       
       t++;
}
602
09 сентября 2008 года
KPI Student
265 / / 16.12.2006
Цитата: Нездешний
Так зачем тебе rand, если хочешь по порядку?

 
Код:
...OnTimer()
{
       static int t = 0;
        ....
}



Угу. согласен, только использовние статической переменной обычно приводит к немастабируемому коду, и (ИМХО) лучше этого избежать. Как вариант -- дай переменной int t нормальное имя, и засунь ее в определение класса твоей формы. Результат будет практически тот же.

_____________
За Родину! (на Берл... То есть, на Детройт :) )

290
10 сентября 2008 года
Patr1ot
458 / / 09.02.2008
Цитата: frid-karatel
Код:
randomize();
int t = random(5);
switch (t)
{
  case 0: l->Font->Color=clBlack;
  case 1: l->Font->Color=clMaroon;
  case 2: l->Font->Color=clNavy;
  case 3: l->Font->Color=clGreen;
  case 4: l->Font->Color=clGray;
  case 5: l->Font->Color=clRed;
}


PS: А причем тут таймер??? :confused: Где в твоем коде проблемы с таймером?
PSS: Как название темы, так и описание проблемы высказаны "кривовато"...




Я же вам напиал что это в обработчике события TTimer

290
10 сентября 2008 года
Patr1ot
458 / / 09.02.2008
А как задать ей цикл, нехотелось бы через while, слишком ресурсов много хавает, да и прога с ним виснет.

Код:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static int t = 0;
 if(t == 0)
  {
   Image1->Visible=false;
   }
 if (t==2)
   {
    Image1->Visible=true;
    }
 if (t==3)
   {
    Image1->Visible=false;
    }
 if (t==4)
  {
   Image1->Visible=false;
   }
  if(t==5)
   {
    Image1->Visible=true;
    }
    t++;

}


____________________________
Вчера ходил на Детройт!!!!:)
8.8K
10 сентября 2008 года
Se AD WMD
165 / / 10.01.2007
Тебе же уже внятно ответили!!!
Цитата:

и засунь ее в определение класса твоей формы


Т.е.:

Код:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TStringGrid *StringGrid1;
    TButton *Button2;
    TSpinEdit *SpinEdit1;
    TSpinEdit *SpinEdit2;
    TLabel *Label1;
    TLabel *Label2;
    TButton *Button3;
    TButton *Button4;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall SpinEdit1Change(TObject *Sender);
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall Button3Click(TObject *Sender);
    void __fastcall Button4Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
//Сюда пропишы
int t;
    __fastcall TForm1(TComponent* Owner);
};

В OnCreate пропиши t=0;
и в таймере незабудь прописать на if(t==5) чтоб по кругу ходило (если надо конечно...) или остановку таймера, чтоб больше это событие не вызывалось.

З.Ы. почемуб вместо иф"ов не использовать свич?
535
10 сентября 2008 года
Нездешний
537 / / 17.01.2008
2 Patr1ot
Цитата:
А как задать ей цикл, нехотелось бы через while, слишком ресурсов много хавает, да и прога с ним виснет.



Какой цикл, ты о чем? Timer имеет свойства Interval и Enabled. После установки свойства Enabled в true каждые Interval миллисекунд выполняется то, что у тебя написано в функции OnTimer. До тех пор, пока свойства Enabled ты не установишь в false.

Так что что-то вроде цикла у тебя и так выполняется. Только каждая итерация с задержкой в Interval миллисекунд.

2 KPIStudent

Цитата:
использовние статической переменной обычно приводит к немастабируемому коду


теории, теории... что такое "мастабируемый" код? Как вы это понимаете? Часто ли приходилось "мастабировать"?

Цитата:
дай переменной int t нормальное имя, и засунь ее в определение класса твоей формы


Если эта переменная используется только в функции OnTimer и нигде больше, выносить ее в определение класса нецелесообразно -- только захламляет код

2 Se AD WMD

Цитата:
public: // User declarations
//Сюда пропишы


И уж тем более не выносить переменную-счетчик в public раздел. На крайняк что-нибудь вроде __property get организовать.

602
11 сентября 2008 года
KPI Student
265 / / 16.12.2006
Цитата:
теории, теории... что такое "мастабируемый" код? Как вы это понимаете? Часто ли приходилось "мастабировать"?

Приходилось однажды. Сидеть, материться и лопатить код сервера, в несколько десятков тысяч строк размером, который до этого несколько лет писал прогер, не любивший теории, теории, убирать там копипасты, и потенциальные источники ошибок, работающие в оригинале, но создававшие проблемы при модификации.

Цитата:
что такое "мастабируемый" код

Масштаби́руемость (scalability) — в информатике означает способность системы увеличивать свою производительность при добавлении ресурсов (обычно аппаратных). А также, означает возможность использования типа (в ООП), в более крупных структурах, или же использование нескольких экземпяров этого типа.

Цитата:
Как вы это понимаете?

Очень жаль, что вы этого не понимаете. В простейшем случае - это когда можно создать три одинаковых формы TForm1, и все три будут нормально работать.

535
11 сентября 2008 года
Нездешний
537 / / 17.01.2008
1. Вы не мой учитель, а я не ваш ученик. Поэтому ни в ваших оценках
Цитата:
Угу. согласен

, ни в лекциях

Цитата:
Масштаби́руемость (scalability) — в информатике означает...

не нуждаюсь. И в жалости тем более.

2.

Цитата:
Очень жаль, что вы этого не понимаете.

С чего это вы сделали такой вывод? Из того, что я вас спросил, как ВЫ понимаете данный вопрос?

3.

Цитата:
можно создать три одинаковых формы TForm1

Топикстартер с таймером-то не может разобраться, а вы ему про масштабируемость. Поднимите его предыдущие темы, посмотрите

1
11 сентября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: KPI Student
Угу. согласен, только использовние статической переменной обычно приводит к немастабируемому коду, и (ИМХО) лучше этого избежать. Как вариант -- дай переменной int t нормальное имя, и засунь ее в определение класса твоей формы. Результат будет практически тот же.

_____________
За Родину! (на Берл... То есть, на Детройт :) )


Как раз таки ваш вариант + Se AD WMD - это грубейшая ошибка в С++. И причем тут "немастабируемому коду" воистину загадка. Новое слово на лекциях услышали? :)

290
12 сентября 2008 года
Patr1ot
458 / / 09.02.2008
Извените. У меня есчо небольшой вопрос.

Как MediaPlayer воспроизвести на весь экран. Либо где это можно
сделать.
535
12 сентября 2008 года
Нездешний
537 / / 17.01.2008
 
Код:
LPCSTR lpFile = "wmplayer.exe";
LPCSTR lpParameters = "\"C:\\Documents and Settings\\admin\\Мои Документы\\Моя музыка\\ToT - Image.mpg\""; //в этой строке путь к проигрываемому ролику
LPCSTR lpDirectory = "C:\\Program Files\\Windows Media Player\\";
ShellExecute(Handle, "open", lpFile, lpParameters, lpDirectory, SW_MAXIMIZE);
290
12 сентября 2008 года
Patr1ot
458 / / 09.02.2008
Да нет я не об проигрывателе Windows Media Player.
Я имею ввиду про Билдеровский(TMediaPlayer), как сделать чтобы он на весь экран показывал, в свойствах Дисплея для него(Panel1) или нужно чтото с самим проигрывателем делать?
535
12 сентября 2008 года
Нездешний
537 / / 17.01.2008
Создаешь новую форму (назовем, например, FormShow). Кидаешь на нее Panel. Ставишь следующие свойства:
 
Код:
FormShow->BorderStyle = bsNone;
FormShow->Visible = false;
FormShow->WindowState = wsMaximized;
Panel->Align = alClient;

Вот этот код пиши перед запуском ролика, заданного в MediaPlayer->FileName:
 
Код:
FormShow->Show();
MediaPlayer->Display = FormShow->Panel;
MediaPlayer->DisplayRect = FormShow->Panel->ClientRect;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог