سؤال

أواجه مشاكل تغيير حجم تبينتبوكس والرسم على ذلك:

على النموذج الخاص بي (اسمه فمين) أسقطت تبينتبوكس (اسمه ديسبلايماج) ، الذي أحاول تغيير حجمه كما يتم تغيير حجم النموذج.

للقيام بذلك كتبت طريقة أونريزيزي () ل فمين (أكدت أنه يتم استدعاؤها بشكل صحيح) التي أحاول تغيير حجم ديسبلايماج:

procedure TFMain.FormResize(Sender: TObject);
begin
   DisplayImage.Width := FMain.ClientWidth;
   DisplayImage.Height := FMain.ClientHeight;

   DisplayImage.Canvas.Brush.Color := clGreen;
   DisplayImage.Canvas.Brush.Style := bsSolid;
   DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height);
end;

إمهو رمز الماضي يجب رسم مستطيل أخضر كامل الصورة على الصورة الكاملة ، مما يجعلها فعالة دائما الأخضر.بدلا من ذلك أحصل على صورة رمادية (تماما مثل معيار بغ اللون من دلفي) وكل مرة واحدة في حين خلال تغيير حجم لجزء من الثانية الصورة الخضراء تومض.

ما أنا في عداد المفقودين, هل هناك بعض المكونات المخفية أحتاج إلى تحديث بعد تغيير حجم?

شكرا لكم مقدما,

عاصفة ثلجية

هل كانت مفيدة؟

المحلول

أولا وقبل كل شيء ، بدلا من القيام

DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;

على كل تغيير الحجم ، ببساطة تعيين Align := alClient من مربع الطلاء.

ثانيا ، لرسم إلى مربع الطلاء ، واستخدام OnPaint حدث مربع الطلاء:

procedure TFMain.DisplayImagePaint(Sender: TObject);
begin
   DisplayImage.Canvas.Brush.Color := clGreen;
   DisplayImage.Canvas.Brush.Style := bsSolid;
   DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height)
end;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top