Пользовательский VCL TGraphicControl портит только на удаленном рабочем столе - PullRequest
0 голосов
/ 06 марта 2020

В приложении C ++ (с использованием C ++ Builder 10.3 и VCL) я использую пользовательский класс, производный от TGraphicControl, для рисования пользовательского интерфейса и небольшого графика изменения данных.

Все работает хорошо в Windows 10 и Windows 7, но если я выполню приложение в сеансе удаленного рабочего стола (через собственную службу Windows) с каждым перерисовыванием, графика будет еще больше испорчена.

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

Кроме того, при переключении P C с прямого на удаленный доступ динамически вставленные элементы VCL TComboBox получают недопустимых родителей и владельцев, после чего появляется сообщение об ошибке, что класс TComboBox неизвестен.

Я использую ClientRect в своем коде. Возможно, это проблема при работе в удаленных сеансах?

Код, в котором я вижу проблему (она довольно длинная, и у меня возникают проблемы при создании минимального примера без исключения возможных причин проблемы)
cpp : https://pastebin.com/vpk3De7J (художник по строке 228)
заголовок: https://pastebin.com/3pLy4dEY

class CustomTrgDrawings : public TGraphicControl
{
private:
    void __fastcall Paint(void);
public:
    __fastcall CustomTrgDrawings(TComponent* Owner);
    bool updating;      //stops painting when true
}; 

__fastcall CustomTrgDrawings::CustomTrgDrawings(TComponent* Owner)
    : TGraphicControl(Owner)
{
    updating = true;
}

void __fastcall CustomTrgDrawings::Paint(void)
{
    if (!updating)
        return;

    Canvas->Brush->Color = TColor(0x220022);
    Canvas->Brush->Style = bsSolid;
    Canvas->Pen->Color = TColor(0x222222);
    Canvas->Pen->Style = psSolid;
    Canvas->Pen->Width = 1;

    Canvas->FillRect(ClientRect);
}

//---insertion in a vcl form
void __fastcall TMyForm::FormCreate(TObject *Sender)
{
    //uses TLabel *myLabel as container
    CustomTrgDrawings *drg = new CustomTrgDrawings(myLabel);
}
...