Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bildschirmauflösung + Form (https://www.delphipraxis.net/1620-bildschirmaufloesung-form.html)

moin339 13. Dez 2002 21:58


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:

nailor 13. Dez 2002 22:24

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.

moin339 14. Dez 2002 13:25

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

d3g 14. Dez 2002 14:35

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

moin339 14. Dez 2002 16:53

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

d3g 14. Dez 2002 16:57

Wie hast du es denn überhaupt geschafft, auf das Device zu zeichnen?

moin339 14. Dez 2002 17:05

Moin!

Ungefähr so:

Delphi-Quellcode:
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;
cu

d3g 14. Dez 2002 18:55

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

phlux 14. Dez 2002 19:06

Hi!
Folgende Lösung hab ich aus dem Delphi5 Kochbuch entnommen ("Rezept R43 ...ein Formular skalieren")

Delphi-Quellcode:
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;
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.

moin339 14. Dez 2002 21:48

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.
Seite 1 von 2  1 2      

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