Bir açılan pencerenin veya bir açılan pencerenin veya bir açılır pencerenin aşağı açılan kısmı gibi davranan bir TForm türevi yapıyorum - geçici bir şey. Altyazısı yok - BorderStyle bsNone'a ayarlandı. Form, pozisyonunu ayarlayarak, formu kullanarak moda olmayan bir şekilde görüntülenir. Alt gölge içeren kenarlıksız TForm
Göze çarpmasını sağlamak için, sınırının etrafında bir alt gölgeye ihtiyaç duyar. Bununla birlikte, sınırının bsNone'a ayarlanmasının bir sonucu, alt gölgenin kaybolmasıdır.
Çeşitli Google kaynakları bu varyasyonlarını önermek:
procedure TdlgEditServiceTask.CreateParams(var Params: TCreateParams);
const
CS_DROPSHADOW = $00020000;
begin
inherited;
{ Enable drop shadow effect on Windows XP and later }
if (Win32Platform = VER_PLATFORM_WIN32_NT) and
((Win32MajorVersion > 5) or
((Win32MajorVersion = 5) and (Win32MinorVersion >= 1))) then
Params.WindowClass.Style := Params.WindowClass.Style or
CS_DROPSHADOW;
end;
ama çalışmıyor - gölge gösterilmez (Ben de korkunç görünüyor WS_THICKFRAME seti ile yeniden boyutlandırılabilir bir sınır oluşturur sürece). Bu bir açılır pencere, bir çocuk penceresi değil, bu yüzden neden başarısız olduğunu anlamıyorum.
Öneriler lütfen?
NB: Bu soru, yanıtsız kalan this sorusuna benzer bir sorudur.
NB2: TShadowWindow adlı bir belirsiz VCL bileşeni var, doğru olanı yapacak gibi görünüyor, ancak pratik olması için çok kaba yazılmış olduğu ortaya çıkıyor.
Güncelleme: Aşağıdaki Andreas 'yorumları aşağıda, bunu daha fazla araştırmış ve bazı bulgular buldum.
Windows 7 altında, aynı uygulama'dan başka bir pencerenin üzerindeyken, açılır pencerenin açıldığında gölgenin görünmediğini keşfettim.
Burada açıklandığı gibi bir gölge istemek için bir açılır pencerede CreateParams kullanan basit bir Delphi uygulaması.
ana pencerenin dışına taştığı gölge nasıl göründüğünü görün?
Ancak kenarlıksız pencereyi ana pencerede bir açılır pencere olarak kullanmak istiyorum. Alt gölge, pencereyi altından pencereden ayırır. Yukarıdaki tüm açıklamalarım bu duruma işaret ediyor. Açıkçası, bazı Windows mekanizmaları burada karışıyor.
Aynı uygulamayı Windows XP altında da denedim. İşte göründüğü gibi.
Bu * her yerde gölge ile düzgün çalışır. Gah! Andreas'ın da belirttiği gibi, bir Vista/W7 olayı gibi görünebilir.
(* Bu metin ve ScreenDump bir önceki sürümü hiçbir gölge Windows XP ekran seçeneğin 'Shadows menüler altında' olduğu için kapalı. Ancak bu olduğu ortaya çıktı ortaya çıktı önerdi. Duh.)
Bilmiyorum Pencerenizi nasıl istediğinizi tam olarak anlayın. Bunu yapmak istemiyorsunuz * RAD Studio IDE'de Code Insight açılır penceresi (kalın yeniden boyutlandırılabilir bir kenarlığa sahip) olmasını ister misiniz? –
@Andreas: Doğru. Yeniden boyutlandırılabilir bir kenarlık istemiyorum - bu soruda belirtildiği gibi WS_THICKFRAME ayarlayarak bunu yapabilirim. Sınırlarının, bir menü, yani gölgeli tek ince çizgi gibi görünmesini istiyorum. Aslında, bundan bahsettiniz, ben Code Insight'ın içeriğe bağlı olarak en az üç farklı pencere olduğunu fark ettim. Yeniden boyutlandırılabilir sınırları olmayanlar gibi olmak istiyorum! :-) – willw