Страница 2 из 3

Re: Запуск функции

Добавлено: 21 июл 2009, 15:26
Rycharg

Код: Выделить всё

this->OnPaint = NULL;
Эта строка нужна для того, чтобы CallMyFunc вызвылась лишь раз.
заменить вызов OnPaint вызовом CallMyFunc
OnPaint - это не функция, а указатель на функцию. На функцию, которая будет выполнятся, когда придёт сообщение "рисовать". Когда мы в окошке ObjectInspector во вкладке Events кликнем по какому-нибудь On...(к примеру OnPaint), то Builder сгенерирует и покажет функцию

Код: Выделить всё

void __fastcall TMyFrm::FormPaint(TObject *Sender)
{
}
А где-то в недрах, появляется что-то вроде

Код: Выделить всё

this->OnPaint = &FormPaint;
Если у тебя есть какие-нибудь планы на OnPaint(т.е. FormPaint уже существует и жаждит исполняться :) ), то можно изменить CallMyFunc так:

Код: Выделить всё

void __fastcall TMyFrm::CallMyFunc(TObject *Sender){
   FormPaint( Sender );  // Вызываем "стандартную" функцию. 
   MyFunc();
   this->OnPaint = &FormPaint; // Изменяем указатель, чтобы при 
   // следующем рисовании сразу вызывалась FormPaint.
}
З.Ы. Само сабой, при необходимиости вызовы FormPaint и MyFunc можно поменять местами.

Re: Запуск функции

Добавлено: 21 июл 2009, 16:58
Arbis
Rycharg писал(а): OnPaint - это не функция, а указатель на функцию.
Это я уже понял, только не совсем правильно написал.
Как я понял, чтобы всё это заработало нужно вызвать TMyFrm раньше FormPaint (CallMyFunc) - например в FormCreate ?

Re: Запуск функции

Добавлено: 21 июл 2009, 17:44
Rycharg
TMyFrm - так я обозвал класс формы, наследник от TForm. Как его вызывать, я, к сожалению, не знаю.
Или ты имел ввиду это?

Код: Выделить всё

//------
__fastcall TMyFrm::TMyFrm(TComponent* Owner) : TForm(Owner){
   this->OnPaint = &CallMyFunc;
}
//------
Если да, то его вызывать нигде не надо. Это конструктор. Он вызывается автоматически при создании формы.
Если ещё есть вопросы, выкладывай свой код. На конкретных примерах разбираться будет проще.
З.Ы. Строку "this->OnPaint = &CallMyFunc;", если так удобнее, можно разместить и в FormCreate, а не в конструкторе.

Re: Запуск функции

Добавлено: 21 июл 2009, 17:54
Arbis
Rycharg писал(а): Если да, то его вызывать нигде не надо. Это конструктор. Он вызывается автоматически при создании формы.
:eek: А я думал, что надо вызывать ... :eek:

Re: Запуск функции

Добавлено: 21 июл 2009, 18:17
Rycharg
Если не прикалываешся, то советую почитать Страуструпа(3 МБ). А по vcl - Архангельского(50 МБ).

Re: Запуск функции

Добавлено: 21 июл 2009, 19:29
Arbis
Никаких приколов!
Эти книги не читал, постоянно листаю "Архангельский А. Я. Программирование в C++ Builder 6" и смотрю Turbo C++ help, но сразу всё неполучается понять :( .

Re: Запуск функции

Добавлено: 22 июл 2009, 01:25
rangerx
Arbis писал(а):Я работаю в Turbo C++. Немогу понять как сделать так чтобы сначала рисовалась форма (VCL Forms Application) и только потом выполнялась моя функция.
Чем не подходит сделать так(на OnPaint):

Код: Выделить всё

static bool flag = true;

if(flag)
{
    //твоя функция 
    flag = false;
}

Re: Запуск функции

Добавлено: 22 июл 2009, 09:31
Arbis
rangerx писал(а):Чем не подходит сделать так(на OnPaint):

Код: Выделить всё

static bool flag = true;

if(flag)
{
    //твоя функция 
    flag = false;
}
Проблема не в том, чтобы запустить функцию один раз а в том что нужно сначала нарисовать форму программы а только потом запустить мою функцию. Функция работает примерно 10 секунд и пользователь просто не будет понимать что происходит если увидит пустой экран :)

Re: Запуск функции

Добавлено: 22 июл 2009, 10:32
Rycharg
А, может, не надо рисовать главную форму приложения? Покажи сперва заставку, а когда функция выполнится, отобрази форму(и спряч заставку).

Re: Запуск функции

Добавлено: 22 июл 2009, 11:29
Arbis
Rycharg писал(а):А, может, не надо рисовать главную форму приложения? Покажи сперва заставку, а когда функция выполнится, отобрази форму(и спряч заставку).
Если незаработает как Вы предлагали раньше, то так и сделаю, но хочется всётаки запустить - это прогодится в других программах. Может быть что Turbo C++ всетаки отличается от Buildera, потому что компилируется нормально но моя функция так и не запускается.