AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [nonVCL] Screensaver mit Preview (Template)
Thema durchsuchen
Ansicht
Themen-Optionen

[nonVCL] Screensaver mit Preview (Template)

Ein Thema von turboPASCAL · begonnen am 29. Jan 2006 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#1

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 25. Dez 2006, 17:24
Ja, die Regelmäßigen Serverabstürtze bringen mich auch etwas aus dem Konzept.
Oje, die Portalseite is grad kaputt


Ich weiß, ich war grad zu faul, den WM_MOUSEMOVE zu zerlegen

So besser?

Delphi-Quellcode:
    WM_MOUSEMOVE:
      begin
        // Exit Screensaver on mouse move with a Workaround for the "Non-Kugel Mäuse Bug" :)
        if (ScreenMode = scrmStart) and (Counter >= 10) then begin
           If StartUpCursorPos.x+StartUpCursorPos.y=0 then begin
             StartUpCursorPos.x:=LOWORD(lParam);
             StartUpCursorPos.y:=HIWORD(lParam);
           end else begin
             CurrentPos.x:=LOWORD(lParam);
             CurrentPos.y:=HIWORD(lParam);
             If (CurrentPos.x-StartupCursorPos.x<-10) or
                (CurrentPos.x-StartupCursorPos.x> 10) or
                (CurrentPos.y-StartupCursorPos.y<-10) or
                (CurrentPos.y-StartupCursorPos.y> 10) then
                  PostMessage(hWnd, WM_CLOSE, 0, 0);
          end;
        end;
      end;
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 25. Dez 2006, 18:57
Aber sischa !
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#3

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 8. Mai 2007, 14:37
Moin!
Wie stell denn ich das an dass ich ohne Timer dauerhaft rendern kann?
Also wie in Application.OnIdle?

Wenn ich das einfach in "Application.Run" reinschreib passiert nicht viel und wenn ich statt GetMessage PeekMessage nehm beendet er sich sofort wieder
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 8. Mai 2007, 15:05
Ich nehme abhängig vom Modus (Vorschau oder Schoner) zwei verschiedene Nachrichtenschleifen:

Delphi-Quellcode:
If (Mode<>mPreview) Then Begin // nur im Schonermodus mit voller Leistung
  While Not(Beenden) Do Begin
   While PeekMessage(Message,0,0,0,PM_REMOVE) Do Begin
    TranslateMessage(Message);
    DispatchMessage(Message);
   End;
   Render; // rendern, sobald alles andere abgearbeitet ist - "OnIdle"
  End;
 End
 Else Begin // Timer für Vorschaumodus
  Timer := SetTimer(hWnd,0,10,Nil);
  Try
   While GetMessage(Message,0,0,0) Do begin
    TranslateMessage(Message);
    DispatchMessage(Message);
   End;
  Finally
   KillTimer(hWnd,Timer);
  End;
 End;

...

//In WndProc:

WM_TIMER: Render; // Rendern bei "OnTimer"

WM_CLOSE: ...
          Beenden := True;
          ...
Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#5

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 10. Mai 2007, 15:25
Yo, das sieht ja eigentlich nicht schlecht aus, hat aber die gleiche Macke wie mein erster Versuch mit PeekMessage:
Der Bildschirm wird schwarz, es wird nichts gerendert, meine Musik läuft weiter und nach einer Weile startet der Rechner neu als ob ich Reset gedrückt hätte.
Ich kann den Schoner nicht mehr beenden, noch nichtmal den Taskmanager aufrufen
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#6

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 10. Mai 2007, 21:02
Ein Schoner, der genau diese Schleife verwendet, läuft seit einiger Zeit anstandslos auf diversen Rechnern.

Ich vermute das Problem eher in der Rendering-Funktion, die im "OnIdle"-Modus viel öfter aufgerufen wird als mit einem Timer.

In meiner Rendering-Funktion muss ich ganz zum Schluss, nach dem letzten BitBlt, noch ein GetPixel(hMem,0,0) als Dummy-Funktion ausführen, damit alles funktioniert. (hMem ist der Speicherkontext mit der Bitmap, auf die gerendert wird). Es soll ein Problem mit ATI-Treibern geben, was das erforderlich macht. Leider weiss ich nicht mehr, woher ich diese Information habe, ist schon eine Weile her. Finde jetzt auch gerade keine Quelle. Jedenfalls funktioniert es damit bei mir. Wenn mein Schoner im Timer-Modus läuft, geht es auch ohne das GetPixel.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 11. Mai 2007, 09:41
Zitat:
Ich vermute das Problem eher in der Rendering-Funktion, die im "OnIdle"-Modus viel öfter aufgerufen wird als mit einem Timer.
Ja, das ist so.

Selbst in der VCL im "OnIdle" bekommt man leicht eine 98%-tige Systemauslastung hinn.

Lagere das Zeichnen doch in einen Thread aus wenn du keinen Timer willst.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#8

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 11. Mai 2007, 13:21
Ich hab nen ATi-Treiber, das werd ich demnächst ausprobieren, hab grad nur keine Zeit.
Wie krieg ich den Kontext der Bitmap? Das ist doch der Framebuffer der Grafikkarte
Redest du auch von OpenGL-Rendern? Nicht dass wir hier aneinander vorbeireden...

Der Rest der Renderroutine wirds kaum sein:
Delphi-Quellcode:
procedure Render;
var NowTime: Int64;
begin
    QueryPerformanceCounter(NowTime);
    TimePos := (NowTime - StartTime) / PerfFreq;

    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    glTranslatef(Tri(TimePos * SpeedX), Tri(TimePos * SpeedY), Tri(TimePos * SpeedZ));
    glCallList(List);
end;
In der Liste sind 6 Quadrate drin.
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#9

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 11. Mai 2007, 19:51
Zitat von SnuffMaster23:
Redest du auch von OpenGL-Rendern? Nicht dass wir hier aneinander vorbeireden...
Nein, ich rendere mit dem GDI, dementsprechend handelt es sich bei mir um einen 'normalen' Speicherkontext mit Bitmap.
Ich benutze aber die PeekMessage-Schleife auch in einem nonVCL-OpenGL-Projekt, dort klappt es alles so wie es soll, Fenster oder Vollbild.
Funktioniert es denn, wenn Du mit dem Timer arbeitest?
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: [nonVCL] Screensaver mit Preview (Template)

  Alt 11. Mai 2007, 20:11
Eine Option, um das Ding multimonitorfähig zu machen, wär noch nicht schlecht
Daniel Schuhmann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 19:19 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