Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Auf dem Desktop zeichnen? (https://www.delphipraxis.net/947-auf-dem-desktop-zeichnen.html)

Phoenix 30. Sep 2002 09:19


Auf dem Desktop zeichnen?
 
Hi Leute,

ich weiss leider _gar nicht_, ob ich hier in dem Thread eigentlich richtig bin, aber das werdet ihr mir schon sagen. :)

Ich will möglichst Systemunabhängig (sprich es soll unter Win95 genauso laufen wie unter NT, 2k und XP) auf dem Desktop einen Schriftzug anzeichnen. Wenn möglich, sollte dieser Schriftzug sogar auf 'always on Top' geschaltet werden können.

Hintergrund: Es gibt bis heute keine Option, das Datum im Tray anzuzeigen, und ich möchte gerne über der Systemuhr das Datum eingeblendet haben.

Wie löse ich das am einfachsten, ohne das mir ein System um die Ohren fliegt? Ein 'unsichtbares' Fenster nur mit dem Text drauf ist auch nicht unbedingt das, was ich wollte, denn dieses Ding verschwindet automatisch, wenn man z.B. Win+D drückt (2k und XP) und das sollte eben nicht passieren.

Schonmal Danke,

Sebastian

Daniel 30. Sep 2002 09:27

Re: Auf dem Desktop zeichnen?
 
Zitat:

Zitat von Phoenix
Hintergrund: Es gibt bis heute keine Option, das Datum im Tray anzuzeigen, und ich möchte gerne über der Systemuhr das Datum eingeblendet haben.

Stimmt nicht ganz. Wenn Du die Taskleiste auf mindestens zwei Zeilen in der Höhe vergrößerst, dann erscheint rechts das Datum:
http://users.delphipraxis.net/daniel/datum.gif
Das sollte eigentlich unter allen von Dir genannten Windows-Versionen funktionieren, kommt aber aus meiner Sicht nur bei einer entsprechend hohen Bildschirmauflösung in Frage, da man sich sonst zu sehr den verbleibenden Platz einengt.

[edit]...nun gut...Dies scheint ausschliesslich Windows XP zu funktionieren...[/edit]

Christian Seehase 30. Sep 2002 09:35

Moin Daniel,

also ich kann die Taskleiste komplett aufziehen und erhalte weiterhin nur die Uhr. (W2K SP2)
Hast Du weitere Einstellungen?

Daniel 30. Sep 2002 09:36

... dann geht das tatsächlich erst ab Windows XP? Kaum zu glauben, aber wahrscheinlich wahr....

Christian Seehase 30. Sep 2002 09:42

Moin Daniel,

falls es Dir eine Beruhigung ist:

Unter W2K erscheint aber ein Hint mit dem Datum, wenn man den Cursor über die Uhrzeit führt.

sakura 30. Sep 2002 10:17

@Daniel: nur (erst ab) XP wird das Datum eingeblendet - *IchAuchHabenWollen*

Die Lösung mit dem "unsichtbaren" Form dürfte die beste Variante sein. Wenn das Form minimiert wird (z.B. Win-D), dann sollest Du einfach das OnMinimize (Application oder Form :?:) Ereignis abfangen und eine WM_RESTORE Nachricht ein Dein Form senden.

Auf den Desktop zeichnen hat Nachteile, da beim Verschieben von Fenstern dasselbige oft nicht neu gezeichnet wird, sondern lediglich der sichtbare Bereich im wahrsten Sinne des Wortes verschoben wird. Dann hast Du am Ende Dein Datum mehrmals auf dem Bildschirm - bis die Fenster wirklich neu gezeichnet werden.

Um die Frage aber noch zu beantworten:
Code:
var
  C: TCanvas;
begin
  C := TCanvas.Create;
  C.Handle := GetDC(0);
  try
    C.DrawText(0, 0, DateTimeToString(Now));
  finally
    ReleaseDC(C.Handle, 0);
    C.Free;
  end;
end;
...:cat:...

Phoenix 30. Sep 2002 14:34

Habs gerade gemerkt. Das mit den verschieben ist echt blöd. Zudem reicht es ein Fenster über den Text zu schieben, und weg isser :(

Was mich wieder zum transparenten Fenster bringt. Aber die gibts unter Win95 bis NT ja leider nicht, sondern nur unter 2k und XP. Oder gibt es eine andere Möglichkeit ein Fenster (nur den Hintergrund und die ganzen Statusleisten und Titelleiste) unsichtbar zu lassen und nur ein einziges Objekt (in unserem Falle ein TLabel) darauf sichtbar sein zu lassen? Die Steuerung liesse sich dann ja vie Kontext-Menu erledigen.

Ich mag Win, aber ab und an kann man dabei echt die Krätze kriegen ;)

sakura 30. Sep 2002 14:40

Es gibt bei Torry Komponenten, die setzen die Fensterform entsprechend einer Bitmap-Vorgabe. Das könnte Dir weiterhelfen. Text aufs Bitmap, Fensterform neu berechnen, fertig.

Christian Seehase 30. Sep 2002 15:27

Moin Phoenix,

wobei noch zu ergänzen wäre, dass die von Sakura angesprochenen Komponenten mit ziemlicher Sicherheit auf Regions basieren.
Das nur noch als Stichwort, unter dem Du (z.B. auch im PSDK) mal nachsehen kannst.

Phoenix 30. Sep 2002 16:23

Jupp, tun sie. Ich habe sogar von Anton Grigoriev eine Komponente gefunden, die eine Region aus einem Text direkt auf das Form invertiert. Demnach besteht meine Form hinterher nur noch aus dem Text :)

Der Text ist dann das Datum und wird ganz einfach auf dem Desktop als Always on Top frei hin und hergeschoben werden können. Sobald das Ding fertig ist, poste ich hier mal ne URL wo's dann die Sourcen gibt.

Dürfte dann sogar ggf. eine eigene Komponente geben, so ne Art 'OnlyTextForm'. Ich geb mir selber mal 3 Tage. Mailt mich an, wenn ihr das Ding haben wollt und ich vergess es hier reinzustellen :)

Danke für die Tipps. War genau das was ich gesucht hab *g*


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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-2025 by Thomas Breitkreuz