Einzelnen Beitrag anzeigen

Waldteufel
(Gast)

n/a Beiträge
 
#4

Re: OSD Erscheinungsort...

  Alt 6. Feb 2006, 16:31
Hi.

Zitat von Knotti2005:
Kann ich nicht auch mit
   MyCanvas.TextOut(Screen.Width, Screen.Height, TransText); arbeiten und dann jeweils 50 abziehen oder so?...
Und wenn einer die Taskbar 100px hoch macht?
Das stimmt schon, was hier steht...

Wenn schon, dann so:
Delphi-Quellcode:
var
  SysTray : THandle;
  Rect : TRect;
  x, y, iTaskBar, iScreenHeight, iScreenWidth : Integer;
  TransText : string;

  MyHand: HWND;
  MyDc: HDC;
  MyCanvas: TCanvas;
  Start : Longint;
begin
  TransText := 'Huhu! Ich bin ein OSD-Text!';

  SysTray := FindWindow('Shell_TrayWnd', nil);
  if SysTray <> INVALID_HANDLE_VALUE then begin
    if GetWindowRect(SysTray, Rect) then
      iTaskbar := Rect.Bottom - Rect.Top;
  end;

  // Bildschirmmaße erhalten
  iScreenHeight := Screen.Height;
  iScreenWidth := Screen.Width;

  // direkt über der Uhr platzieren
  x := iScreenWidth - { hier die Breite des Textes einsetzen!!! };
  y := (iScreenHeight - iTaskbar) - { hier die Höhe des Textes einsetzen!!! };

  MyHand := GetDesktopWindow;
  MyDc := GetWindowDC(MyHand);
  MyCanvas := TCanvas.Create;
  MyCanvas.Handle := MyDC;
  BeginPath(MyCanvas.Handle);
  MyCanvas.Font.Color := clred;
  MyCanvas.Font.Name := 'Arial';
  MyCanvas.Font.Size := 15;
  SetBkMode(MyCanvas.Handle,TRANSPARENT);
  EndPath(MyCanvas.Handle);

  MyCanvas.TextOut(x, y, TransText); // <--

  Start := GetTickCount;
  repeat
    Application.ProcessMessages
  until (GetTickCount - Start > 2000);
  InvalidateRect(0, nil, true);
end;
*klackerdiklackerdicklack* Autsch! Meine Hand!
  Mit Zitat antworten Zitat