![]() |
[nonVCL] Screensaver mit Preview (Template)
Liste der Anhänge anzeigen (Anzahl: 2)
Nach dem ich nun einen (dähm.) Fehler
![]() Bei dem Sourcecode handel es sich um einen nonVCL - Screensaver der sich leicht an eigene Bedürfnisse anpassen lässt. Wer Fehler findet oder Vorschläge hat möge es hier posten. Happy Screensaving ! :) |
Re: [nonVCL] Screensaver mit Preview (Template)
Hallo!
Weil Du mich hierhin verwiesen hast. :mrgreen: Sollte das Fenster nicht StayOnTop sein? Edit: Zwei kleine Fehler: Du solltest DefScreenSaverProc anstatt DefWindowProc verwenden. Wenn man auf die .scr Datei mit der rechten Maustaste klickt und Konfigurieren wählt startet der Bildschirmschoner. Grüßle! |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
Kannst ja mal testen :P PS: Ich empfehle "ausführen"-"cmd"-"Datei reinziehen (Drag&Drop)" und Parameter "/c" dazuschreiben ;) |
Re: [nonVCL] Screensaver mit Preview (Template)
Dann ist die Frage da, warum der Parameter nicht übergeben wird, bei meinem ScreenSaver funkts :P
|
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
Zitat:
Zitat:
:mrgreen: Zitat:
|
Re: [nonVCL] Screensaver mit Preview (Template)
Also ich finds komisch, wenn der Bildschirmschoner läuft und andere StayOnTop Fenster da bleiben :shock:
Wenn das Programm ohne Parameter startet, die Einstellungen anzeigen :wink: Und xZise meint, man soll "Dateiname.scr /c" ausführen :wink: Stimmt aber net :stupid: , weil wie grad beschreiben :wink: Edit: Screen Saver mit Maus bewegen beenden wär' auch Klasse :wink: |
Re: [nonVCL] Screensaver mit Preview (Template)
Hm, eigentlich sollte er als "WS_EX_TOPMOST" an oberster stelle liegen.
Screen Saver mit Maus beenden ist doch mit wenig Programieraufwand möglich... :stupid: // Edit: Versteh ich nicht, bei mir legt er sich artig über alle oberren Fensterli |
Re: [nonVCL] Screensaver mit Preview (Template)
Ja, schon klar, WM_MOUSEMOVE :tongue:
Aber Du wolltest doch alle Fehler wissen :mrgreen: |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
Zitat:
Über "Anzeige" - "Bildschirmschoner" - "Einstellen", übergibt er zuerst den Parameter "/c" und dann denn Parameter "/p" ;) Nur eben über die RMT - "Konfiguration" übergibt er keinen Parameter (aber in der Registry schnell umgestellt ^^) |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
Der Parameter /c:xxxx zeigt an, das der Einstellungen Dialog über die Anzeige->Bildschirmschoner->Einstellungsbutton geöffnet wurde. Im Explorer rechte Maustaste->Konfigurieren hat dann keine Parameter... |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
Habe nun mal alle Punkte ausgebessert. Denk ich... :mrgreen: |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
![]() |
Re: [nonVCL] Screensaver mit Preview (Template)
Und was les ich da? So über habs 2 Fehler...
Nur weil se vergessen haben, es zu erwähnen, das auch kein Parameter kommen kann? Und Application.Run sollte im Config Modus nicht aufgerufen werden. Abgesehen davon hab ich die Application.CreateForm in if Abfragen, ohne das Delphi meckert. Zitat:
Edit: Schön, das ich net der einzige bin, der solche Probleme hatte: Dein Screen Saver läuft 2 Sekunden und schließt sich dann wieder, mag wohl dran liegen, das diese dämlichen Non-Kugel Mäuse WM_MOUSEMOVEs senden, ohne das sich die Cursorposition ändert. :roll: Ich hab das mit Get & SetCursorPos umgangen, einfach prüfen, ob sich der Cursor um mehr als 10 Pixel bewegt hat :wink: Das StayOnTop :gruebel: funkt net, versteh' ich auch net, is aber so :shock: |
Re: [nonVCL] Screensaver mit Preview (Template)
Ja, das mit der Maus, desswegen hatt ich dem Kram rausgelassen. Meine Maus ist angeleint zuck aber hier und da mal an der Leine. Desderwegen schalted sich dan der evtuell laufende screensaver ab und zu aus.
Habe es nur mal auf die Schnelle eingebaut. Wie man sieht. ;) Nunja... Mit dem "StayOnTop" muss mann wohl härtere Massnahmen ergreifen ( SetWindowPos(); etc. ), mal sehen. Happy Screenaving... :snowball: |
Re: [nonVCL] Screensaver mit Preview (Template)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Dur übergibst ein Extended Flag, in den nicht Extended Parametern der nicht nicht Extended Funktion :wink: Mach ein CreateWindowEx draus und schreib als 1. Parameter WS_EX_TOPMOST, dann klappts :-D http://www.delphipraxis.net/images/s...schneeball.gif Edit anhängsel: |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
|
Re: [nonVCL] Screensaver mit Preview (Template)
Den Mouse Bug auch?http://www.delphipraxis.net/images/s...schneeball.gif
|
Re: [nonVCL] Screensaver mit Preview (Template)
Nö, fällt mir noch nix schöhnes ein.
|
Re: [nonVCL] Screensaver mit Preview (Template)
Haste vielleicht net gesehen, oben hatt' ich die Komplettlösung angehängt :wink:
|
Re: [nonVCL] Screensaver mit Preview (Template)
:gruebel: Ja, nein das hatte ich wohl bei unserem derzeit superschnellen DP-Server übersehen.
Das GestMousePos(); wollt ich nicht, es geht auch über den WM_MOUSEMOVE Parameter.
Code:
Aber dennoch danke. :thumb:
WM_MOUSEMOVE fwKeys = wParam;
xPos = LOWORD(lParam); yPos = HIWORD(lParam); |
Re: [nonVCL] Screensaver mit Preview (Template)
Ja, die Regelmäßigen Serverabstürtze bringen mich auch etwas aus dem Konzept. :roteyes:
Oje, die Portalseite is grad kaputt :( Ich weiß, ich war grad zu faul, den WM_MOUSEMOVE zu zerlegen :mrgreen: So besser? :gruebel:
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; |
Re: [nonVCL] Screensaver mit Preview (Template)
Aber sischa ! :mrgreen:
|
Re: [nonVCL] Screensaver mit Preview (Template)
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 :? |
Re: [nonVCL] Screensaver mit Preview (Template)
Ich nehme abhängig vom Modus (Vorschau oder Schoner) zwei verschiedene Nachrichtenschleifen:
Delphi-Quellcode:
Gruß, teebee
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; ... |
Re: [nonVCL] Screensaver mit Preview (Template)
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 :!: |
Re: [nonVCL] Screensaver mit Preview (Template)
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. |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
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. :gruebel: |
Re: [nonVCL] Screensaver mit Preview (Template)
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:
In der Liste sind 6 Quadrate drin.
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; |
Re: [nonVCL] Screensaver mit Preview (Template)
Zitat:
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? |
Re: [nonVCL] Screensaver mit Preview (Template)
Eine Option, um das Ding multimonitorfähig zu machen, wär noch nicht schlecht :D
|
Re: [nonVCL] Screensaver mit Preview (Template)
Nur mal so neben bei, das Thema entfernt sich nun vom ursprünglichen Thread.
Bitte mach(t) doch ein eigenes Thema auf oder lasst es von einem Mod splitten. |
Re: [nonVCL] Screensaver mit Preview (Template)
Hast Recht,
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 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