![]() |
Bildschirmauflösung + Form
Moin!
Ich möchte ein Form anzeigen während meine Anwendung im Hintergrund läuft. Wenn ich das Form anzeige wird die Bildschrimauflösung aber geändert, wenn eine Anwendung im Vordergrund im Vollbildmodus läuft. Das Problem tritt z.B. auf wenn ich gerade ein Spiel geöffnet habe und dann das Form anzeigen lasse. Wie kann ich das umgehen? Ich möchte also ein Fenster erstellen, dass sich der aktuellen Auflösung anpasst. Wie geht das? schönes Wochenende noch, moin339 :coder: |
du kannst auf jeden fall mit screen.width und screen.heigth die aktuelle breite und höhe des bildschirms abrufen. kannst auch unter tscreen in der hilfe nachschaun, ob es da was gibt, das dir helfen könnte.
|
Moin!
screen.width und screen.heigth bringt mich aber nicht weiter. Ich weiß nicht ob ihr verstanden habt was ich eigentlich will. Mein Programm läuft im Hintergrund und ich möchte ein weiters Fenster anzeigen wenn eine Tastenkombination gedrückt wurde. Dieses Fenster soll dann in den Vordergrund treten, auch wenn ein anderes Fenster im vordergrund ist. Das funktioniert soweit auch ganz gut aber wenn ein Programm im Vollbildmodus aktiviert ist wird erst die Auflösung umgestelt. (passiert z.b. auch wenn man gerade ein Spiel zoggt und dann die win-taste drückt) Wie kann ich also ein neues Fenster anzeigen ohne das irgentetwas an der Auflösung geändert wird? Ich hoffe es ist jetzt deutlicher. cu, moin339 |
Hallo moin,
ich glaube, dass das, was du willst, nicht zu realisieren sein wird. Wenn nämlich gerade ein Spiel läuft, ist nicht einfach die Auflösung geändert, sondern (in den meisten Fällen) ist ein spezielles DirectDraw- oder Direct3D-Device geöffnet. Du müsstest darauf zeichnen und überhaupt den Zugriff zu erlagen, dürfte nicht gerade einfach - wenn nicht unmöglich - sein (mal abgesehen davon, dass dir die VCL- und WinAPI-Controls nichts bringen würden, du müsstest du dir deine eigenen zeichnen und per Maushook eine eigene Ereignisbehandlung einbauen). MfG, d3g |
Moin!
Schade! :( Eigentlich möchte ich auch nur eine Info am Bildschirm ausgeben. Es sollen also keine Buttons oder ähnliches verfügbar sein. Mit textout funktioniert es aber glaube ich immer. Nur wie kann ich es erreichen, dass der ausgegebene Text nicht von dem Spiel überschrieben wird? Ich habs mal mit einem Timer (20 ms) probiert, hat aber trotzdem geflackert! Gibt es da eine Möglichkeit? ciao, moin339 |
Wie hast du es denn überhaupt geschafft, auf das Device zu zeichnen?
|
Moin!
Ungefähr so:
Delphi-Quellcode:
cu
procedure schreiben;
var dc: hdc; var s:string; begin DC := getdc(0); // O = Desktop s := 'Moin!'; SetBkMode(dc, transparent); //hintergrund transparent SetTextAlign(dc,ta_center); //Ausrichtung: center SetTextColor(dc,RGB(0,0,255)); //Farbe: blau TextOut(dc,(screen.width div 2),(screen.Height div 2),PChar(s),length(s)); end; |
Oh. Ich wusste gar nicht, dass man so einfach auf ein DirectX-Device schreiben kann... Wie auch immer, um das Flimmern loszuwerden, müsstest du nicht auf den Desktop schreiben, sondern DirectDraw-Funktionen benutzen, und dafür musst du dir erst Zugriff auf das Device beschaffen. Also kann ich dir nur raten, einen höher auflösenden Timer zu benutzen, schau dich mal nach Multimedia-Timern um (speziell die Funktion timeSetEvent() dürfte interessant für dich sein).
MfG, d3g |
Hi!
Folgende Lösung hab ich aus dem Delphi5 Kochbuch entnommen ("Rezept R43 ...ein Formular skalieren")
Delphi-Quellcode:
Das Formular dürfte sich jetzt der Auflösung anpassen. Hab den Code aus dem Buch abgetippt, garantiere also nicht für die Fehlerfreiheit ;) . Hoffe das rezept hat dir geholfen.
const
ScreenHeightDev = 768; ScreenWidthDev = 1024; procedure TForm1.FormCreate(Sender: TObject); var x, y: Integer; begin Scaled := True; x := Screen.Width; y := Screen.Height; if (y <> ScreenHeightDev) or (x <> ScreenWidthDev) then begin Form1.Height := (Form1.ClientHeight * y div ScreenHeightDev) + Form1.Height - Form1.ClientHeight; Form1.Width := (Form1.ClientWidth * x div ScreenWidthDev) + Form1.Height - Form1.Clientheight; ScaleBy(x, ScreenWidthDev); end; end; |
Moin!
Danke für den Aufwand! Aber soweit ich das überblicken kann werden da ja nur die Form1.width und Form1.Height eigenschaften geändert. Das ist leider nicht mein Problem. cu, moin339 :coder: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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