دلفي :منع ظهور تلميح TPageControl على العناصر المضمنة

StackOverflow https://stackoverflow.com/questions/3214359

  •  13-09-2020
  •  | 
  •  

سؤال

لدي نموذج يحتوي على المكونات التالية:أ TPageControl تحتوي على واحد TTabSheet, ، تحتوي على أ TEdit.

أريد عرض تلميح "مرحبًا" عندما أقوم بالماوس فوق علامة التبويب التحكم في الصفحة، و لا يتم عرض التلميح عندما أقوم بالماوس فوق TEdit.

ال PageControl لديه hint= "Hello", ، و showhint = true.هذا يعمل كما هو متوقع.

ال TEdit لديه showhint = false, parentshowhint = false, ، و hint فارغ.

ولكن، ما زلت أحصل على تلميح "مرحبًا" عندما أقوم بالماوس فوق TEDit.كيف يمكنني التوقف عن هذا؟

إليك ملف .dfm، إذا كنت مهتمًا.

object Form65: TForm65
  Left = 0
  Top = 0
  Caption = 'Form65'
  ClientHeight = 258
  ClientWidth = 290
  OldCreateOrder = False
  ShowHint = True
  TextHeight = 13
  object PageControl1: TPageControl
    Left = 0
    Top = 0
    Width = 290
    Height = 258
    Hint = 'Bar'
    ActivePage = TabSheet1
    Align = alClient
    TabOrder = 0
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
      object Edit3: TEdit
        Left = 72
        Top = 67
        Width = 121
        Height = 21
        ParentShowHint = False
        ShowHint = False
        TabOrder = 0
        Text = 'tab1'
      end
    end
  end
end
هل كانت مفيدة؟

المحلول

قم بإضافة عنصر تحكم TApplicationEvents إلى النموذج الخاص بك، واستخدم الحدث OnShowHint:

procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
  var CanShow: Boolean; var HintInfo: THintInfo);
begin
  CanShow := HintInfo.HintControl <> Edit1;
end;

إذا لم يكن لديك كائن TApplicationEvents في (على سبيل المثال.إذا كنت تستخدم إصدارًا قديمًا جدًا من دلفي)، فيمكنك استخدامه (في FormCreate، على سبيل المثال)

Application.OnShowHint := ApplicationEvents1ShowHint

لتعيين معالج الحدث يدويًا.

تحديث

إذا كان لديك أكثر من عنصر تحكم واحد في TTabSheet، فقد تواجه نفس المشكلة معهم جميعًا.ثم قد تكون مهتمة

procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
  var CanShow: Boolean; var HintInfo: THintInfo);
begin
  CanShow := not SameStr(HintStr, PageControl1.Hint) or (HintInfo.HintControl = TabSheet1);
end;

تحديث 2

إذا كان لديك العديد من أوراق TTabSheets في TPageControl، وتريد أن تعرض جميع الأوراق التلميح، ولكن ليس عناصر التحكم التابعة، فيمكنك القيام بذلك

  CanShow := not SameStr(HintStr, PageControl1.Hint) or
    ((HintInfo.HintControl is TTabSheet) and
      (TTabSheet(HintInfo.HintControl).PageControl = PageControl1));

بدلاً من.

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