AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OSD unter Vista / 7 (Aero)

Ein Thema von TNoob · begonnen am 23. Nov 2009 · letzter Beitrag vom 24. Nov 2009
Antwort Antwort
TNoob

Registriert seit: 10. Mai 2007
7 Beiträge
 
Delphi 7 Personal
 
#1

OSD unter Vista / 7 (Aero)

  Alt 23. Nov 2009, 21:50
Hallo Leute!

Bezug nehmend auf folgenden Artikel http://www.delphipraxis.net/internal...ct.php?t=74673 suche ich nach einer Lösung für Windows Vista / 7, wenn Aero aktiviert ist.

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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: OSD unter Vista / 7 (Aero)

  Alt 24. Nov 2009, 01:47
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz