Tôi đã tạo ra một dẫn xuất TForm hoạt động như phần thả xuống của một combo, hoặc một cửa sổ gợi ý, hoặc một menu popup - một điều tạm thời. Nó không có chú thích - BorderStyle của nó được đặt thành bsNone. Biểu mẫu được hiển thị không theo cách thức bằng cách sử dụng Hiển thị, đã đặt vị trí của nó.TForm không biên giới với bóng đổ
Để làm nổi bật, nó cần một bóng đổ xung quanh đường viền của nó. Tuy nhiên, hậu quả của việc thiết lập đường viền của nó thành bsNone là bóng đổ biến mất.
nguồn Google khác nhau cho thấy sự thay đổi về điều này:
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;
nhưng nó không hoạt động - cái bóng không được hiển thị (trừ khi tôi cũng thiết lập một biên giới thay đổi kích thước với bộ WS_THICKFRAME, trông khủng khiếp). Đây là một cửa sổ bật lên, không phải cửa sổ con, vì vậy tôi không thấy lý do tại sao nó không thành công.
Đề nghị vui lòng?
NB: đây là câu hỏi tương tự với câu hỏi this chưa được trả lời.
NB2: Có một thành phần VCL tối nghĩa được gọi là TShadowWindow trông giống như nó sẽ làm điều đúng, nhưng hóa ra là quá thô lỗ được viết là thực tế.
Cập nhật: Làm theo ý kiến của Andreas bên dưới, tôi đã điều tra thêm về điều này và tìm thấy một số yếu tố thú vị.
Trong Windows 7, tôi phát hiện ra rằng bóng không xuất hiện khi cửa sổ bật lên nếu nó nằm trên một cửa sổ khác từ cùng một ứng dụng.
Đây là ứng dụng Delphi đơn giản, sử dụng CreateParams trên cửa sổ bật lên để yêu cầu bóng như mô tả ở trên.
Xem cách thả bóng xuất hiện nơi nó vượt ra ngoài cửa sổ chính?
Nhưng tôi muốn sử dụng cửa sổ không viền làm cửa sổ bật lên trên cửa sổ chính. Bóng đổ phân biệt popup từ cửa sổ bên dưới. Tất cả các mô tả của tôi ở trên đề cập đến hoàn cảnh này. Rõ ràng một số cơ chế Windows đang can thiệp ở đây.
Tôi cũng đã thử cùng một ứng dụng trong Windows XP. Đây là cách nó trông.
này hoạt động một cách chính xác với bóng ở khắp mọi nơi *. Gah!
Vì vậy, nó có vẻ là một điều Vista/W7, như Andreas gợi ý.
(* Một phiên bản trước của văn bản này và screendump gợi ý rằng không có bóng xuất hiện. Tuy nhiên, điều này hóa ra là vì tôi đã có 'Shadows dưới menu' màn hình hiển thị tùy chọn Windows XP tắt. Duh.)
tôi không hoàn toàn hiểu cách bạn muốn cửa sổ của bạn. Bạn * không * muốn nó giống như cửa sổ bật lên Code Insight (có đường viền có thể thay đổi kích thước dày) trong RAD Studio IDE, phải không? –
@Andreas: Đúng. Tôi không muốn một biên giới có thể thay đổi kích thước - đây là những gì tôi có thể nhận được bằng cách thiết lập WS_THICKFRAME như đã đề cập trong câu hỏi. Tôi muốn đường viền của nó trông giống như một thực đơn, tức là một đường kẻ mỏng với bóng. Thực tế, bây giờ bạn đề cập đến nó, tôi nhận thấy Code Insight hiển thị ít nhất ba loại cửa sổ khác nhau, tùy thuộc vào ngữ cảnh. Tôi muốn giống như những người không có biên giới có thể thay đổi kích cỡ! :-) – willw