Приведенный ниже код представляет собой сильно урезанную версию, которая показывает проблему. У меня есть TPanel, на который я помещаю TImage, который на данный момент представляет собой просто белый прямоугольник с красной линией, идущей из верхнего левого угла в правый нижний.
В более крупном приложении я хочу выбирать между портретным размером A4 и альбомным форматом A4. В моем маленьком приложении есть две кнопки для выбора требуемого размера страницы.
Вот в чем проблема. Когда я запускаю приложение и выбираю «Портрет», оно работает правильно:

Но когда я затем нажимаю «Пейзаж», изображение обрезается. Вы можете увидеть, в какую сторону проходит красная линия:

С другой стороны, когда я останавливаю приложение, перезапускаю его и выбираю «Пейзаж», оно работает нормально:

Когда я затем нажимаю «Портрет», именно это изображение теперь обрезается:

Как мне это сделать работает?
Мой код ниже:
const float A4width = 8.27/4, A4height = 11.69/4;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
image = new TImage(Owner);
image->Parent = Panelpreview;
image->Left = 16;
image->Top = 16;
}
// Portrait button click
void __fastcall TForm1::BportraitClick(TObject *Sender)
{
fheight = A4height;
fwidth = A4width;
showPreview();
}
//Landscape button click
void __fastcall TForm1::BlandscapeClick(TObject *Sender)
{
fheight = A4width;
fwidth = A4height;
showPreview();
}
// Draw the picture
void TForm1::showPreview()
{
int pagewidth, pageheight;
TRect imagerect;
pagewidth = fwidth * Canvas->Font->PixelsPerInch;
pageheight = fheight * Canvas->Font->PixelsPerInch;
imagerect = TRect(0, 0, pagewidth, pageheight);
image->Width = pagewidth;
image->Height = pageheight;
image->Canvas->Brush->Color = clWhite;
image->Canvas->FillRect(imagerect);
image->Canvas->Pen->Color = clRed;
image->Canvas->MoveTo(0, 0);
image->Canvas->LineTo(pagewidth, pageheight);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -truncated
Мобильная версия