AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Probleme mit Bildschirmschonervorschau
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Bildschirmschonervorschau

Ein Thema von Popov · begonnen am 17. Nov 2007 · letzter Beitrag vom 26. Mai 2012
Antwort Antwort
Seite 4 von 4   « Erste     234   
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#31

AW: Probleme mit Bildschirmschonervorschau

  Alt 26. Mai 2012, 12:15
Gut, dann werde ich wohl diese komplizierte Methode vermeiden und einfach die Ereignisbehandlungsprozeduren verwenden.

Was den Code angeht den du nutzt, soll das ein NonVCL ScrennSaver sein?
Teils, teils. Ursprünglich nur VCL mit nur einem Formular für Vorschau und für den eigentlichen Schoner. Dazu muß dieses Formular entweder maximiert und bsNone laufen oder eben in das Vorschaufenster gepreßt werden. Und letzteres war eben nur schwierig und mit Verzögerungen abzubrechen. Die dargestellte Non-VCL-Lösung behebt diese Schwierigkeit, für den eigentlichen Schoner bleibt es beim Formular.

Ursprünglich wollte ich sogar für alle 3 Modi (Vorschau, Schoner und Konfiguration) nur ein Formular benutzen, aber damit tut man sich auch keine Freude an.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#32

AW: Probleme mit Bildschirmschonervorschau

  Alt 26. Mai 2012, 12:43
Mit einem Fenster für alle Modi ist auch nicht so wild, man muß es nur richtig vorbereiten und auf paar Punkte achten.

Als erstens ist die Abfrage Art wie if AnsiStartsText('/P',ParamStr(1)) then Quatsch, sie ist nicht falsch, aber nicht effektiv. Effektiver ist die Parameter zuerst separat auszuwerten, wie z. B.

Delphi-Quellcode:
const
  ssmConfigure = 1; { Dialog 'Einstellungen' }
  ssmFullScreen = 2; { Vollbildmodus }
  ssmPreview = 3; { Vorschau }
  ssmPassword = 4; { Dialog 'Passwort setzen' }
  ssmInstall = 5; { Installieren }

var
  ssMode: Byte;

...

    case Param1[1] of
    'C': Result := ssmConfigure; { Dialog 'Einstellungen' }
    'S': Result := ssmFullScreen; { Vollbildmodus }
    'P': Result := ssmPreview; { Vorschau }
...
Danach arbeitest du nur noch mit der globalen variable ssMode. In einem ein Fenster ScreenSaver reagierst du dann auf if ssMode = ssmFullScreen oder if ssMode = ssmPreview usw. Je nach ssMode reagierst du unterschiedlich. Ist es ssmFullScreen, arbeitet es wie ein ScreenSaver, ist es ssmPreview, abereitet es wie ein Programm, d. h. Tastendruck beendet das Programm nicht usw.

Dann solltest du soweit es geht alles was geht in zwei Funktionen packen für ScreenSaver begin und end, d. h. bestimmte Screensaver Funktionen sollten nicht unkontrolliert in einer normalen Prozedur behandelt werden, sondern in separaten eigenen Funktionen. Damit kannst du je nach ssMode sie aufrufen oder nicht.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#33

AW: Probleme mit Bildschirmschonervorschau

  Alt 26. Mai 2012, 13:05
Das ist mir durchaus klar, danke!

Also, der Bildschirmschoner wird für jeden Modus in diesem Modus neu gestartet.

Für den Vollschirmmodus, den eigentlichen Schonermodus, setzte ich den Mauscursor auf -1 (abgeschaltet) - und nach meiner Meinung auch nur in diesem (Bedingungen und Verzweigungen).

Erstaunlicherweise war der Mauscursor auch im Konfigurationsformular verschwunden. Ich setzte ihn daraufhin für diesen Modus sogar explizt auf crDefault (ist ja eigentlich schon die Starteinstellung), aber es änderte sich nichts, er wollte einfach nicht. Das war mir dann zuviel, ich hatte einfach kein Interesse, mich in diese Unwichtigkeit zu verbeißen. Also, wie schon gesagt, ich tat mir damit keine Freude. Auch muß man dann soviel an dem einen Formular "rummachen" und damit Quelltext erzeugen, daß zwei getrennte Formulare mit den entsprechenden, im Objektinspektor eingetragenen Startwerten auch ihre Berechtigung haben.

Geändert von Delphi-Laie (26. Mai 2012 um 17:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#34

AW: Probleme mit Bildschirmschonervorschau

  Alt 26. Mai 2012, 15:02
Hier gibt es übrigens auch noch ein Beispiel, das habe ich mir nicht näher angeschaut, aber könnte ja interessant sein:
http://edn.embarcadero.com/article/26652

Ich selbst habe die Funktionalität in einer Klsse gekapselt, und zeichne dann nur auf das jeweilige Ziel (Vorschau oder echt). Das macht das ganze deutlich einfacher.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#35

AW: Probleme mit Bildschirmschonervorschau

  Alt 26. Mai 2012, 17:54
Die Vorschauschleife ist dort genauso gelöst wie weiter oben von mir hier veröffentlicht, danke!

Die eigentliche Zeichenfunktion lagerte ich in eine Prozedur aus:

Delphi-Quellcode:
procedure Ausgabe(canvas:TCanvas;x,y:word);
begin
//Quellcode für den Bildschirmschoner
end;
die so

while IsWindowVisible(DemoWnd) do Ausgabe(MyCanvas,scrWidth,scrHeight);

aufgerufen wird, das klappt soweit auch. x und y sind dabei natürlich die Abmessungen des Canvas, somit weiß die Prozedur, in welche Fläche (Ausdehnung derselben) sie zu zeichnen hat.

Nun wollte ich diesselbe Prozedur ja nicht nur für die Schonervorschau, sondern auch für das eigentliche Bildschirmschonen benutzen, deshalb ja die Prozedur. Doch der Aufruf vom als SaverScreen titulierten Formular

Ausgabe(SaverScreen.Canvas,SaverScreen.Width,SaverScreen.Height)

klappt natürlich nicht (wäre ja auch zu schön gewesen), es findet keine Ausgabe statt. Die Prozdur wird natürlich aufgerufen, das war das erste, was ich prüfte. Irgendetwas stimmt mit der Übergabe nicht. Ich probierte es schon mit Pointer, mit der Kreierung eines eigenen Canvas, dem ich das Handle des ScaverScreens respektive seines Canvas' zuwies, doch es tut sich einfach nichts, bis auf einmal, als wenigstens die Meldung kam, daß die Fläche kein Zeichnen erlaubt.

Wie bekommt man dieser Prozedur mitgeteilt, daß sie diesmal auf das Canvas des Schonerformulares zeichnen soll?

Edit: Die Übergabe des Canvas' klappt doch, der Fehler liegt woanders...

Edit 2: Fehler gefunden.

Geändert von Delphi-Laie (26. Mai 2012 um 18:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#36

AW: Probleme mit Bildschirmschonervorschau

  Alt 26. Mai 2012, 19:58
Ich habe mal ein kleines Beispiel gemacht wie ich mir das so vorstelle, siehe Anhang.
(Kompilierbar im Moment ausschließlich mit XE2.)
Angehängte Dateien
Dateityp: 7z Screensaver Demo.7z (503,6 KB, 5x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 16:54 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