Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblenden (https://www.delphipraxis.net/165067-direct-auf-screen-zeichnen-problem-mit-hintergrund-und-zeichnung-wieder-ausblenden.html)

Mossi 13. Dez 2011 14:08

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:
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;
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.
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?

mkinzler 13. Dez 2011 14:14

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.

Mossi 13. Dez 2011 14:46

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:
self.Brush.Style := bsClear;
self.BorderStyle := bsNone;
Beim manuellen zeichnen hab ich auch außerdem SetBkMode noch dazu genommen:
Delphi-Quellcode:
SetBkMode(Self.Canvas.Handle, TRANSPARENT);

Bummi 13. Dez 2011 15:19

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

lbccaleb 13. Dez 2011 15:32

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:
http://www.delphipraxis.net/973690-post2.html

Bummi 13. Dez 2011 15:35

AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
 
@lbccaleb
mein Anhang beinhaltet auch eine saubere Lösung

DeddyH 13. Dez 2011 15:39

AW: Direct auf Screen zeichnen: Problem mit Hintergrund und Zeichnung wieder ausblend
 
Zitat:

Zitat von Bummi (Beitrag 1141208)
@lbccaleb
mein Anhang beinhaltet auch eine saubere Lösung

...für die man wohl DevExpress braucht, bisschen viel Geld für ein transparentes Fensterchen :mrgreen:

Bummi 13. Dez 2011 15:42

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.

Mossi 13. Dez 2011 15:56

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.

Mossi 13. Dez 2011 16:30

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 1 von 2  1 2      

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