كيف يمكنني استخدام "نص العنصر النائب" في عنصر تحكم تحرير Win32؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

إلقاء نظرة على أعلى اليمين في موقع فائض المكدس. يحتوي مربع البحث عن بعض النص في أنه يقول "البحث". عند النقر فوقه، يختفي النص.

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

هل هناك أي طريقة يمكنني القيام بها دون تحديد النص الفعلي في عنصر التحكم وتغيير لون النص؟ ربما عن طريق اعتراض طلاء التحكم أو شيء من هذا؟

شكرًا.

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

المحلول

من الممكن اعتبارا من XP. افحص ال EM_SETCUEBANNER. رسالة. ومع ذلك، هناك قضايا معينة التي تجعلها لا تعمل بالكامل كما ينبغي على XP، لذلك من الأفضل أن تتعامل مع نظام التشغيل Vista.

إذا كنت بحاجة إلى إصدارات WIN2K أو الأقدم، فستحتاج إلى القيام بذلك بنفسك، على الأقل في تلك المنصات.

نصائح أخرى

شكرا على هذا السؤال، سأكون قادرا على استخدام هذا في المستقبل. FWIW (ليس كثيرا، ربما)، هنا هو تنفيذ في دلفي:

procedure TForm1.FormShow(Sender: TObject);
const
  ECM_FIRST = $1500;
  EM_SETCUEBANNER = ECM_FIRST + 1;
begin
  SendMessage(edt.Handle,EM_SETCUEBANNER,0,LParam(PWideChar(WideString('Enter search here'))));
end;

احتمال واحد: اجعله مالك رأسه ورسم النص يدويا عليه إذا كانت خاصية .text فارغة.

إلقاء نظرة على EM_SETCUEBANNER.

ربما، ولكن لماذا لا تحدد فقط النص الافتراضي واللون حسب الحاجة، ومسحها بحدث "OnClick"؟

لا تحتاج إلى مرسومة من المالك، الأمر الأصلي مع APIS المستخدم (Banner) انظر Winapi GRP. للعينات (في ج)

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