Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Laufschrift auf dem Desktop (https://www.delphipraxis.net/122798-laufschrift-auf-dem-desktop.html)

nsamaster 22. Okt 2008 08:55


Laufschrift auf dem Desktop
 
Hallo Gemeinde!

Ich möchte ein Programm realisieren, bei welchem eine Laufschrift (nach möglichkeit Transparent) über der Taskleiste von rechts nach links verläuft - Als Beispiel fällt mir da die Laufschrift von NTV ein ;-). Meine Suchen im Internet haben mir für dergleichen Situation nicht wirklich viele verwehrtbare Information erbracht, sodass ich mich hoffnungsvoll an euch wende. Meine Suche geht über vorschläge und evtl. Beispiele. Also, wer diese liefer kann, ist sich meines Dankes sicher! :thumb:

jfheins 22. Okt 2008 09:01

Re: Laufschrift auf dem Desktop
 
Mit
Delphi-Quellcode:
GetDC(Getdesktopweindow())
Bekommst du ein HDC (Handle auf Device Context) des Desktops. Das ist zwar unsauber, aber damit geht sowas.

Besser isses, wenn du ein neues Fenster erstellst, dass in der Taskleiste drinsitzt. (= SetParent() )

BullsEye 22. Okt 2008 09:11

Re: Laufschrift auf dem Desktop
 
Hier der Code zur Laufschrift:

Laufschrift a la Winamp
Versch Varianten


musst du halt nur noch auf deinen Code anpassen.

Für Die Taskleiste könntest du nen Deskband nehmen.

Sonst kannst du mit folgendem Code auch direkt auf dem Desktop schreiben:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 DCanvas: TCanvas;
 DHandle: HWND;
begin
 DHandle:=GetDC(0);
 if DHandle<>0 then
 begin
   try
     DCanvas:=TCanvas.Create;
     try
       DCanvas.Handle:=DHandle;
       DCanvas.Font.Color:=clRed;
       DCanvas.Font.Size:=24;
       DCanvas.Brush.Style:=bsClear;
       DCanvas.TextOut(100, 100, 'Ich will ein Spiel spielen!!!');
     finally
       DCanvas.Free;
     end;
    finally
      if ReleaseDc(0, DHandle)<>1 then
    end;
 end;
end;
EDIT: Der Code ist aber nicht gerade der feinste es kann da ab und zu zu anzeigefehlern kommen!

nsamaster 22. Okt 2008 09:13

Re: Laufschrift auf dem Desktop
 
Zitat:

Besser isses, wenn du ein neues Fenster erstellst, dass in der Taskleiste drinsitzt. (= SetParent() )
Mhh... Die Laufschrift soll nicht in der Taskleiste sein, sondern darüber. Da fällt mir noch ein, das man den Bereich der "Taskleiste", für andere Programm so ausdenen müsste, das meine Schrift nicht überdeckt wird. Geht das irgendwie?

Was bedeutet "unsauber"? Ich gehe richtig davon aus, das ich dann mit hilfe eines Canvas zeichnen kann?

Vielen Dank BullsEye für die schnelle Antwort und hilfreichen Links!

DeddyH 22. Okt 2008 09:18

Re: Laufschrift auf dem Desktop
 
Zitat:

Da fällt mir noch ein, das man den Bereich der "Taskleiste", für andere Programm so ausdenen müsste, das meine Schrift nicht überdeckt wird. Geht das irgendwie?
Scheint mir zwar mit Kanonen auf Spatzen geschossen, aber schau Dir mal SystemParametersInfo mit SPI_SETWORKAREA an.

BullsEye 22. Okt 2008 09:23

Re: Laufschrift auf dem Desktop
 
Zitat:

Zitat von nsamaster
Mhh... Die Laufschrift soll nicht in der Taskleiste sein, sondern darüber. Da fällt mir noch ein, das man den Bereich der "Taskleiste", für andere Programm so ausdenen müsste, das meine Schrift nicht überdeckt wird. Geht das irgendwie?


Hiermit kannst du die Taskbarposition ermitteln. Nunja, das mit dem "dadrüber" ist sone Sache. Ich z.B. habe meine oben sprich da passt nichts drüber. Also ne kleine Abfrage basteln wo du guckst ob die oben oder unten sitzt und du passt da dann halt deine Position dran an ;)

Delphi-Quellcode:
var
  H: HWnd;
  Rect: TRect;
begin
  H:= FindWindow('Shell_TrayWnd', nil);
  if H<>0 then
  begin
    GetWindowRect(H, Rect);
 
    Label1.Caption:= 'Left: ' + IntToStr(Rect.Left);
    Label2.Caption:= 'Right: ' + IntToStr(Rect.Right);
    Label3.Caption:= 'Top: ' + IntToStr(Rect.Top);
    Label4.Caption:= 'Bottom: ' + IntToStr(Rect.Bottom);
  end;
Zum Thema unsauber: Gut, ist nun nicht transparent, aber das solltest du denke ich auch einfach hinbekommen. Aber optisch sieht das ab und zu nicht sehr fein aus. Und manchmal verzerrt die Schrift wenn nen Fenster dahinter ist.
Vllt mal mit "Doublebuffered" arbeiten ;)

Sherlock 22. Okt 2008 09:25

Re: Laufschrift auf dem Desktop
 
Da kann man doch eine eigene Symbolleiste definieren. So wie die Schnellstartleiste, oder den Desktop Manager etc. Dann bekommt diese Leiste ihren vom Benutzer oder Dir definierbaren Platz und gut ist. Das nur als Anregung, denn wie man das macht...weiss ich leider nicht :D

Sherlock

BullsEye 22. Okt 2008 09:28

Re: Laufschrift auf dem Desktop
 
Zitat:

Zitat von Sherlock
Da kann man doch eine eigene Symbolleiste definieren. So wie die Schnellstartleiste, oder den Desktop Manager etc. Dann bekommt diese Leiste ihren vom Benutzer oder Dir definierbaren Platz und gut ist. Das nur als Anregung, denn wie man das macht...weiss ich leider nicht :D

Sherlock

Deswegen ja das mit dem Deskband.
Ich bin mir gerade nicht sicher aber vllt geht das auch mit dem Hier im Forum suchenCoolTrayIcon sonst irgendein Anderes TrayIcon


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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