15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как устранить зависание при печати Quick Report в потоке.

Компилятор: C++ Builder

Для этого необходимо вызывать методы и свойства VCL через Synchronize().

Следующий пример демонстрирует это:

//-------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#pragma package(smart_init)
//-------------------------------------------------------------------
//   Метод Synchronize используется следующим образом:
//
//      Synchronize(UpdateCaption);
//
//   где UpdateCaption выглядит примерно так:
//
//      void __fastcall PrintQReport::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//-------------------------------------------------------------------
__fastcall PrintQReport::PrintQReport(bool CreateSuspended)
    : TThread(CreateSuspended)
{
}
//-------------------------------------------------------------------
void __fastcall PrintQReport::Execute()
{
    //---- Поместите сюда код потока ----
    Synchronize(Print);
}
//-------------------------------------------------------------------
void __fastcall PrintQReport::Print()
{
    Form1->QuickRep1->Print();
}
//-------------------------------------------------------------------