AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmauflösung + Form

Ein Thema von moin339 · begonnen am 13. Dez 2002 · letzter Beitrag vom 16. Dez 2002
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#1

Bildschirmauflösung + Form

  Alt 13. Dez 2002, 22:58
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
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2
  Alt 13. Dez 2002, 23: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.
Michael N.
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#3
  Alt 14. Dez 2002, 14: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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4
  Alt 14. Dez 2002, 15: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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#5
  Alt 14. Dez 2002, 17: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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#6
  Alt 14. Dez 2002, 17:57
Wie hast du es denn überhaupt geschafft, auf das Device zu zeichnen?
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#7
  Alt 14. Dez 2002, 18: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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#8
  Alt 14. Dez 2002, 19: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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#9
  Alt 14. Dez 2002, 20: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.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#10
  Alt 14. Dez 2002, 22: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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.
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