![]() |
OSD unter Vista / 7 (Aero)
Hallo Leute!
Bezug nehmend auf folgenden Artikel ![]() Die Funktion aus oben genannten Artikel verwende ich schon seit einer Weile. Mit Windows 7 musste ich jetzt mit Enttäuschen feststellen, dass dies so nicht mehr möglich ist. SetBkMode(,TRANSPARENT) legt eigentlich fest, das kein Hintergrund gezeichnet wird. Leider ist der Hintergrung jetzt schwarz. Ich vermute es liegt an dem neuen Desktop Management von Windows. Ich konnte bislang kaum etwas in Erfahrung bringen darüber. Schon gar nicht, was mit einem Delphi7 Personal in der Richting zu realisieren ist. Hat jemand eine Idee, wie man den Text wieder transparent auf den Screen "schreiben" kann? MfG TNoob |
Re: OSD unter Vista / 7 (Aero)
Der von dir und Knotti2005 verwendete Quelltext ist und bleibt einfach unsicher.
Es ist und bleibt einfach ein schlechter Stylte in einen anderen Canvas zu zeichnen, da man nie weis was das andere Programm damit noch alles anstellt. Zu Windows 9x Zeiten war dies eine Notlösung. Erstelle dir ein Programmeigenes Fenster, setze dies transparent, zeichne darauf und alles wird gut.
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function SetLayeredWindowAttributes(hwnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): BOOL; stdcall; external user32 name 'SetLayeredWindowAttributes'; procedure TForm1.FormCreate(Sender: TObject); var ExStyle: integer; begin Self.BorderStyle := bsNone; Self.BorderIcons := [biSystemMenu]; Self.Left := 10; Self.Top := 20; Self.Width := 300; Self.Height := 40; Self.FormStyle := fsStayOnTop; Self.Color := clBlack; Label1.Font.Color := clRed; Label1.Font.Style := [fsBold]; ExStyle := GetWindowLong(Self.Handle, GWL_EXSTYLE); //Extended Style holen if ((ExStyle and WS_EX_LAYERED) = 0) then //kein Layered Fenster ? ExStyle := ExStyle or WS_EX_LAYERED; if ((ExStyle and WS_EX_TRANSPARENT) = 0) then //kein "druchklickbares" Fenster ? ExStyle := ExStyle or WS_EX_TRANSPARENT; // neuen Fensterstyle setzen SetWindowLong(Self.Handle, GWL_EXSTYLE, ExStyle); //dann Layered setzen SetLayeredWindowAttributes(Self.Handle, 0, 200, LWA_COLORKEY or LWA_ALPHA); //AlphaBlend werte setzen end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := 'OSD: ' + TimeToStr(Now); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz