Изображение TImage обрезаетсяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Изображение TImage обрезается

Сообщение Anonymous »

Я написал опцию предварительного просмотра для более крупного приложения. В основном это работает, к моему удовлетворению, за исключением того, что иногда изображение обрезается.
Приведенный ниже код представляет собой сильно урезанную версию, которая показывает проблему. У меня есть 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»