سؤال

لديّ شريط أدوات أدوات الأدوات في Jordan Russel الذي أقوم بإنشائه في وقت التشغيل مع Tframe المدمج ورصيف على النموذج الرئيسي للتطبيق. يحتوي هذا الإطار على جزء مضمن يحتوي بدوره على لوحات أخرى وعناصر تحكم مختلفة. لذلك الهيكل هو:

TTBDock
  TTBToolbar
    TFrame     (align=alNone, Autosize=true)
      TPanel 1     (align=alNone, Autosize=true)
        TPanel 2     (align=alTop ,Autosize = false)
        TPanel 3     (align=alTop ,Autosize = false)
        TPanel 4     (align=alTop , Autosize = false)

والفكرة هي أن اللوحات 2 و 3 و 4 لها ارتفاعها بشكل صريح وأن الإطار (وبالتالي شريط الأدوات) ثم يتم تغيير حجمه تلقائيًا لاستيعاب الحجم الجديد.

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

إذا كسرت في نهاية روتين تغيير الحجم وفحص حجم اللوحة وحجم الإطار ، فهي صحيحة ، ولكن حجم شريط الأدوات ليس كذلك ، لذلك في المرة الأولى التي يظهر فيها ، يتم عرض الإطار جزئيًا في شريط أدوات خاطئ. يأتي ذلك مباشرة بعد مكالمة أخرى إلى روتين التحجيم ، ولكن فقط بعد أن رسم الشكل الرئيسي نفسه.

يمكنني أن أرفع شيئًا سيئًا مثل تغيير حجم الألواح بشكل صريح بعد انتهاء الموقت ، لكنني أفضل حل المشكلة في مصدرها.

أي أفكار حول سبب حدوث ذلك (أو لا يحدث)؟

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

المحلول

حسنًا ، هذا لا يحل المشكلة في مصدره ولكنه قد يكون حلًا سريعًا. إن تطفو الشريط مرة واحدة قبل عرض النموذج الخاص بك سيجبره على حساب جميع محاذاة التحكم ورسوته من شأنه أن يجبر الرصيف على فعل الشيء نفسه. مثله:

procedure TForm1.FormCreate(Sender: TObject);
begin

  // Insert frame to toolbar, etc..

  TBToolbar.Floating := True;
  TBToolbar.CurrentDock := TBDock;

نصائح أخرى

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

RequiredValueFontHeight   := blah blah..  ;
FFrame.ALabel.Font.Height := RequiredValueFontHeight ;
FFrame.ALabel.Canvas.Font := FFrame.ALabel.Font ;    //  I needed to add this line

Panel.Height              := RequiredValueFontHeight + Panel.Padding.Top + Panel.Padding.Bottom ; 

شكرا لاهتمامك ومساعدة على أي حال.

(تم التصويت على الإجابات والتعليقات بسبب .. حسنًا ، لأنني رجل لطيف.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top