AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bildschirmschoner programmieren: Previewfenster?
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmschoner programmieren: Previewfenster?

Ein Thema von Neg · begonnen am 20. Feb 2004 · letzter Beitrag vom 29. Dez 2005
Antwort Antwort
Neg

Registriert seit: 16. Jan 2004
Ort: Berlin
63 Beiträge
 
Delphi 5 Professional
 
#1

Bildschirmschoner programmieren: Previewfenster?

  Alt 20. Feb 2004, 07:54
Ich habe vorhin zufällig gelesen, wie einfach es ist, einen Bildschirmschoner selbst zu programmieren. Man braucht ja lediglich eine Exe in Scr umzubenennen und auf gewisse Parameter reagieren, mit denen Windows einen Bildschirmschoner startet.

/c = Konfigurieren
/s = Starten

Nun habe ich durch Rumprobieren herausgefunden, dass Windows das Programm jedes Mal, wenn ein Preview des Bildschirmschoners in diesem kleinen Fensterchen angezeigt werden soll, mit dem Parameter /p aufruft. Als zweiter Parameter wird eine Zahl mitgeliefert, bei der es sich wohl offensichtlich um irgendein Handle handelt.

Aber was genau fange ich damit jetzt an? Um was für ein Objekt handelt es sich dabei und wie kann ich mit ihm kommunizieren? Hat da jemand zufällig eine Ahnung oder sogar Erfahrung mit?

Firmly against signatures. And a hypocrite.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 20. Feb 2004, 08:00
einfach mal showwindow auf das handle anwenden und schauen was verschwindet... Ich könnte mir vorstellen das du das handle als parent bei deinem programm angeben musst damit es in der vorschau angezeigt wird.

[Edit]Vielleicht ist es auch das Handle auf die Canvas für die Vorschau, einfach mal bissl mit dem handle rumspielen...[/Edit]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#3

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 17. Mai 2004, 18:55
Also an dieser Stelle kann ich doch spontan weiterhelfen, bin nämlich gerade an derselben Stelle, bzw. ein Schritt weiter, weil ich zwar das Preview angezeigt, aber nicht wieder automatisch WEG bekomme...

Hier erst mal, wie ich im DPR auf die Parameter reagiere (Nix wildes soweit):

Delphi-Quellcode:
begin
 if ParamCount > 0 then begin
  showmessage(paramstr(1));
  if (ParamStr(1) = '/s') or (ParamStr(1) = '/S') then begin
   Application.Initialize;
   Application.Title := 'Spectrum Clock';
   Application.CreateForm(Tfrm_ScrSave, frm_ScrSave);
   Application.Run;
  end else if (copy(ParamStr(1),1,2) = '/c') or (copy(ParamStr(1),1,2) = '/C') then begin
   Application.Initialize;
   Application.Title := 'Spectrum Clock';
   Application.CreateForm(Tfrm_Config, frm_Config);
   Application.Run;
  end else if (copy(ParamStr(1),1,2) = '/p') or (copy(ParamStr(1),1,2) = '/P') then begin
   Application.Initialize;
   Application.Title := 'Spectrum Clock';
   Application.CreateForm(Tfrm_preview, frm_preview);
   Application.Run;
  end;
 end;
end.
Wie gesagt, alles recht einfach! Im OnCreate-Ereignis vom Preview-Fenster kommt nun folgendes:

Delphi-Quellcode:
procedure Tfrm_preview.FormCreate(Sender: TObject);
var dispHWND: HWND;
    lngStyle: LongInt;
    DispRec: TRECT;
begin
 dispHWND := strtoint(paramstr(2));
 windows.GetClientRect(dispHWND, DispRec);
 lngStyle := GetWindowLong(frm_Preview.handle, GWL_STYLE);
 lngStyle := lngStyle or WS_CHILD;
 SetWindowLong(frm_Preview.handle, GWL_STYLE, lngStyle);
 windows.SetParent(frm_Preview.handle, dispHWND);
 SetWindowLong(frm_Preview.handle, GWL_HWNDPARENT, dispHWND);
 windows.SetWindowPos(frm_Preview.handle, HWND_TOP, 0, 0, DispRec.Right, DispRec.Bottom,
              SWP_NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW);
end;
Der Rest bleibt dir und deinem Bildschirmschoner überlassen. Wenn mir jetzt jemand im Gegenzug helfen könnte, wie man automatisch das Fenster wieder schliessen kann, wenn der Nutzer zum Bleistift, einen anderen Schoner auswählt, wäre ich auch um ein Vielfaches glücklicher!
Ciao
  Mit Zitat antworten Zitat
Gebhard

Registriert seit: 28. Nov 2005
42 Beiträge
 
Delphi 7 Personal
 
#4

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 28. Nov 2005, 13:24
In der anhängenden Zip-Datei befindet sich der Quelltext und eine Beschreibung für die Vorlage eines Bildschirmschoners. Manchem Leser/-in mag Textteile bekannt vorkommen. Ich habe mir einige Programmteile aus dem Internet zusammengesucht.
Die Vorlage wurde mit Delphi 7 erstellt. Ich benutzte grundsätzlich Benennungen in deutscher Sprache (nicht in englischer), weil die Programmteile hierdurch lesbarer werden. In den Formen stehen keine Befehle für die Schonertätigkeit. Dieses überlasse ich der Phantasie des Programmierers.
Olli
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 28. Nov 2005, 13:56
Zitat von Gebhard:
In der anhängenden Zip-Datei...
Die hast du wohl vergessen anzuhängen.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Gebhard

Registriert seit: 28. Nov 2005
42 Beiträge
 
Delphi 7 Personal
 
#6

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 29. Nov 2005, 15:38
Hallo,

hier ein zweiter Versuch mit der Zip-Datei.
Angehängte Dateien
Dateityp: zip basis_delphi_bildschirmschoner_750.zip (211,8 KB, 74x aufgerufen)
Olli
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 10. Dez 2005, 11:37
Hallo!

Du schreibst mal in deiner dpr CreateMutex. Wo liegt darin der Sinn? Dadurch kann man im Windows-Dialog weder auf Config noch auf Preview klicken, da dadurch eine weitere Instanz des Programmes gestartet werden müsse.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Gebhard

Registriert seit: 28. Nov 2005
42 Beiträge
 
Delphi 7 Personal
 
#8

Re: Bildschirmschoner programmieren: Previewfenster?

  Alt 29. Dez 2005, 15:34
zur Frage "Du schreibst mal in deiner dpr CreateMutex. Wo liegt darin der Sinn?..."

Ich habe beim programmieren die Erfahrung gemacht, dass beim Umschalten
des Reiters innerhalb der Desktopeigenschaften das Programm wiederholt gestartet wurde. Mit dem "CreateMutex" verhindere ich dieses.

Ich wünsche Euch einen guten Rutsch und ein schönes 2006.
Olli
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:37 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