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.