![]() |
Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblenden
Hallo alle zusammen,
ich versuch gerade einen Text direkt auf meinen Screens auszugeben. Das funktioniert prinzipiell auch. Allerdings bekomm ich es nicht hin, dass wirklich nur die ausgegebene Schrift angezeigt wird. Stattdessen wird immer irgendwas vom Hintergrund verändert. Außerdem fehlt es mir im moment noch an einer Idee, dass ich den eingeblendeten Text wieder verschwinden lassen kann. Mein Code sieht im Moment so aus:
Delphi-Quellcode:
Es wird also auf jedem Monitor der Name des Monitors eingeblendet. Nach einer bestimmten Zeit (Timer mit 5000ms) soll dieser Text dann aber wieder ausgeblendet werden. Desweiteren soll wirklich nur der Text eingeblendet werden.
var
i:integer; ca: TCanvas; begin for i := 0 to Screen.MonitorCount - 1 do begin ca := TCanvas.Create; ca.Handle := GetWindowDC(0); ca.Brush.Style := bsSolid; ca.Font.Name := 'Tahoma'; ca.Font.Style := [fsBold]; ca.Font.Size := 60; ca.Font.Color := clRed; ca.TextOut(_screens[i].Resolution.Left + 50, 50, _screens[i].MonitorName); FreeAndNil(ca); end; end; Im obigen Beispiel mit bsSolid wird ein weißer Hintergrund verwendet. Wenn ich das auf bsClear ändere, hab ich erst einmal auch wieder einen weißen Hintergrund. Wenn ich damit dann ein bisschen rumspiele, hab ich irgendwann irgendeinen komplett anderen Hintergrund, der von einem anderen Programm kommt usw. Also alles ziemlich unzuverlässig. Hat da jemand eine Lösung, wie man das sauber machen kann? |
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Entwdere per Overlay arbeiten, Screenbereich vorher wegsichern, Redraw von anderer(en) Anwendung(en) erzwingen oder Kombination.
|
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Per Overlay würde bedeuten, dass ich eine transparente Form auf die Screens lege, oder?
Diesen Ansatz hab ich als erstes versucht, aber auch da hatte ich das Problem mit der Transparenz. Ich hab's gerade nochmal so versucht und dann komm ich auf genau das gleiche Problem. Interessanterweise funktioniert es aber unter Windows XP. Nur unter Windows 7 haut das mit der transparenz nicht hin. Ich hab testweise die Overlay-Form mal dahingehen verändert, dass ich ein Label eingefügt habe und die Property Transparent auf true gesetzt. Dann bekomm ich einen schwarzen Hintergrund. Die Form hab ich mit folgendem Code transparent gemacht, was ja bisher eigentlich immer funktioniert hat:
Delphi-Quellcode:
Beim manuellen zeichnen hab ich auch außerdem SetBkMode noch dazu genommen:
self.Brush.Style := bsClear;
self.BorderStyle := bsNone;
Delphi-Quellcode:
SetBkMode(Self.Canvas.Handle, TRANSPARENT);
|
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe mal einen Microrumpf(Minimaldemo) für die transparent Darstellung angehängt
|
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Da das Zeichnen auf einen fremden Canvas ne sehr "dreckige" Methode ist, sollte man das tunlichst vermeiden!
Matti hat hier schonmal ein vernünftiges Bsp. gebracht sowas zu realisieren: ![]() |
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
@lbccaleb
mein Anhang beinhaltet auch eine saubere Lösung |
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Zitat:
|
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Nein, schmeiß dxGDIPlusClasses einfach aus den uses raus. Ich hatte zwischendurch ein PNG auf der Maske und vergessen es wieder aus den uses rauszunehmen.
|
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Also die Lösung von Bummi schaut an sich ganz gut aus. Nur dass ich es nicht hinbekomme, dass die Schrift kräftiger wird. Im angegebenen Beispiel sieht man eigentlich gar keine Schrift bei mir außer man sieht ganz genau hin und wenn ich die Farbe auf clRed ändere, erhalte ich nur ein ganz blasses Rosa. ich denke, dass das irgendwie mit der alphatransparenz zusammenhängt, aber was muss ich da machen, dass das wieder kräftig wird?
Die Lösung im anderen Thread muss ich mir nochmal genauer anschauen. ich glaub, dass das letztendlich die Lösung sein könnte. Es muss halt nur gleich für XP als auch für Win7 mit Aero und ohne Aero funktionieren. |
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Ok. Die Lösung aus dem verlinkten Thread hat jetzt auf jeden Fall funktioniert. Vielen Dank für die Hilfe.
|
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Zitat:
Delphi-Quellcode:
Edit:
const
C_Alpha=1; Gerade mal getestet! Auf hellem Hintergrund ist diese Lösung ein Problem ja. |
AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
Liste der Anhänge anzeigen (Anzahl: 1)
Ja war ein Schnellschuss der auf meinem schwarzen Bildschirm nicht aufgefallen ist,
ich verwende bei meinen Routinen grundsätzlich GDI+, hier tritt das Problem aufgrund der Alphakanlkontrolle nicht auf, ich wollte den Rahmen hier aber nicht sprengen. Für die, die es interessiert, die Api benötigt keine Installation, einfach 3-4 Units im Suchpfad oder im Programmverzeichnis. ![]() Im Anhang das ganze nochmals mit GDI+. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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